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

配置 Nginx 支持 TLS 1.3 不是加一行 ssl_protocols TLSv1.3 就能生效的,必须同时满足底层支持、协议声明、密码套件匹配和配套加固四项条件,缺一不可。
确认运行环境真实支持 TLS 1.3
很多问题出在“以为支持,其实不支持”。关键看 Nginx 编译时绑定的 OpenSSL,而不是系统命令行里装的那个:
- 执行
nginx -V 2>&1 | grep -i openssl,输出中必须含 OpenSSL 1.1.1(如 1.1.1w)或 OpenSSL 3.0+(如 3.0.13),1.0.2 或 1.1.0 均无效 - 运行
openssl ciphers -v 'TLSv1.3',应至少输出三条套件,例如:TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256、TLS_AES_128_GCM_SHA256 - Nginx 版本需 ≥ 1.13.0,生产环境推荐 ≥ 1.16.0 或 1.24.x 稳定版;若为源码编译,需含
--with-openssl-opt=enable-tls1_3
在 server 块中精准配置协议与套件
仅写 ssl_protocols TLSv1.3 会导致老客户端(如 IE11、Android 4.4)直接断连;混入 TLS 1.2 套件则可能静默降级或握手失败:
- 兼容性推荐写法:
ssl_protocols TLSv1.2 TLSv1.3; - 必须使用 TLS 1.3 原生套件,且不能混入任何非 TLS_ 开头的套件:
ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256; - 显式关闭已失效指令:
ssl_prefer_server_ciphers off;
启用关键加固机制
TLS 1.3 协议本身不解决证书吊销验证延迟、中间人降级、重放攻击等问题,以下配置必须同步启用:
-
OCSP Stapling:减少握手延迟,防隐私泄露
ssl_stapling on;<br>ssl_stapling_verify on;<br>resolver 8.8.8.8 1.1.1.1 valid=300s;<br>resolver_timeout 5s;
-
HSTS 强制 HTTPS:防协议降级,提升浏览器信任
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; -
会话票据与曲线优化:支撑 0-RTT 并提升前向安全
ssl_session_tickets on;<br>ssl_session_timeout 1d;<br>ssl_ecdh_curve X25519:secp384r1;
验证是否真正生效
配置重载后,务必实测,不能只看语法无报错:
- 浏览器打开 DevTools → Security 标签页,查看连接协议是否显示 “TLS 1.3”
- 命令行测试:
openssl s_client -connect yourdomain.com:443 -tls1_3 2>/dev/null | grep Protocol - 用 SSL Labs(https://www.ssllabs.com/ssltest/)扫描,Protocol Support 一栏应明确列出 TLS 1.3
- 私钥权限必须为
600,SELinux/AppArmor 若拦截证书路径,可能导致 0-RTT 静默失效











