首页/安全/加密与证书速查/TLS 会话恢复机制
TLS 与 HTTPS60 条

TLS 会话恢复机制

通过 Session ID(服务端保存状态)或 Session Ticket(RFC 5077,客户端保存加密票据)跳过完整握手;TLS 1.3 统一为 PSK 恢复模式。

加密与证书速查安全更新于 2026-10-13

会话恢复是什么

会话恢复让客户端再次连接时跳过完整的密钥交换与证书验证,直接沿用一个已协商好的安全上下文。传统上有两种机制:Session ID 由服务端保存会话状态,Session Ticket(RFC 5077)把加密后的状态交给客户端自己持有。TLS 1.3 统一为 PSK 恢复模式,用服务端下发的票据配合早期导出密钥重建会话。

基本信息

Session ID服务端内存或共享缓存保存会话状态
Session Ticket状态加密后由客户端持有(RFC 5077)
TLS 1.3基于 PSK 与早期导出密钥
安全要求票据密钥需定期轮换,否则前向保密被削弱
兼容性不同客户端支持的机制可能不同
收益减少握手往返与 CPU 开销,降低首字节延迟

典型使用场景

  • 高并发站点降低握手开销:短连接场景下恢复能明显省下 CPU 与延迟
  • 多节点共享会话缓存:让客户端无论落到哪台机器都能成功恢复
  • 排查「时快时慢」:客户端命中不同节点导致恢复失败是常见原因
  • 安全加固评审:确认票据密钥轮换策略与前向保密的取舍

nginx 会话缓存配置

nginx 会话缓存配置
ssl_session_cache shared:SSL:10m;   # 共享内存缓存,10 MB 约存 4 万个会话
ssl_session_timeout 1d;             # 会话有效期,按业务特点调整
ssl_session_tickets off;            # 关闭票据,或开启后配合密钥轮换
# 验证恢复是否真的生效:观察两次握手中是否有 Reused
# echo | openssl s_client -connect example.com:443 -servername example.com -reconnect 2>&1 | grep -iE 'Reused|New'

两种机制对照

维度Session IDSession Ticket
状态存放服务端客户端
多节点要求需要共享缓存需要共享票据密钥
主要风险缓存被撑满或状态不同步票据密钥泄露可解密相关会话
前向保密相对较好依赖密钥轮换策略
会话恢复能明显降低握手开销,但票据密钥泄露会让攻击者解密相关会话,轮换策略要与保护等级匹配。
多节点布局很关键:票据模式要保证各节点使用同一份票据密钥并同步轮换,否则客户端在不同节点间跳转时会反复恢复失败。
恢复不等于无风险:TLS 1.3 的 PSK 恢复仍会校验票据完整性,但 0-RTT 早期数据可被重放,涉及写操作的请求不应接受 0-RTT。

易错点

  • 多台后端各自生成票据密钥时,客户端可能命中不同后端导致恢复失败(表现为随机变慢)
  • 把 ssl_session_tickets 关闭后,长连接池的收益会下降,需重新评估容量
  • 会话缓存过小导致频繁淘汰,恢复率上不去却仍占用内存
  • 票据密钥长期不轮换,前向保密在这一层被削弱
  • 用 0-RTT 承载写请求,会引入重放风险

数据来源与参考

  • RFC 5077(会话票据)
  • RFC 8446 §4.6.1(TLS 1.3 PSK 恢复)
  • nginx 官方文档 ssl_session_cache
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌