我正在尝试弄清楚如何禁用 TLSv1 和 1.1 Nginx 并仅允许在 1.2 上进行连接。这更多是出于测试原因,而不是在生产中使用,我实在想不通为什么 Nginx 不允许我这样做。
Nginx SSL 配置:
ssl on;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM256:DH+AESGCM256:ECDH+AES256:!aNULL:!MD5:!kEDH;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=262974383; includeSubdomains;";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
但出于某种原因,Nginx 仍然协商 1.0 和 1.1 连接。我做错了什么吗?我在 Ubuntu Server 14.04LTS 上使用 Nginx 1.7.10 和 OpenSSL 1.0.1f。
答案1
来自nginx 文档对于ssl_protocols
指令:
从 1.1.13 和 1.0.12 版本开始支持 TLSv1.1 和 TLSv1.2 参数,因此当在旧版本的 nginx 上使用 OpenSSL 1.0.1 或更高版本时,这些协议可以工作,但不能被禁用。`
在较新的版本中,可以使用openssl
以下命令进行验证:
- 验证是否支持 TLS v1.2:
openssl s_client -tls1_2 -connect example.org:443 < /dev/null
- 验证 TLS v1.1不是支持的:
openssl s_client -tls1_1 -connect example.org:443 < /dev/null
- 验证 TLS v1.0不是支持的:
openssl s_client -tls1 -connect example.org:443 < /dev/null
如果 nginx 配置仅包含ssl_protocols TLSv1.2
指令,则仅支持 TLSv1.2。如果ssl_protocols TLSv1.1 and TLSv1.2
配置了,则仅支持 TLSv1.1 和 TLSv1.2。使用openssl 1.0.1e
和进行测试nginx 1.6.2
。