如何从浏览器SSL / TLS会话中导出主密钥?

时间:2013-02-21 22:16:14

标签: browser ssl encryption

我想在Windows中打开浏览器,转到HTTPS站点,并在使用Wireshark捕获数据包时执行一系列操作。然后我想使用加密数据包捕获来查看解密的HTTP流量。如果您放弃浏览器,访问服务器或添加MITM,我知道有很多方法可以执行此操作(如下所列),但当您仅限于上述方案时,这些方法都不起作用。以下是我的典型方法:

服务器:对于拥有服务器私钥的站点,请使用Wireshark的内置SSL解密。

MITM:SSL代理(例如,Burp套件)将允许查看解密的流量,但这需要使用与服务器使用的证书和密钥对不同的证书和密钥对。

浏览器:openssl的s_client可以连接,发出请求并导出主密钥,但这不显示关联的网页或运行javascript来计算后续请求参数。

有没有办法从“普通”浏览器导出主密码,以便我可以使用它来解密浏览器会话的数据包捕获?

例如,当浏览器关闭时,SSL / TLS状态是否存储在磁盘上?如果是这样,我将如何访问它?在浏览器运行时是否可以在内存中访问(如果是这样,我将如何找到它)?

或者,操作系统(Windows)存储的所有SSL状态数据是否都不能直接访问?

或者,有没有办法强制浏览器为特定的HTTPS连接使用特定的主密钥(以及任何其他关联的SSL状态数据,如会话ID等)?如果是这样,我可以使用s_client设置SSL会话,然后将密钥数据传输到浏览器并在同一会话中打开新连接。这将通过不同的方式实现相同的目标。

1 个答案:

答案 0 :(得分:9)

对于使用NSS库的浏览器(例如Firefox),您可以设置SSLKEYLOGFILE environment variable,这将导致NSS保存必要的机密。然后,您可以直接将该文件与Wireshark一起使用。可以找到更多信息here

相关问题