一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何用 ssl_protocols 显式指定 TLSv1.2 与 TLSv1.3 以停用高危过时加密协议

时间:2026-07-27 07:44:47 编辑:袖梨 来源:一聚教程网

直接在每个启用 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 不会协商未列出的协议版本,客户端若不支持这两个版本,握手直接失败,不存在“降级”余地。

必须放在 server 块内,且每个 HTTPS 站点单独配置

该指令仅在启用 SSL 的 server 块中生效。写在 httplocation 块里无效,即使 nginx -t 通过,旧协议仍可能被接受。

  • 每个监听 443 并开启 sslserver 块都需显式添加这一行
  • 多个域名或虚拟主机(如不同 sites-enabled 文件)不能依赖继承,必须逐个配置
  • 示例正确位置:
    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";
  • 禁用所有含 MD5、SHA1、DES、3DES、RC4 的套件
  • 启用服务端优先:ssl_prefer_server_ciphers on;,防止客户端绕过服务器策略选弱算法

验证是否真正生效,不能只靠配置检查

修改后执行 nginx -t && nginx -s reload,再用命令实测:

  • 测试 TLSv1.1 是否被拒:openssl s_client -connect example.com:443 -tls1_1 -servername example.com → 应返回 handshake failure 或 connection reset
  • 测试 TLSv1.2 是否可用:openssl s_client -connect example.com:443 -tls1_2 -servername example.com → 应成功握手并显示证书信息
  • nmap --script ssl-enum-ciphers -p 443 example.com 查看输出,确认无 TLSv1.0/TLSv1.1 区块
  • 访问 SSL Labs Test(ssllabs.com),检查 “Protocol Support” 是否仅显示 TLS 1.2 和 TLS 1.3

热门栏目