Node.js基于PSK的TLS 1.3会话恢复可行性及实现流程咨询
解答
支持情况结论
Node.js 15.0.0及以上版本(底层依赖OpenSSL 1.1.1或更高版本)原生支持TLS 1.3规范定义的基于PSK的会话恢复能力。官方文档未覆盖该场景属于文档维护滞后,原有的Session ID、Session Ticket相关接口在TLS 1.3模式下会自动适配为PSK会话恢复逻辑,无需额外调整核心调用逻辑。
实现流程
服务端配置
- 运行环境需满足Node.js版本≥15.0.0,启动TLS服务时在配置项中指定
maxVersion: 'TLSv1.3'开启TLS 1.3支持 - 保留原有会话恢复的事件监听逻辑:监听
newSession事件持久化存储会话信息,监听resumeSession事件读取已存储的会话信息返回给底层模块,两个事件在TLS 1.3模式下会自动处理PSK身份的生成、校验全流程 - 可配置
ticketKeys参数自定义会话票据的加密密钥,用于加密生成PSK对应的身份标识
客户端适配
- 首次TLS 1.3握手完成后,调用
TLSSocket.getTicket()接口获取服务端下发的会话票据,该票据内部已包含PSK身份和对应的密钥派生参数 - 下次发起连接时,在
tls.connect的配置参数中传入session: 上一次获取的票据Buffer,底层会自动将该票据转换为TLS 1.3握手的PSK扩展字段发送给服务端完成会话恢复
验证与注意事项
- 可在服务端
secureConnection事件中调用TLSSocket.isSessionReused()接口验证恢复结果,返回值为true即代表PSK会话恢复成功 - TLS 1.3模式下的PSK会话恢复逻辑和带外PSK配置逻辑相互独立,不要混用
pskCallback相关接口,该接口仅适用于提前通过非握手渠道共享密钥的场景,和会话恢复场景下的动态PSK生成逻辑无关
内容的提问来源于stack exchange,提问作者andrew.carpenter
相关产品推荐
相关产品推荐

