使用 Nginx 重置 SSL 连接

使用 Nginx 重置 SSL 连接

我通过 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。

相关内容