我正在尝试使用Wireshark在数据包捕获中解码ssl数据包。当服务器在TLS握手期间选择的密码是TLS_RSA_WITH_AES_AES_256_CBC_SHA256时,我能够使用服务器密钥成功解码数据包。我只在编辑->首选项->协议-中提到服务器ip / port / protocol(http)/server.key > ssl。但是,当使用的密码是TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256时,它不起作用。我使用的是Wireshark版本2.0.2。还有其他解码方式吗?
你问题的答案是
否,因为有ECDHE_RSA。
现在让我们看看为什么会这样。让我们详细了解整个密码套件规范TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
密钥交换算法指定如何交换批量加密/解密密码的密钥。关于ECDHE_RSA中使用的Diffie-Hellman密钥交换,有一些特殊之处:
DHE_RSA提供了一个称为Perfect Forward Secrecy(完美转发保密)的名称,它具有以下属性的浮夸名称:如果你的服务器遭到了彻底的黑客攻击,则攻击者可以获得服务器私钥的副本,那么他也将能够解密过去的TLS会话(由他记录),如果这些会话使用RSA,而如果这些会话使用DHE_RSA,则他将无法执行此操作。
换句话说,使用(EC)DHE,即使你具有服务器的私钥,也无法从TLS密文对话中检索用于加密和解密的AES密钥。
当仅依靠RSA进行密钥交换时,情况有所不同:在此操作模式下,要使用的大容量密码由客户端生成,并使用服务器的公钥进行RSA加密并发送到服务器。如果窃听的第三方拥有服务器的私钥,则它可以简单地解密密钥交换的RSA密文,获取大密码并解密其他内容。这正是Wireshark为你解码TLS流时所做的事情。
因此,对于基于RSA的密钥交换有效的方法,对于基于DHE的密钥交换无效的方法。
从1.6(大约5年前)开始,Wireshark除了akRSA-using-serverkey之外,还可以使用从每个端点提取的每个会话的premaster或master机密来解密SSL / TLS。Firefox / NSS和Chrome可以使用SSLKEYLOGFILE执行此操作;其他程序有所不同,并且Q没有提及任何程序。请参阅security.stackexchange.com/questions/35639/…(但对于支持熊的兔子则为+1 :)
@ dave_thompson_085我作为服务器管理员的一个问题来研究现有的数据包捕获,试图找出问题出在哪里。但是,谢谢您带来了这个额外的方面。即使没有控制客户端,也没有推动服务器方导出主密钥的能力,对于新捕获的内容,他可能会修改其Web服务器基础结构并以中间人身份解密所有通信。