我想阅读 firefox 中的 java 应用程序通过 ssl 连接发送到网站的信息。
我正在使用 WireShark,我相信如果我能以某种方式告诉wireshark Firefox 正在使用什么加密密钥,那么wireshark 将能够解密ssl 消息。
然后,我将确切地知道该网站正在获取有关我的计算机的哪些信息。
如果问题含糊不清,我深表歉意......任何关于从哪里开始寻找线索的指示将不胜感激。
与编程无关。
但是,为了做到这一点,您需要您的应用程序连接到的站点的证书,包括公钥和私钥部分 - 因此,如果它不是您拥有的站点,那么您将无法做到这一点. 如果您控制接收网站,则只需按照wireshark wiki 上的说明进行操作。
假设您没有尝试以编程方式执行此操作,而是只想在调试时查看标头,您可以使用 Charles:
这里有很多关于如何设置它来解密 SSL 流量的信息:
http://www.charlesproxy.com/documentation/using-charles/ssl-proxying/
java 应用程序将使用服务器的公共 (SSL) 证书加密所有信息(至少就您而言)。出于所有实际目的,事后解密的唯一方法是知道您显然没有的服务器私钥,因此您无法解密它。
要回答您关于是否使用计算机私钥的评论:
如果这是一个“正常”的 SSL 连接,客户端(java 应用程序)将联系服务器并接收其公钥,验证它是否有效(由受信任的 CA 签名),然后使用它来协商用于加密的对称密钥.
公钥/私钥的工作方式是,由一个密钥加密的所有内容只能由另一个密钥解密 - 即 Java 应用程序使用服务器的公钥加密的所有内容,只能使用私钥解密 - 永远不会离开服务器。
SSL/TLS 支持客户端证书,其中 Java 应用程序可以拥有自己的密钥对并使用其私钥对内容进行签名,以验证自身的真实性。然而,即使 Java 应用程序这样做(值得怀疑)它也无济于事,因为数据仍将被加密,因此只有服务器可以解密它。
背景阅读:http ://en.wikipedia.org/wiki/Transport_Layer_Security和http://en.wikipedia.org/wiki/Public-key_cryptography