TLS 1.3:改变了什么,以及怎么验证
更新于 2026-11-03 · 6 分钟阅读
TLS 1.3 是十年来第一个靠「删功能」而不是「加功能」的协议版本。这正是它更快、也更不容易配错的原因——也是一台只会说 TLS 1.2 的服务器拿不到最高评级的原因。
相对 TLS 1.2 改了什么
TLS 1.3 把握手从两个往返砍到一个,会话恢复时为零。它移除了静态 RSA 和静态 Diffie-Hellman 密钥交换,因此前向保密从可选变成了强制。它彻底丢弃 CBC 模式套件、RC4、SHA-1 和压缩,并加密了握手中更多的部分——包括证书本身——让中间人看到的东西更少。
实际后果是:过去需要小心配置才能避开的绝大多数历史弱点,现在根本不可能发生。在 TLS 1.3 上你没法不小心协商出弱套件,因为协议只定义了搭配现代哈希的 AEAD 套件。
为什么它影响你的评级
无论其他项多好,CertH 都要求 TLS 1.3 才给 A+。一个证书完美、套件强、HSTS 到位的站点,缺了它就是 95 分、A。这一条是运营良好的站点卡在 A 的最常见原因。
另一个理由是握手本身。在高延迟的移动网络下,省下的一个往返意味着每条新连接省几十到几百毫秒——对体感速度是直接、可测量的影响。
怎么开启
在 nginx 上,TLS 1.3 的支持取决于二进制编译时链接的 OpenSSL 版本,需要 1.1.1 或更新。改任何配置之前,先用 nginx -V 看 built with OpenSSL 那一行。
在 Apache 上,只要 httpd 链接的是现代 OpenSSL,改 SSLProtocol 就够了。在 Cloudflare 上,TLS 1.3 是 SSL/TLS → Edge Certificates 下的区域级开关,2021 年起对多数区域默认开启。
# nginx: does this binary even support TLS 1.3?
nginx -V 2>&1 | tr ' ' '\n' | grep -i openssl
# negotiate TLS 1.3 explicitly and print the protocol
openssl s_client -connect example.com:443 -tls1_3 -servername example.com </dev/null 2>/dev/null | grep -E "Protocol|Cipher"
没人提的那些坑
0-RTT 会话恢复很快,但可被重放:抓到第一个 flight 的攻击者可以原样重发。绝不要在「首个请求就会改变状态」的端点上开 0-RTT,比如任何执行写操作的服务。
一些企业中间设备仍会在 TLS 1.3 上出错。同时保留 TLS 1.2 是标准的折中——兼容性还在,A+ 的要求也满足,因为评分看的是「有没有提供 TLS 1.3」,而不是「有没有关掉 TLS 1.2」。
最后,由 CDN 或负载均衡终止 TLS 会完全遮住源站。只改源站不改边缘,任何外部扫描器都看不到变化。
FAQ
开了 TLS 1.3 之后要关掉 TLS 1.2 吗?
不要。保留 TLS 1.2 可以兼容老客户端和中间设备,而且不扣分。关掉它只会减少回退选项。
TLS 1.3 会改变我的证书要求吗?
它让某些历史算法变得不可用。RSA 密钥的证书仍然没问题,但证书链必须使用协议允许的签名算法——比如 SHA-1 签名在 TLS 1.3 里就不能用。