如何使用wireshark获取用于解密从我自己的浏览器发送和接收的HTTPS流量的私钥

信息安全 tls 线鲨
2021-09-08 20:09:31

我正在使用一个发送 API 请求的网站。我想编写一个客户端来自己发出请求,但为此我需要先查看请求有效负载。但是,连接是安全的,因此我无法像这样在 Wireshark 中看到数据。

我发现Wireshark支持SSL解密:http ://wiki.wireshark.org/SSL

但是,并没有说明应该如何获取或生成私钥文件,所以我四处寻找,发现了这个博客条目:http: //blog.stalkr.net/2010/03/codegate-decrypting-https- ssl-rsa-768.html

在找到如图所示的适当数据包后,我导出了证书,但与他们所做的挑战不同,为我建立的连接使用 RSA-2048 并且不提供分解(我假设真正的证书不提供,仅用于游戏等)。

我可以解密发送到第 3 方网站的 HTTPS 数据包吗?我将如何生成所需的密钥文件?

4个回答

Wireshark 是一个非常强大的工具。在大多数情况下,浏览器 firefox 和 chrome 的(无插件)调试控制台就足够了。两者都有足够的网络监视器。请注意,firefox 的监视器还不支持 websockets。

如果您仍想使用wireshark,请考虑使用该SSLKEYLOGFILE文件、更多帮助在thisthis以及您链接的wireshark wiki 页面。

私钥对网络服务器是私有的。如果您不控制网络服务器,您将无法获得它。该证书仅包含公钥,因此对您没有多大用处。您可以尝试设置代理 https 服务器并进行中间人攻击 - 在这种情况下,您将拥有代理服务器的密钥。

您是尝试从软件中破解协议还是通常使用浏览器访问该服务?

在第二种情况下,您可以通过配置 Firefox 将密钥记录到文件中来使用临时会话,正如 user10008 所建议的那样:SSLKEYLOGFILE在您链接的 wiki 页面中查找 user10008 发布的链接。

您不能,除非您对第 3 方 Web 服务器具有管理控制权,或者通过其他一些邪恶的方式检索证书。SSL/TLS 依赖于私有证书保持私有。

此外,即使您拥有服务器的私钥,如果使用了完美前向保密,您也可能无法解密来自早期会话的流量在这种情况下,您必须知道用于单个会话的特定私钥。

原则上,因为是客户,所以您知道 pre_master_secret,这是派生 master_secret 所需的。master_secret 是实际用于加密会话的对称密钥。正如@pqnet 所说,有一些方法可以在 FireFox 和 Chrome 中使用它,尽管它依赖于客户端软件,而且我不确定 Flash。但是,还有更简单的方法来检查您自己的 HTTPS 流量......

本地代理

既然是你自己的连接,你没有理由不能通过代理服务器传递网站。许多代理服务器被配置为允许 SSL 直通,这仍然为您提供端到端加密,但您可以通过终止代理服务器上的连接来打破这一点(如果您信任代理的 SSL 证书)。然后,代理将建立自己的 SSL 连接到第 3 方网站,传递您发送的任何流量。公司有时会使用相同的方法来检查用户的传出 HTTPS 流量(这是一个有争议的方法)。本质上,它是一个中间人。

Browser <---> Local Proxy <---> Website
          ^                 ^
        HTTPS             HTTPS

本地代理在您自己的机器上运行,并允许您检查甚至修改通过它们的流量。如果攻击者试图这样做,用户会看到一个浏览器警告,表明它没有收到所请求网站的有效证书。但是,您可以将您的机器设置为信任本地代理的 CA 证书。

使用 HTTPS 流量的两个流行的本地代理是:

Burp Suite 具有内置的 AMF 序列化支持Fiddler 看起来有一个扩展名

SSL 旨在防止您完全按照您正在尝试的方式进行操作。您需要密钥才能访问私人通信,无论是否使用 Wireshark。

几个答案暗示了中间人攻击,应该付出很多努力......但如果这是一个公共 API,它可能已记录在案。特别是,如果它是一个Web 服务API,您可以通过将端点URL 附加到?WSDL. 这将给出方法和返回类型的完整列表。