SSL_get_session 与 SSL_SESSION_get_id
🔑 取 SSL 会话 ID 的两个 Native 调用。
SSL_get_session
c
#include <openssl/ssl.h>
SSL_SESSION *SSL_get_session(const SSL *ssl);
// 返回 SSL_SESSION*,NULL 表示无会话从 SSL 对象拿会话对象 SSL_SESSION*。
SSL_SESSION_get_id
c
#include <openssl/ssl.h>
const unsigned char *SSL_SESSION_get_id(const SSL_SESSION *sess, unsigned int *len);
// 返回会话 ID 字节指针,len 写出长度r0capture 的用法
javascript
function getSslSessionId(ssl) {
var session = SSL_get_session(ssl); // SSL -> SSL_SESSION*
if (session == 0) return 0;
var len = Memory.alloc(4); // 给 &len 准备空间
var p = SSL_SESSION_get_id(session, len); // 拿 id 指针, len 写出
len = len.readU32(); // 读回长度
var session_id = "";
for (var i = 0; i < len; i++) {
session_id += ("0" + p.add(i).readU8().toString(16).toUpperCase()).slice(-2);
}
return session_id;
}调用链
用途
会话 ID 用于在 pcap 里把同一会话的多个包关联成一条 TCP 流。详见 getSslSessionId 与 TCP 序列号。
NativeFunction 包装
javascript
SSL_get_session = new NativeFunction(addresses["SSL_get_session"], "pointer", ["pointer"]);
SSL_SESSION_get_id = new NativeFunction(addresses["SSL_SESSION_get_id"], "pointer", ["pointer", "pointer"]);注意 SSL_SESSION_get_id 第二个参数是 pointer(&len),需 Memory.alloc(4) 准备。