首页/网络/协议速查/TLS 1.2 与 1.3 的关键差异

TLS 1.2 与 1.3 的关键差异

1.3 把握手压到 1-RTT(复连可 0-RTT)、砍掉 RSA 密钥传输与一堆弱算法、握手后全部加密,是默认该用的版本。

协议速查网络更新于 2026-10-13

两个版本的关键差异

较新的版本把握手压缩到一轮往返,会话复用甚至可以做到零往返;同时砍掉了老旧的密钥传输方式与一批弱算法,并把握手过程中的大部分内容也加密起来。老版本则需要两轮往返起步,允许的算法选择面更宽,证书与协商信息在链路上是可见的。结论很明确:新部署应当使用较新的版本,老版本只为兼容老旧客户端而保留。

基本信息

握手轮次新版本一轮往返,复用可零往返;老版本两轮起步
密钥交换新版本只保留前向保密的方案;老版本选择更多
算法表达新版本把算法组合拆分为独立的加密与哈希选择
弱算法新版本已从协议中移除;老版本需要手动禁用
协商可见性新版本握手后半段全部加密;老版本证书信息可见

逐项对比

对比项较新版本较旧版本
握手轮次一轮往返,复用可零往返两轮往返起步
密钥交换仅前向保密类方案多种方案并存
算法表达加密与哈希分开声明多种能力打包成组合
弱算法已移除仍允许,需手动关闭
证书可见性握手后半段加密证书等协商信息明文可见
重新协商已移除该机制支持,但存在历史风险

两个版本的实测对比

两个版本的实测对比
openssl s_client -connect example.com:443 -servername example.com -tls1_3 -brief   # 强制新版本
# 观察协议版本、加密套件与是否复用了会话
openssl s_client -connect example.com:443 -servername example.com -tls1_2 -brief   # 强制老版本
# 对比两次输出的握手轮次与套件差异,是判断兼容性的最快方式

迁移要点

  • 启用前先统计客户端版本分布,确认没有只能使用老版本的关键调用方
  • 服务端同时保留一个过渡版本,待老旧客户端升级后再关闭
  • 启用后监控握手失败率,按协议版本维度拆分观察
  • 内部服务之间可以更快切换,外部接口需要留更长的过渡期

排查要点

  • 握手失败先区分是协议版本不匹配、套件不兼容还是证书链问题
  • 用强制指定版本的方式复现,可以快速判断失败是否与版本相关
  • 抓包分析新版本时看不到证书信息属于正常现象,握手后半段已加密
零往返模式下客户端可以在首次飞行就发送数据,这部分数据可被重放。因此只有幂等的读取类请求才适合放入早期数据,涉及资金与状态变更的请求绝不能用它节省一次往返。

易错点

  • 直接关闭老版本而没有统计客户端版本分布,老旧调用方集体握手失败
  • 把零往返用于非幂等请求,请求被重放造成重复业务
  • 只看浏览器能否访问就认为迁移完成,命令行工具与老旧设备其实早已失败
  • 抓包看不到证书信息时误判为握手异常,实际是新版本把该阶段也加密了

数据来源与参考

  • RFC 8446 §1.2(1.3 设计目标)
  • RFC 5246

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌