直接在每个启用 HTTPS 的 server 块中配置 ssl_protocols TLSv1.2 TLSv1.3; 即可精准禁用 SSLv2、SSLv3、TLSv1.0 和 TLSv1.1;该指令仅在 server 块生效,须配合强加密套件、ssl_prefer_server_ciphers on 及实测验证。
直接在 Nginx 的 server 块中写入 ssl_protocols TLSv1.2 TLSv1.3;,就能精准停用 SSLv2、SSLv3、TLSv1.0 和 TLSv1.1 ——Nginx 不会协商未列出的协议版本,客户端若不支持这两个版本,握手直接失败,不存在“降级”余地。
该指令仅在启用 SSL 的 server 块中生效。写在 http 或 location 块里无效,即使 nginx -t 通过,旧协议仍可能被接受。
ssl 的 server 块都需显式添加这一行server {<br> listen 443 ssl;<br> server_name example.com;<br> ssl_certificate ...;<br> ssl_certificate_key ...;<br> <strong>ssl_protocols TLSv1.2 TLSv1.3;</strong><br> }
看似简单的一行,细节决定是否真正生效:
ssl_protocols TLSv1.2 TLSv1.3;(注意空格、大小写、分号)ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;(含 TLSv1 即等价于 TLSv1.0,触发降级风险)ssl_protocols TLSv1.2+;(Nginx 不支持通配符语法)ssl_protocols TLSv1.2 TLSv1.3(漏掉分号,重载失败)只限制协议不够。TLSv1.2 连接仍可能使用弱 cipher(如含 RC4、SHA1、3DES),导致前向保密缺失或易受攻击。
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
ssl_prefer_server_ciphers on;,防止客户端绕过服务器策略选弱算法修改后执行 nginx -t && nginx -s reload,再用命令实测:
openssl s_client -connect example.com:443 -tls1_1 -servername example.com → 应返回 handshake failure 或 connection resetopenssl s_client -connect example.com:443 -tls1_2 -servername example.com → 应成功握手并显示证书信息nmap --script ssl-enum-ciphers -p 443 example.com 查看输出,确认无 TLSv1.0/TLSv1.1 区块