可行,但需Nginx≥1.13.0、OpenSSL≥1.1.1且编译启用TLSv1.3支持;生产环境推荐ssl_protocols TLSv1.2 TLSv1.3以兼顾兼容性,单配TLSv1.3会拒绝旧客户端。

直接配置 ssl_protocols TLSv1.3; 是可行的,但需满足前提条件,否则 Nginx 启动会失败或协议实际不生效。
确认运行环境支持 TLSv1.3
不是所有旧版本都支持。必须同时满足:
- Nginx ≥ 1.13.0(推荐 ≥ 1.14.1)
- OpenSSL ≥ 1.1.1(注意:1.1.1a–1.1.1t 或 3.0+ 均可,但 1.0.2 或 1.1.0 不行)
- 编译时启用了 TLSv1.3 支持(部分发行版预编译包默认开启;若自行编译,需加
--with-openssl-opt=enable-tls1_3)
验证命令:nginx -V 2>&1 | grep -i "openssl\|tls"
输出中应含 OpenSSL 1.1.1 或更高,且无报错。
在 server 块中正确配置 ssl\_protocols
仅写 ssl_protocols TLSv1.3; 表示严格只允许 TLSv1.3,这会拒绝所有 TLSv1.2 及更旧客户端(包括部分旧 Android、IE11、某些嵌入式设备)。生产环境通常不建议单开。
更稳妥的做法是启用 TLSv1.2 + TLSv1.3:
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:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;}
注意:
– ssl_ciphers 需匹配 TLSv1.3 密码套件(如 AEAD 类),旧套件(如 RC4、3DES)会被自动忽略;
– ssl_prefer_server_ciphers off 是 TLSv1.3 的推荐设置,因协商逻辑已重构。
配套加固建议(提升真实安全性)
单开 TLSv1.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; - 禁用不安全重定向方式:确保 HTTP → HTTPS 跳转使用
return 301,而非rewrite,避免中间人篡改
验证是否生效
部署后,用以下方式确认:
- 在线工具:https://www.ssllabs.com/ssltest/(查看协议支持栏是否显示 TLS 1.3)
- 本地测试:
openssl s_client -connect example.com:443 -tls1_3(成功返回 Server Hello 即表示服务端支持) - 浏览器开发者工具 → Security 标签页 → 查看“Connection”字段是否为
TLS 1.3
若只希望极少数现代客户端走 TLSv1.3,而保留最大兼容性,当前配置已足够。若面向内部系统或可控终端,可严格限定为 TLSv1.3,但务必提前测试全部访问链路。











