向 Wireshark UI 提供会话主密钥吗?

向 Wireshark UI 提供会话主密钥吗?

我正在处理 HTTPS 问题。我怀疑它与客户端证书有关。我想读取消息后面的一些加密握手消息ServerHelloDone。(一旦ServerHelloDone发送,流通常会切换为加密):

在此处输入图片描述

Wireshark 跟踪是通过以下方式生成的s_client

$ echo -e "GET / HTTP/1.1\nHost:example.net\n" | openssl s_client -connect example.net:443 -ssl3 -ign_eof -CAfile Equifax_Secure_Certificate_Authority.pem 
CONNECTED(00000003)
...
---
Certificate chain
 0 s:/C=ES/ST=Malaga/L=Malaga/O=Example, LLC/CN=www.example.net/OU=Example IT
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G2
 1 s:/C=US/O=GeoTrust Inc./CN=GeoTrust SSL CA - G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIExjCCA66gAwIBAgIQeee0uwSySeNXOkI+BUoMMzANBgkqhkiG9w0BAQUFADBE
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMU
...
doLsKI2R6RQA/7IcuTpKkvLF5wYKvmocPxYVg9FOoFvKV0wjWo6qlwsANPAVov+7
zFzZreROa7lBj8UH0IyYjLmBrbe1yMr/Cmg=
-----END CERTIFICATE-----
...
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : SSLv3
    Cipher    : RC4-SHA
    Session-ID: 663C000068D5E2DFCC69EE1FA40489927A80EFE118703BBAD28E1E81EDD02B15
    Session-ID-ctx: 
    Master-Key: ACB5F8C6302DE96555A680FBD37A83CBF81087368685A36B2B04E23A822E403CDF35FAACF959F55107AC4641AE1531DB
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1407443412
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
...
read R BLOCK
HTTP/1.1 301 Moved Permanently
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /Login/Login
Server: Microsoft-IIS/7.5
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Thu, 07 Aug 2014 20:29:46 GMT
Content-Length: 129

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Login/Login">here</a>.</h2>
</body></html>
^C

因为 Wireshark 跟踪是使用 生成的s_client,所以我拥有该会话的主密钥。我拥有主密钥,因为s_client已将其打印到终端。笔记:我不声称拥有有关服务器公钥或私钥的任何信息。我​​只声称拥有此会话的密钥。

我参观过安全套接字层 (SSL)在 Wireshark wiki 上,但它没有说明如何将主密钥插入 GUI。(他们确实讨论了如何使用它,但它与 GUI 无关)。

有没有办法将主密钥插入 Wireshark GUI 以便我可以读取加密流量?

答案1

假设你有一个包含私钥的文件,其中包含类似

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCsiEqJU4M76dlpmhb69DciXhLGkHX8mIoaQsCyy+Qx1rzSFp1L
WFrDBR4v9zyyO11F8eRdc+AZqbhlzEq+HV5qH9MYnKeKJZMUlMSvE675aZzx2DWY
rHdR1RyDpyxQvL8yKsAmoxY9WoesYU37gwk3al2C2lGL1MyxXT863ku0swIDAQAB
[...]
2xZo60YQkK6sKoxxDZFfnE6pYGiluSaYHmem42Sn7ZWarfMFgJGS92EZXGCBQIun
6Q5pB4pxj6iUMkT7joECQAzRrRCHpKtJmFoxEZ/xhGVUpUUulCor4Xe5Mo6mJdJw
ZjAAI3aJW4RWouEUPR1voTKHewFNUqXYE48zpElzpYM=
-----END RSA PRIVATE KEY-----

您需要打开 wireshark -> 编辑 -> 首选项....

在左栏中,找到“协议”下的“SSL”项。根据版本,语法可能会有所不同。假设是最新版本,在“RSA 密钥列表”下单击编辑...然后单击“新建”,填写字段,使用“http”作为协议(不是 https),并将密码留空。

注意:在某些情况下,您将无法解密:

  • 如果你没有捕获所有流量,那么从第一个数据包开始
  • 如果客户端重新使用了 SSL 会话(检查 client_hello 数据包中的“会话 ID”)
  • 如果 SSL 是使用前向保密进行协商的

我发现还有其他可能性:如果您同时拥有 Session-ID 和 Master-Key,您可以设置这样的文件(我从您的 openssl 输出中复制了数据):

RSA Session-ID:663C000068D5E2DFCC69EE1FA40489927A80EFE118703BBAD28E1E81EDD02B15 Master-Key:ACB5F8C6302DE96555A680FBD37A83CBF81087368685A36B2B04E23A822E403CDF35FAACF959F55107AC4641AE1531DB

并在 wireshark 上的 SSL 首选项下,将 (Pre)-Master-Secret 日志文件名指向它。

记得在文件中添加一个空行

相关内容