我通过 letsencrypt 创建了 ssl 证书。它们创建得很好,当我运行:
openssl x509 -in {ssl_cert} -text -noout
它打印出所有适当的信息,看起来一切都很好。这些文件由具有0600
权限的 root 拥有。另一方面,如果我从 Web 尝试同样的事情:
echo | openssl s_client -connect {host}:443
我收到以下错误:
CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0bytes and written 297bytes
---
New,(NONE),Cipher is(NONE)
Secure Renegotiation IS NOT supported
Compression:NONE
Expansion:NONE
---
这让我相信 nginx 根本无法提供 SSL 流量。当我尝试以下操作时:
nginx -V
我得到以下信息(重要部分周围标有*)
nginx version: nginx/1.1.19
*TLS SNI support enabled*
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module *--with-http_ssl_module* --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-auth-pam --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-upstream-fair --add-module=/build/buildd/nginx-1.1.19/debian/modules/nginx-dav-ext-module
netstat 告诉我 nginx 正在运行。
$ sudo netstat -an | grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
unix 3 [ ] STREAM CONNECTED 8443
由于 nginx 内置了它所需要的所有 ssl 支持(我认为),并且我的 vhost 设置为使用 ssl,而且证书是正确的...我不明白为什么当 ssl 连接进来时它会切断通信。我尝试使用 wireshark 来传输流量,客户端发送一个 ssl“客户端 Hello”,然后发回一个 RST...
我应该指出,我在此服务器上设置了多个虚拟主机,它们都表现出完全相同的行为。所以我猜这是更普遍的问题,但我的 nginx 虚拟主机内容如下:
我已经设置了我的 nginx conf 文件(仅显示相关部分):
server {
listen 80;
server_name {server name};
location / {
return 301 https://$host$request_uri;
}
}
server
{
listen 443 ssl;
server_name {server name};
ssl on;
ssl_certificate {path to certs}/fullchain.pem;
ssl_certificate_key {path to certs}/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS +RC4 RC4';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
}
我也是很确定所有这些都不是问题。当我尝试访问网站时
答案1
Nginx 1.1.19 已经有四年历史了,解决方案很可能升级到最新版本的 Nginx。