如何使用基于 OpenSSL 的客户端提取预主密钥?
How do I extract the pre-master secret using an OpenSSL-based client?
我正在制作一个使用 OpenSSL 1.0.2 的应用程序,我想使用 Wireshark 检查流量。 Wireshark 可以(据称)解密 TLS 对话,前提是你给它预主密钥。
如果我使用像 TLS_RSA_WITH_AES_256_CBC_SHA256
这样的密码套件;谁能告诉我如何从 SSL
或 SSL_CTX
结构中获取预主密钥?我可以破解 SSL
对象中的不透明结构——这不适用于产品中附带的任何东西;我只想知道如何为 Wireshark 填充预主密钥文件。
我推荐使用万能钥匙,它更容易获得。据我所知,pre-master 密钥仅临时存在于 OpenSSL 的堆栈中。主密钥在 ssl_session_st
中可用(在 1.0.2 分支的 ssl.h
中定义,但在更高版本中移至 ssl_locl.h
)。 SSL
成员变量 session
是指向它的 ssl_session_st
(又名 SSL_SESSION
)的指针。
Wireshark 可以使用主密钥以及 pre-master 密钥来解密连接。 Here are the formats 在撰写本文时 Wireshark 支持:
RSA xxxx yyyy
其中 xxxx
是加密的 pre-master 秘密 (hex-encoded) 的前 8 个字节
其中 yyyy
是明文 pre-master 秘密 (hex-encoded)
(这是错误 4349 引入的原始格式)
RSA Session-ID:xxxx Master-Key:yyyy
其中 xxxx
是 SSL session ID (hex-encoded)
其中 yyyy
是明文主密钥 (hex-encoded)
(添加支持 openssl s_client Master-Key 输出)
这有点用词不当,因为没有什么特定于 RSA 的
关于这个。
PMS_CLIENT_RANDOM xxxx yyyy
其中 xxxx
是来自 ClientHello (hex-encoded) 的 client_random
其中 yyyy
是明文 pre-master 秘密 (hex-encoded)
(此格式允许解密 SSL 连接,如果用户可以
捕获 PMS 但无法恢复特定 session 的 MS
使用 SSL 服务器。)
CLIENT_RANDOM xxxx yyyy
其中 xxxx
是来自 ClientHello (hex-encoded) 的 client_random
其中 yyyy
是明文主密钥 (hex-encoded)
(此格式允许 non-RSA SSL 连接被解密,即
ECDHE-RSA.)
请注意,pre-master 密钥和主密钥都不是对称密钥(您的问题标题暗示您可能认为是)。对称密钥源自主密钥和 client/server 随机数据。
我正在制作一个使用 OpenSSL 1.0.2 的应用程序,我想使用 Wireshark 检查流量。 Wireshark 可以(据称)解密 TLS 对话,前提是你给它预主密钥。
如果我使用像 TLS_RSA_WITH_AES_256_CBC_SHA256
这样的密码套件;谁能告诉我如何从 SSL
或 SSL_CTX
结构中获取预主密钥?我可以破解 SSL
对象中的不透明结构——这不适用于产品中附带的任何东西;我只想知道如何为 Wireshark 填充预主密钥文件。
我推荐使用万能钥匙,它更容易获得。据我所知,pre-master 密钥仅临时存在于 OpenSSL 的堆栈中。主密钥在 ssl_session_st
中可用(在 1.0.2 分支的 ssl.h
中定义,但在更高版本中移至 ssl_locl.h
)。 SSL
成员变量 session
是指向它的 ssl_session_st
(又名 SSL_SESSION
)的指针。
Wireshark 可以使用主密钥以及 pre-master 密钥来解密连接。 Here are the formats 在撰写本文时 Wireshark 支持:
RSA xxxx yyyy
其中xxxx
是加密的 pre-master 秘密 (hex-encoded) 的前 8 个字节 其中yyyy
是明文 pre-master 秘密 (hex-encoded) (这是错误 4349 引入的原始格式)RSA Session-ID:xxxx Master-Key:yyyy
其中xxxx
是 SSL session ID (hex-encoded) 其中yyyy
是明文主密钥 (hex-encoded) (添加支持 openssl s_client Master-Key 输出) 这有点用词不当,因为没有什么特定于 RSA 的 关于这个。PMS_CLIENT_RANDOM xxxx yyyy
其中xxxx
是来自 ClientHello (hex-encoded) 的 client_random 其中yyyy
是明文 pre-master 秘密 (hex-encoded) (此格式允许解密 SSL 连接,如果用户可以 捕获 PMS 但无法恢复特定 session 的 MS 使用 SSL 服务器。)CLIENT_RANDOM xxxx yyyy
其中xxxx
是来自 ClientHello (hex-encoded) 的 client_random 其中yyyy
是明文主密钥 (hex-encoded) (此格式允许 non-RSA SSL 连接被解密,即 ECDHE-RSA.)
请注意,pre-master 密钥和主密钥都不是对称密钥(您的问题标题暗示您可能认为是)。对称密钥源自主密钥和 client/server 随机数据。