必须彻底禁用TLS 1.1及以下版本,仅保留TLSv1.2和TLSv1.3;需同步配置ssl_ciphers禁用弱算法、ssl_prefer_server_ciphers off、ssl_ecdh_curve及会话缓存,确保协议与加密套件协同强化安全。

必须彻底禁用 TLS 1.1 及以下版本,不是优化选项,而是安全底线。Nginx 中 ssl_protocols 配置若仍包含 TLSv1 或 TLSv1.1,等于主动向攻击者敞开大门——主流浏览器早已拒接握手,合规审计直接判为高风险项,服务端也失去现代加密保障。
协议本身存在不可修复的设计缺陷
TLS 1.0(1999年)和 TLS 1.1(2006年)诞生于密码学演进早期,核心机制已无法满足当前安全要求:
- TLS 1.0 不支持 AEAD 加密模式(如 AES-GCM),易受 POODLE、BEAST 等填充预言类攻击
- TLS 1.1 虽修补部分漏洞,但未强制前向保密(PFS),密钥泄露后历史通信可被解密
- 两者均不支持完整 SNI 语义,在虚拟主机场景下存在协商歧义风险
- 依赖 SHA-1、MD5、RC4 等已被证实脆弱的算法,无法抵御已知降级攻击
已全面脱离实际运行环境
禁用不是“未来趋势”,而是当前事实:
- Chrome、Firefox、Edge、Safari 自 2020 年起默认拒绝 TLS 1.0/1.1 握手
- AWS ALB、Cloudflare、Azure 存储等云服务在 2026 年初已完成强制淘汰
- PCI DSS 4.1、GDPR 技术附录、等保2.0三级系统明确要求最低 TLS 1.2
- Let’s Encrypt 不再签发兼容旧协议的证书,新证书握手失败率显著上升
Nginx 配置中一个遗漏即全站失效
ssl_protocols 的作用域是继承式覆盖,只要任意 http、server 块或 include 文件中存在宽松配置(例如 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3),整个 Nginx 实例都会回退到最弱协议支持级别。
- 检查命令:
nginx -T 2>/dev/null | grep -A2 "ssl_protocols" - 重点排查:
conf.d/下所有 .conf、ssl.conf、default.conf等引入文件 - 正确写法仅保留:
ssl_protocols TLSv1.2 TLSv1.3;(注意末尾分号)
配套必须同步调整的关键指令
仅改 ssl_protocols 不够,还需收紧加密套件与密钥交换逻辑:
-
ssl_ciphers:禁用!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA,推荐 Mozilla Intermediate 配置 -
ssl_prefer_server_ciphers off:让客户端选择更优 cipher,尤其利于 TLS 1.3 协商 -
ssl_ecdh_curve X25519:prime256v1:显式指定高效安全曲线,避免协商到弱参数 -
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;:平衡复用效率与会话生命周期
不复杂但容易忽略:一次配置清理,换来的是合规过审、攻击面收敛、以及真实用户连接成功率提升。


















