如何从浏览器 SSL/TLS 会话中导出主密钥?
Posted
技术标签:
【中文标题】如何从浏览器 SSL/TLS 会话中导出主密钥?【英文标题】:How to export master secret from browser SSL/TLS session? 【发布时间】:2022-01-05 21:04:28 【问题描述】:我想在 Windows 中打开浏览器,访问 HTTPS 站点,并在使用 Wireshark 捕获数据包时执行一系列操作。然后我想使用加密的数据包捕获来查看解密的HTTP流量。如果您放弃浏览器、访问服务器或添加 MITM,我知道有很多方法可以做到这一点(如下所列),但是当您受限于上述场景时,这些方法都不起作用。以下是我的典型做法:
服务器:对于我拥有服务器私钥的站点,请使用 Wireshark 的内置 SSL 解密。
MITM:SSL 代理(例如 Burp 套件)将允许查看解密的流量,但这需要使用与服务器使用的证书和密钥对不同的证书和密钥对。
浏览器:openssl 的 s_client 可以连接、发出请求和导出主密钥,但这不会显示关联的网页或运行 javascript 来计算后续请求参数。
有没有办法从“普通”浏览器导出主密钥,以便我以后可以使用它来解密浏览器会话的数据包捕获?
例如,当浏览器关闭时,SSL/TLS 状态是否存储在磁盘上?如果是这样,我将如何访问它?浏览器运行时是否可以在内存中访问它(如果可以,我将如何找到它)?
或者,是否所有 SSL 状态数据都由操作系统 (Windows) 存储并且无法直接访问?
或者,有没有办法强制浏览器为特定的 HTTPS 连接使用特定的主密钥(以及任何其他相关的 SSL 状态数据,如会话 ID 等)?如果是这样,我可以使用 s_client 设置 SSL 会话,然后将密钥数据传输到浏览器并在同一会话中打开一个新连接。这将通过不同的方式实现相同的目标。
【问题讨论】:
【参考方案1】:对于使用 NSS 库的浏览器(例如 Firefox),您可以设置 SSLKEYLOGFILE
environment variable,这将导致 NSS 保存必要的机密。然后,您可以直接将该文件与 Wireshark 一起使用。有更多信息可以找到here。
【讨论】:
以上是关于如何从浏览器 SSL/TLS 会话中导出主密钥?的主要内容,如果未能解决你的问题,请参考以下文章
什么是 SSL ?https 是如何保证数据传输的安全(SSL 是怎么工作保证安全的)
OpenMediaVault 5 进阶配置 启用 SSL/TLS
SSL/TLS/WTLS原理(密钥协商的形象化比喻:用服务器的公钥协商加密格式,然后再加密具体的消息)good