OpenSSL TLSv1.3服务端首张会话票据的作用及多票据发放原因是什么
为什么OpenSSL TLSv1.3服务端默认生成2张会话票据
TLSv1.3协议没有对单次握手发放的会话票据数量做强制限制,OpenSSL的双票据默认设置是工程实现上的权衡选择,相关逻辑确实在SSL_do_handshake调用流程内、TLSv1.3核心握手完成后触发:
- 核心目的是支持客户端并发连接的会话复用需求。如果服务端仅发放1张单次有效的票据,客户端同时发起多个并行连接时,第一张复用请求消耗掉票据后,剩余连接无法完成会话复用,只能走完整握手,会大幅提升握手时延。
- 2张是兼顾通用场景的最优默认值:发放更多票据会增加握手阶段的传输开销、服务端生成票据的计算开销,以及客户端的会话存储成本,大多数普通场景下2张足够覆盖常规的并发复用需求。你可以通过
SSL_CTX_set_num_tickets接口自行调整票据发放数量,最低可设置为1。
首张票据的作用是什么,为什么会观察到客户端仅使用第二张
你观察到的仅使用第二张的情况,仅出现在客户端单连接复用的场景中:
- 绝大多数客户端实现会按接收顺序存储所有收到的票据,单连接复用时默认优先使用最新的第二张,因此不会触发首张票据的使用。
- 首张票据的核心作用是满足并发复用场景:当客户端同时发起2个会话复用请求时,会分别调用两张票据完成复用,不需要重复走完整握手。
关于多票据对单次票据安全方案的影响
多票据机制本身和RFC8446定义的单次票据安全要求并不冲突:只要服务端实现每张票据独立生成、使用后立即作废,多票据反而能提升会话复用的成功率,不会引入额外安全风险。如果你认为多票据的语义不符合业务设计,直接调整配置为单张票据即可。
内容的提问来源于stack exchange,提问作者dialer
相关产品推荐
相关产品推荐

