应禁用SSLv2、SSLv3、TLS 1.0和TLS 1.1;推荐配置为ssl_protocols TLSv1.2 TLSv1.3,以兼顾安全与兼容性,并需置于server块内、配合证书使用,修改后需语法校验并重载。

在 Nginx 中,ssl_protocols 指令用于明确指定服务器支持的 TLS 协议版本。合理配置它能直接关闭过时、存在已知漏洞的协议(如 SSLv2、SSLv3、TLS 1.0 和 TLS 1.1),从而提升 HTTPS 连接的安全基线。
哪些 TLS 版本应禁用?
以下协议已被证实不安全或已被主流标准弃用,**不应出现在生产环境的 ssl_protocols 配置中**:
- SSLv2 / SSLv3:存在严重设计缺陷(如 POODLE 攻击),早已被 IETF 废止;
- TLS 1.0 / TLS 1.1:缺乏现代加密套件支持,易受 BEAST、CRIME 等攻击,且不满足 PCI DSS 4.1、GDPR 等合规要求。
推荐的配置写法
当前(截至 2024 年)兼顾安全性与兼容性的主流配置是仅启用 TLS 1.2 和 TLS 1.3:
ssl_protocols TLSv1.2 TLSv1.3;
该配置:
- 兼容所有现代浏览器(Chrome 70+、Firefox 63+、Safari 12.1+、Edge 79+)及主流移动端;
- 排除所有已知高危协议,满足 CIS、Mozilla SSL Configuration Generator 的“Intermediate”及以上等级建议;
- 无需额外启用 TLS 1.0/1.1,除非你明确需要支持 Windows 7 + IE 11(已无安全更新)或老旧嵌入式设备——这类场景应单独评估风险并设法升级客户端。
配置位置与生效范围
ssl_protocols 必须放在启用 HTTPS 的 server 块内,且需配合有效的证书和私钥使用:
server {
listen 443 ssl http2;
server_name example.com;
<pre class="brush:php;toolbar:false;">ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3; # ← 关键行,放在这里
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:...; # 建议同步优化 cipher 套件
}
注意:
- 该指令不能出现在
http或location块中; - 若多个
server块共用同一 IP:port,每个块都需独立设置(Nginx 不继承父级 SSL 协议配置); - 修改后务必执行
nginx -t校验语法,并nginx -s reload生效。
验证是否生效
部署后可用以下方式快速确认:
- 使用
openssl s_client -connect example.com:443 -tls1_1测试 TLS 1.1 —— 应返回握手失败; - 访问 SSL Labs Test,查看 “Protocol Support” 部分是否仅显示 TLS 1.2 和 TLS 1.3;
- 检查 Nginx 错误日志,若客户端尝试旧协议,会记录类似
no protocols available的警告(说明拦截成功)。










