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 交互。