TLS 1.3 简化了握手过程,减少了往返次数,但部署中仍会遇到证书链不完整、中间盒(middlebox)不兼容等问题。

一、TLS 1.3 握手要点
1. 完整握手只需 1 个往返(1-RTT),客户端在 ClientHello 中直接发送密钥共享;
2. 会话恢复可使用 0-RTT,但 0-RTT 数据存在重放风险,只适合幂等请求;
3. 移除了 RSA 密钥交换、静态 DH 等不具备前向保密的方式。

二、中间盒兼容
- 早期 TLS 1.3 草案部署时发现,部分防火墙、代理会丢弃不认识的握手消息;
- 因此正式版本采用“兼容模式”:握手看起来像 TLS 1.2 的会话恢复(包括 legacy_version 字段、ChangeCipherSpec 消息);
- 企业网络中的 TLS 检查设备需要支持 TLS 1.3,否则可能降级或连接失败。

三、证书链
- 服务器应发送完整的中间证书链(不需要发送根证书);
- 浏览器可能通过缓存或 AIA 获取缺失的中间证书,导致“浏览器正常、客户端程序失败”的现象;
- 检查命令:openssl s_client -connect example.com:443 -servername example.com -showcerts;
- 注意证书链顺序和过期的中间证书。

四、其他检查项
- SNI:多域名共享 IP 时,客户端必须发送 SNI;
- OCSP Stapling 配置;
- 密码套件和曲线的兼容性;
- 证书到期监控,自动续期。

讨论:你们升级 TLS 1.3 时遇到过兼容性问题吗?有没有遇到过中间证书缺失导致部分客户端失败的情况?