如何使用 Charles 作为代理在 Wireshark 中解密 HTTPS 消息?

如何使用 Charles 作为代理在 Wireshark 中解密 HTTPS 消息?

我知道我可以直接在 Charles 中查看解密的 HTTPS 数据。但我想在 Wireshark 中查看较低级别的 SSL 消息。因此,我将 Charles 设置为 SSL 代理,使用我自己的证书,并在 Wireshark 中使用本地 IP 地址和我的私钥设置 SSL 解析器首选项。

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

但是,Wireshark 中的消息仍然是加密的。

在此处输入图片描述

我错过了什么?

答案1

我在使用 Charles Proxy 与 Wireshark 结合时遇到了完全相同的问题。

我认为问题在于 Charles 向客户端发送了两个(或更多)证书(检查代理发送到客户端的证书消息)。Wireshark 随后将使用该列表中的第一个证书,该证书可能与您生成的私钥不匹配。

(这正是用户戴夫·汤普森在评论中感到疑惑。)

我已经通过从 Wireshark 中提取证书来检查这一点。请注意,Wireshark 以以下格式提取证书.der。然后我将.der文件转换为.pem证书:

openssl x509 -inform DER -outform PEM -text -in wireshark_charles.der -out wireshark_charles.pem

我还将 转换.pem.crt,但这不是必需的。

Charles 向客户发送的证书

$ openssl x509 -noout -modulus -in wireshark_charles.crt | openssl md5

7a37a32781daf79402623c19ac9c8d7f

在 Charles 中设置自定义证书

$ openssl x509 -noout -modulus -in charles_custom.crt | openssl md5

62ea5ed061fca62efaaecbbb0226b08e

对应的私钥

$ openssl rsa -noout -modulus -in charles_custom.pem | openssl md5

62ea5ed061fca62efaaecbbb0226b08e

Charles 发送的证书的模数与自定义生成的私钥的模数不匹配。

Wireshark 也会在 SSL 解析过程中记录此问题:

ssl_decrypt_pre_master_secret wrong pre_master_secret length (128, expected 48)
ssl_generate_pre_master_secret: can't decrypt pre master secret

Charles 使用自定义证书作为根证书生成新的每主机证书。不幸的是,我还没有找到提取 Charles 生成的每主机私钥的方法。我建议使用 Burp Proxy。在 Burp 中,您可以选择要使用的证书类型。

相关内容