在NGINX中禁用TLS 1.0


22

我有NGINX充当我们网站的反向代理,并且运行良好。对于需要ssl的网站,我关注了raymii.org以确保获得尽可能高的SSLLabs评分。其中一个站点需要符合PCI DSS的要求,但是基于最新的TrustWave扫描现在由于启用了TLS 1.0而失败。

在nginx.conf中的http级别上,我有:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

对于特定的服务器,我有:

ssl_protocols TLSv1.1 TLSv1.2;

我更改了密码,将内容从http级别移到了每个ssl站点服务器,但是无论何时运行:

openssl s_client -connect www.example.com:443 -tls1

我获得了TLS 1.0的有效连接。SSLLabs将网站的nginx设置作为A放置,但使用TLS 1.0,因此我相信其余设置是正确的,只是不会关闭TLS 1.0。

对我可能会想念的东西有什么想法?

openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-amd64

nginx -v
nginx version: nginx/1.8.0

1
请注意,直到2016
Michael Hampton

Answers:


12

这里的问题是,Server name indicationTLS协商的一部分是在协商连接本身之后完成的。并且在连接协商期间协商协议。

如果将虚拟主机配置为没有其他虚拟主机与其关联的服务器上的IP地址,则可能对该虚拟主机不实施TLS v1.0。因此,nginx将基于IP地址知道不允许TLS v 1.0。


谢谢。我假设没有办法解决此问题,因为我们目前没有备用IP来进行测试。
肖恩C.15年

1
Server Name Indication是TLS的一部分ClientHello。它在客户端发送的第一条消息中,以后不协商。听起来更像是Nginx有设计缺陷。听起来好像它接受了连接,然后将其正确与否转发到虚拟主机。相反,nginx应该解析服务器名称,咨询虚拟主机,如果连接不能满足虚拟主机的要求,则拒绝该连接。由于TLS 1.0有时会令人怀疑,因此设计缺陷可能值得CVE。显然在某些情况下违反了C&A。

感谢您的评论。如果它确实是一个真正的设计缺陷,那么这很有趣。
Tero Kilkanen '16

1
使用较新的Nginx版本在2019年保持不变吗?
罗布施

18

找到要用作“默认” ssl协商模板的服务器块。找到你的听众

server {
    ...
    listen 443 ssl;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

并添加default_server到该行的末尾

server {
    ...
    listen 443 ssl default_server;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

这使得nginx在协商要使用的TLS版本时可以进行配置。缺点是每个端口只能有一个默认服务器。因此,禁止启用某些启用了TLSv1的虚拟域,而禁用某些禁用的是。


这是否意味着ssl_protocolls仅在一个地方起作用?在具有default_server声明的服务器配置内?在协商过程中使用此配置时,另一个配置中的ssl_protocolls设置无效吗?
罗布施

4

我在nginx版本1.8.1上禁用了TLSv1。您需要将openssl更新到1.0.1g或1.0.1h版本。然后只需从ssl_protocols指令中删除“ TLSv1”即可:

ssl_protocols TLSv1.1 TLSv1.2

然后通过命令检查通过TLSv1的连接:

openssl s_client -tls1 -connect example.com:443 < /dev/null

您应该得到类似的内容:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1474531027
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

1
人们在托管环境中通常不能替换OpenSSL的版本。服务器操作员控制服务器的配置。而不是租用虚拟服务器的网站运营商。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.