You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过openssl s_client非交互式获取TLS1.3握手后新会话票据并存为PEM文件

TLS 1.3 环境下通过 openssl s_client 自动导出会话票据的问题

基础目标与初始问题

  • 正在搭建自动化TLS握手处理流程,计划通过以下 openssl 命令,将目标域名的TLS会话信息保存为pem格式文件:
    openssl s_client -connect www.domain.com:443 -sess_out domain.pem
  • 初始执行时遇到的问题:TLS连接建立完成后,进程会持续挂起等待用户输入(例如手动输入HTTP GET请求触发后续传输),无法自动退出完成当前域名的处理。
  • 明确的核心需求:
    • 跳过交互等待环节,在接收到完整会话信息后立即关闭连接,顺畅切换到下一个域名的处理流程
    • 保证获取到的会话信息完整,可用于后续TLS会话复用

已验证的TLS 1.2 场景实现方案

TLS 1.2的会话协商流程包含在标准TLS握手阶段内,不需要额外触发事件即可完成会话信息传递。对应的可执行命令为通过管道传入空值触发EOF,让进程在握手完成后自动退出:
echo -n | openssl s_client -connect www.domaintls1-2.com:443 -sess_out ticket1-2.pem

TLS 1.3 场景下的核心故障

TLS 1.3的协议机制和1.2存在关键差异:New Session Ticket(新会话票据)是在标准握手完成后,才由服务端主动发送的。客户端需要主动发起一次传输(哪怕是GET、HEAD甚至无效的HTTP请求),触发服务端发送握手后的New Session Ticket报文,才能拿到完整的会话票据并写入pem文件。
手动操作的场景下流程完全可行,但目前尝试的所有管道输入方案都无法正常获取会话票据,已经试过的命令包括:

  • echo "GET" | openssl ...
  • openssl ... <<< GET
  • openssl s_client -connect www.domaintls1-3.com:443 -sess_out test1_3.pem < /dev/null
    故障原因推测为:握手完成后,openssl s_client 检测到输入管道的EOF就直接关闭连接,没有预留等待时间接收服务端后续发送的握手后会话票据,导致pem文件中没有写入完整的会话信息。

核心问题聚焦于TLS 1.3握手后(post-handshake)阶段的新会话票据自动捕获,而非标准握手流程内的基础连接调试。
当前运行环境:Ubuntu 20.01
当前OpenSSL版本:1.1.1f 31 Mar 2020


内容的提问来源于stack exchange,提问作者jess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 08:06:01