Skip to content

getSSLSessionId 详解 ​

🆔 script.js 取 TLS session id,用于关联同一会话的包。

📎 源码在线查看:script.js#L254-L276(getSslSessionId)

做什么 ​

从 SSL 对象取 session id(32 字节随机),用于在 pcap/日志里标识同一次 TLS 握手建立的所有包。

实现 ​

javascript
// Native 路径
var SSL_get_session = new NativeFunction(
    Module.findExportByName(null, "SSL_get_session"),
    'pointer', ['pointer']
);
var session = SSL_get_session(this.ssl);
var SSL_SESSION_get_id = new NativeFunction(
    Module.findExportByName(null, "SSL_SESSION_get_id"),
    'pointer', ['pointer', 'pointer']
);
var lenPtr = Memory.alloc(4);
var idPtr = SSL_SESSION_get_id(session, lenPtr);
var len = lenPtr.readU32();
var id = idPtr.readByteArray(len);

用途 ​

  • 关联包:同一 session id 的 SSL_read/write 属于同一 TLS 会话
  • 识别重连:session id 变化说明重新握手(重连/会话恢复失败)
  • 会话恢复:旧 session id 复用 = session resumption

与五元组的关系 ​

维度区分会粒度
五元组(src/dst addr+port)一条 TCP 连接
session id一次 TLS 会话(可能跨多条 TCP,若 session resumption)

session id 比 TCP 五元组更"语义化"地标识一次 TLS 交互。

相关文档 ​

基于 VitePress 构建 · 教学用途