应精准禁用tlsv1.0和tlsv1.1,仅保留tlsv1.2与tlsv1.3;该指令须置于http或server块(location中无效),推荐全局配置在http块并配合强ssl_ciphers及openssl/ssl labs实测验证。

必须放在 http 或 server 块中
该指令在 location 块里无效。推荐统一写在 http 块顶层,避免遗漏;若需差异化策略(如内网 API 更严格),可在特定 server 块中覆盖:
-
全局收紧(推荐):
http {<br> ssl_protocols TLSv1.2 TLSv1.3;<br>} -
仅对高敏服务强制 TLSv1.3:
server {<br> listen 443 ssl;<br> server_name api.internal;<br> ssl_protocols TLSv1.3;<br>}
明确禁用 TLSv1.0 和 TLSv1.1
PCI DSS、等保2.0、NIST SP 800-52r2 等合规标准已明确淘汰这两个版本。配置中不得出现以下值:
- ❌
TLSv1、TLSv1.1、SSLv3、SSLv2 - ✅ 正确写法仅保留:
TLSv1.2 TLSv1.3(两者兼容性好,TLSv1.3 为首选) - ⚠️ 注意:Nginx 1.19.4+ 编译时若 OpenSSL ≥ 1.1.1,默认已移除 TLSv1 支持,即使误写也不会生效,但显式排除更利于审计追溯
必须同步限制加密套件
只禁协议不够——如果仍允许弱 cipher(如 AES128-SHA、RC4),攻击者可能通过降级协商获取可破解流量:
- 指定强套件列表,例如:
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;
防止客户端强行选择弱项 - 避免混入 TLSv1.3 不支持的老套件(如含
SHA256后缀但无TLS_前缀的)
验证是否真正生效
语法正确 ≠ 实际生效。建议三步验证:
- 用 SSL Labs 测试工具 输入域名,查看“Handshake Simulation”中各客户端实际协商结果
- 本地终端执行:
openssl s_client -connect your-domain.com:443 -tls1_1,应返回no protocols available或握手失败 - 抓包确认:在 Nginx 服务器上对 443 端口抓包,Wireshark 中检查 ClientHello 的
supported_versions扩展,不应含0x0301(TLSv1.0)或0x0302(TLSv1.1)











