NginX:HTTPS 连接被拒绝
NginX: HTTPS connections refused
我已经使用 Let's Encrypt
创建了 SSL 证书,现在正尝试使用 NginX 对其进行设置。 NginX 使用我的配置,重新启动并很好地处理 HTTP,但拒绝 HTTPS 连接。
另外,我的服务器没有防火墙。我用netstat -peanut | grep ":443 "
和NMap检查了443端口,没有问题。
我有以下 SSL 文件:
ca bundle.crt
,共27行,以-----BEGIN CERTIFICATE-----
开头
ca.crt
, 35行,以-----BEGIN CERTIFICATE-----
开头
private_rsa.key
,共27行,以-----BEGIN RSA PRIVATE KEY-----
开头
private.key
,28行,以-----BEGIN PRIVATE KEY-----
开头
我不知道哪些是重要的,所以我尝试了所有的组合,但没有任何效果。这是我的 NginX 配置:
server {
listen 80;
listen 443 ssl;
server_name domain.ru www.domain.ru;
ssl_certificate /var/www/SSL/ca.crt;
ssl_certificate_key /var/www/SSL/private.key;
access_log /var/www/Ret/Returner/logs/nginx.access.log;
error_log /var/www/Ret/Returner/logs/nginx.error.log;
proxy_read_timeout 950s;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/Ret/Returner/;
}
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
如何解决问题?
我的 OS 是 Ubuntu 16.04。 NginX 版本:1.10.3 使用 OpenSSL 1.0.2g 构建,启用了 TLS SNI 支持。
更新。
为了生成证书,我使用了两种不同的方法:
使用 www.sslforfree.com 并获得 DNS 所有权批准。
使用以下 OpenSSL 命令:
openssl genrsa 4096 > /var/www/Ret/account.key
openssl rsa -in /var/www/Ret/account.key -pubout
不幸的是,两个证书文件集都不起作用。
我个人不喜欢在同一个 server
部分中使用 80 和 443。
我也不确定这是否是一个问题。但是你能试试这样吗?
# Redirect all http to https
server {
listen 80 default_server;
rewrite ^ https://$host$request_uri? permanent;
}
# Handle https
server {
server_name domain.ru www.domain.ru;
listen 443 ssl http2;
# Certificates
ssl_certificate /var/www/SSL/ca.crt;
ssl_certificate_key /var/www/SSL/private.key;
# Logs
access_log /var/www/Ret/Returner/logs/nginx.access.log;
error_log /var/www/Ret/Returner/logs/nginx.error.log;
proxy_read_timeout 950s;
# Static Content
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/Ret/Returner/;
}
# Reverse Proxy
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
我找到了解决办法。它是关于创建 ca_chain.crt
的,它应该包含您的证书和 CA 包的数据。它的结构很简单,如下:
-----BEGIN CERTIFICATE-----
MIIFXTCCBEWgAwIBAgISA1jUznaa6AUn/4wyOV49e1QBMA0GCSqGSIb3DQEBCwUA
// content of the ca.crt //
2PxVU6WNy9wOVgGdO5TaxRQgO2p04AYJpovREYCuOctz
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
// content of the ca_bundle.crt //
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----
然后,在 NginX 配置中:
ssl_certificate /aivanf/ssl/ca_chain.crt;
ssl_certificate_key /aivanf/ssl/ca.key;
这个ca.key
和我之前叫的一样private.key
我已经使用 Let's Encrypt
创建了 SSL 证书,现在正尝试使用 NginX 对其进行设置。 NginX 使用我的配置,重新启动并很好地处理 HTTP,但拒绝 HTTPS 连接。
另外,我的服务器没有防火墙。我用netstat -peanut | grep ":443 "
和NMap检查了443端口,没有问题。
我有以下 SSL 文件:
ca bundle.crt
,共27行,以-----BEGIN CERTIFICATE-----
开头
ca.crt
, 35行,以-----BEGIN CERTIFICATE-----
开头
private_rsa.key
,共27行,以-----BEGIN RSA PRIVATE KEY-----
开头
private.key
,28行,以-----BEGIN PRIVATE KEY-----
开头
我不知道哪些是重要的,所以我尝试了所有的组合,但没有任何效果。这是我的 NginX 配置:
server {
listen 80;
listen 443 ssl;
server_name domain.ru www.domain.ru;
ssl_certificate /var/www/SSL/ca.crt;
ssl_certificate_key /var/www/SSL/private.key;
access_log /var/www/Ret/Returner/logs/nginx.access.log;
error_log /var/www/Ret/Returner/logs/nginx.error.log;
proxy_read_timeout 950s;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/Ret/Returner/;
}
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
如何解决问题?
我的 OS 是 Ubuntu 16.04。 NginX 版本:1.10.3 使用 OpenSSL 1.0.2g 构建,启用了 TLS SNI 支持。
更新。
为了生成证书,我使用了两种不同的方法:
使用 www.sslforfree.com 并获得 DNS 所有权批准。
使用以下 OpenSSL 命令:
openssl genrsa 4096 > /var/www/Ret/account.key
openssl rsa -in /var/www/Ret/account.key -pubout
不幸的是,两个证书文件集都不起作用。
我个人不喜欢在同一个 server
部分中使用 80 和 443。
我也不确定这是否是一个问题。但是你能试试这样吗?
# Redirect all http to https
server {
listen 80 default_server;
rewrite ^ https://$host$request_uri? permanent;
}
# Handle https
server {
server_name domain.ru www.domain.ru;
listen 443 ssl http2;
# Certificates
ssl_certificate /var/www/SSL/ca.crt;
ssl_certificate_key /var/www/SSL/private.key;
# Logs
access_log /var/www/Ret/Returner/logs/nginx.access.log;
error_log /var/www/Ret/Returner/logs/nginx.error.log;
proxy_read_timeout 950s;
# Static Content
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/Ret/Returner/;
}
# Reverse Proxy
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
我找到了解决办法。它是关于创建 ca_chain.crt
的,它应该包含您的证书和 CA 包的数据。它的结构很简单,如下:
-----BEGIN CERTIFICATE-----
MIIFXTCCBEWgAwIBAgISA1jUznaa6AUn/4wyOV49e1QBMA0GCSqGSIb3DQEBCwUA
// content of the ca.crt //
2PxVU6WNy9wOVgGdO5TaxRQgO2p04AYJpovREYCuOctz
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/
// content of the ca_bundle.crt //
KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==
-----END CERTIFICATE-----
然后,在 NginX 配置中:
ssl_certificate /aivanf/ssl/ca_chain.crt;
ssl_certificate_key /aivanf/ssl/ca.key;
这个ca.key
和我之前叫的一样private.key