必须同时满足openssl≥1.1.1(通过nginx -v确认)、ssl_protocols tlsv1.2 tlsv1.3、专用tls 1.3密码套件及ocsp/hsts等加固配置,缺一不可;仅加ssl_protocols tlsv1.3会静默降级或断连。

直接升级到 TLS 1.3 能显著提升安全性与性能,但不能只改一行配置就完事。关键在于底层依赖、协议组合、加密套件三者必须严格匹配,否则会静默降级或连接失败。
确认运行环境真实支持 TLS 1.3
很多问题出在“以为支持,其实不支持”。必须用命令验证实际运行时的 OpenSSL 版本,而不是看系统命令行工具版本:
- 执行 nginx -V 2>&1 | grep -i "openssl\|built with",输出中必须含 OpenSSL 1.1.1 或更高(如 1.1.1w、3.0.13)
- 若显示 OpenSSL 1.0.2 或 1.1.0,哪怕 Nginx 是 1.18 也无效,需重装或重编译
- Ubuntu/Debian 用户建议启用 ppa:ondrej/nginx;CentOS 7 需手动编译或换用 EPEL + nginx-mainline
server 块中必须写的 TLS 1.3 核心配置
仅写 ssl_protocols TLSv1.3; 会切断所有旧客户端(IE11、Android 4.x、部分 IoT 设备),生产环境应保持兼容性:
- 推荐写法:ssl_protocols TLSv1.2 TLSv1.3;(顺序无关,但建议 TLSv1.3 放后)
- 加密套件必须用 TLS 1.3 专用格式:ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256;
- ssl_prefer_server_ciphers off; —— TLS 1.3 下该指令已失效,设为 on 反而干扰协商
配套加固项不能少
TLS 1.3 本身很安全,但单靠它拿不到 A+ 安全评级,还需补齐关键响应头和机制:
-
HSTS 强制 HTTPS:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; -
OCSP Stapling 加速证书校验(尤其对 Safari/iOS 关键):
ssl_stapling on; ssl_stapling_verify on; resolver 114.114.114.114 8.8.8.8 valid=300s; - 基础安全头:X-Frame-Options、X-Content-Type-Options、Referrer-Policy、Content-Security-Policy 等都应配置
验证是否真正生效
浏览器开发者工具“安全”标签页显示 TLS 1.3 ≠ 实际启用成功。可靠验证方式:
- 用 curl -I --http2 https://yourdomain.com 查看响应头是否有 HSTS,且无 301 降级跳转
- 用 openssl s_client -connect yourdomain.com:443 -tls1_3 测试直连 TLS 1.3 是否通
- 访问 https://www.ssllabs.com/ssltest/ 全面检测协议支持、套件强度、HSTS 等











