Nginx服务器关闭某些客户端的ssl连接

Nginx服务器关闭某些客户端的ssl连接,ssl,nginx,https,Ssl,Nginx,Https,我在运行nginx的机器上遇到了一些https连接问题。 我尝试过的大多数浏览器都可以工作,但有些Safari版本和openssl无法连接。 将多个尝试显示为“服务器关闭连接” 这个问题似乎与我在谷歌搜索日志内容时读到的一些东西有关 连接到openssl s_客户端时-连接测试。relis.no:443: 已连接(00000003) 写入:errno=104 没有可用的对等证书 未发送客户端证书CA名称 SSL握手读取0字节,写入295字节 新建,(无),密码为(无) 不支持安全重新协商 压缩:

我在运行nginx的机器上遇到了一些https连接问题。 我尝试过的大多数浏览器都可以工作,但有些Safari版本和openssl无法连接。 将多个尝试显示为“服务器关闭连接”

这个问题似乎与我在谷歌搜索日志内容时读到的一些东西有关

连接到openssl s_客户端时-连接测试。relis.no:443: 已连接(00000003)

写入:errno=104 没有可用的对等证书 未发送客户端证书CA名称 SSL握手读取0字节,写入295字节 新建,(无),密码为(无) 不支持安全重新协商 压缩:无

扩展:无 Nginx配置:

server {
        listen       443 ssl;
        server_name  test.relis.no;

        location / {
            proxy_pass http://localhost:8081;
            proxy_read_timeout 3600;
        }

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto https;

        ssl_certificate /etc/letsencrypt/live/test.relis.no/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/test.relis.no/privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;

        ssl_ciphers ALL;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        add_header Strict-Transport-Security max-age=15768000;
}
(ssl加密全部;仅用于测试)

添加调试连接信息将产生(此客户端是Ipad上的Safari):

OpenSSL(版本1.0.1e-fips 2013年2月11日)密码打印:

ECDHE-RSA-AES256-GCM-SHA384
ECDHE-ECDSA-AES256-GCM-SHA384
ECDHE-RSA-AES256-SHA384
ECDHE-ECDSA-AES256-SHA384
ECDHE-RSA-AES256-SHA
ECDHE-ECDSA-AES256-SHA
DHE-DSS-AES256-GCM-SHA384
DHE-RSA-AES256-GCM-SHA384
DHE-RSA-AES256-SHA256
DHE-DSS-AES256-SHA256
DHE-RSA-AES256-SHA
DHE-DSS-AES256-SHA
DHE-RSA-CAMELLIA256-SHA
DHE-DSS-CAMELLIA256-SHA
ECDH-RSA-AES256-GCM-SHA384
ECDH-ECDSA-AES256-GCM-SHA384
ECDH-RSA-AES256-SHA384
ECDH-ECDSA-AES256-SHA384
ECDH-RSA-AES256-SHA
ECDH-ECDSA-AES256-SHA
AES256-GCM-SHA384
AES256-SHA256
AES256-SHA
CAMELLIA256-SHA
PSK-AES256-CBC-SHA
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-ECDSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-ECDSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
ECDHE-ECDSA-AES128-SHA
DHE-DSS-AES128-GCM-SHA256
DHE-RSA-AES128-GCM-SHA256
DHE-RSA-AES128-SHA256
DHE-DSS-AES128-SHA256
DHE-RSA-AES128-SHA
DHE-DSS-AES128-SHA
ECDHE-RSA-DES-CBC3-SHA
ECDHE-ECDSA-DES-CBC3-SHA
DHE-RSA-SEED-SHA
DHE-DSS-SEED-SHA
DHE-RSA-CAMELLIA128-SHA
DHE-DSS-CAMELLIA128-SHA
EDH-RSA-DES-CBC3-SHA
EDH-DSS-DES-CBC3-SHA
ECDH-RSA-AES128-GCM-SHA256
ECDH-ECDSA-AES128-GCM-SHA256
ECDH-RSA-AES128-SHA256
ECDH-ECDSA-AES128-SHA256
ECDH-RSA-AES128-SHA
ECDH-ECDSA-AES128-SHA
ECDH-RSA-DES-CBC3-SHA
ECDH-ECDSA-DES-CBC3-SHA
AES128-GCM-SHA256
AES128-SHA256
AES128-SHA
SEED-SHA
CAMELLIA128-SHA
DES-CBC3-SHA
IDEA-CBC-SHA
PSK-AES128-CBC-SHA
PSK-3DES-EDE-CBC-SHA
KRB5-IDEA-CBC-SHA
KRB5-DES-CBC3-SHA
KRB5-IDEA-CBC-MD5
KRB5-DES-CBC3-MD5
ECDHE-RSA-RC4-SHA
ECDHE-ECDSA-RC4-SHA
ECDH-RSA-RC4-SHA
ECDH-ECDSA-RC4-SHA
RC4-SHA
RC4-MD5
PSK-RC4-SHA
KRB5-RC4-SHA
KRB5-RC4-MD5
ldd
哪个nginx
| grep ssl
: libssl.so.10=>/lib64/libssl.so.10(0x00007f413c860000)

nginx-V

nginx version: nginx/1.6.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_spdy_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module --with-http_perl_module --with-mail --with-mail_ssl_module --with-pcre --with-pcre-jit --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic' --with-ld-opt='-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E'

在我看来,任何试图使用TLS_DHE_RSA_和_AES_256_CBC_SHA256的客户端都失败了。这是您最喜欢的密码,但所有成功的客户端都不支持它,因此跳过它,所有失败的客户端都支持它

老实说,我不知道为什么会这样——可能是TLS_DHE_RSA_与_AES_256_CBC_SHA256在您正在使用的任何SSL库(openssl?)中的糟糕实现?不知道会导致这种情况的任何问题,但同时,人们通常不会选择这种密码。如果您的SSL软件支持SHA256,那么它一定非常现代,并且通常有比这个更好的密码

需要注意的另一件有趣的事情是,没有列出更好的密码-即使您已将ssl_密码设置为ALL。真奇怪!它会向我建议您使用的是旧版本的SSL软件,但为什么它会提供TLS_DHE_RSA_和_AES_256_CBC_SHA256(尽管在我看来,即使它不支持TLS_DHE_RSA_)?同时,它确实支持TLSv1.2,并成功地将TLS_ECDHE_RSA_与_AES_256_CBC_SHA一起使用(至少根据ssllabs),这表明它是一个更新的库。的确很奇怪

您使用的是哪个SSL库以及哪个版本?这可能会让事情变得明朗一点

然而,同时如果你用AES 256 CBC SHA256禁用TLS DHE RSA 256,我想这会起作用。您可以使用获取所需的设置,但我使用这些设置即使对大多数较旧的浏览器也有很好的支持,但如果客户端支持,请首先使用较新的密码:

ssl_ciphers 'EECDH+AES128:EECDH+AES256:+SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RSA+3DES:!DSS';
请注意,您的SSL库版本可能不支持所有这些密码。

我发现,这让我测试了openssl s_客户端-connect和-tls1/-tls1_1/-tls1_2

-tls1和tls1_1工作正常,但-tls1_2与以前一样失败,出现错误104

我可能应该进一步挖掘这些新信息,但我现在已经受够了。所以,既然它似乎起作用了,我现在就不谈了


可惜的是,由于缺少TLS1.2,ssllabs分数现在被限制为C。

我知道这是一篇老文章,但如果其他人遇到这个问题或类似的SSL问题,我在经过几天的故障排除后发现它与我的nginx版本有关

我使用的是nginx/1.6.3,并更新到当前的nginx/1.14.0,错误得到了解决


我相信这是由于较旧版本的nginx使用较旧的openSSL版本,导致它无法正确读取我较新的SSL证书

谢谢你的回答。SSL库是OpenSSL 1.0.1e-fips。在发布之前,我尝试了Mozilla配置工具,同样的结果。我必须继续调试。已尝试使用-tls1、-tls1_1和-tls1_2强制协议。openssl s_客户端-连接测试.relis.编号:443-tls1_2给出:已连接(00000003)140521595524768:错误:1408F10B:SSL例程:SSL3_GET_记录:错误版本号:s3_pkt.c:339:我猜Nginx是用较旧版本的openssl构建的,在没有重建Nginx的情况下在系统上更新的?请发布
ldd`哪个Nginx`| grep SSL
的输出,并
Nginx-V
将输出添加到主帖子中。OK,因此nginx是动态链接到libssl的。为了确保使用的是哪个版本的OpenSSL nginx,您可以发布
strings/lib64/libssl.so.10 | grep“^OpenSSL”
“OpenSSL 1.0.1e-fips 2013年2月11日”的输出吗
ssl_ciphers 'EECDH+AES128:EECDH+AES256:+SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:RSA+3DES:!DSS';