java - 解密由 Java HttpsURLConnection 生成的 Wireshark 中的客户端 SSL 流量

标签 java ssl wireshark httpsurlconnection

我正在尝试使用其他人编写的 GUI Java 程序,但它的行为与我预期的不同。在程序运行过程中,它联系服务器以拉取数据,但它没有显示正确的数据。我试图确定我遇到的问题是否与网络相关——即正确的位永远不会到达客户端。

查看 Java 程序的源代码,它似乎使用了 HttpsURLConnection。类通过 SSL 从服务器中提取数据。我希望能够做的是使用 Wireshark 检查线路上发生的情况。我的理解是,如果您有相关 key ,Wireshark 支持解密某些 SSL 流量。我不控制服务器,因此无法访问其私钥。但是,我确实控制了程序运行的客户端。我的问题是,在实践中我将如何配置 wireshark 来解密我刚才描述的场景的 SSL 流量?是否有可以添加到 Wireshark 的特定 key HttpsURLConnection 使用?还有别的吗?

我应该指出,我考虑过简单地将日志记录添加到 Java 代码库中,但最终更喜欢数据包捕获而不是日志记录的基本事实,因为我可能会错过/遗漏一些我不喜欢的代码库日志记录中的重要内容完全明白。

最佳答案

由于您无权访问服务器私钥,Wireshark 不能直接用于解密。

即使使用私钥 Wireshark 也无法解密流量,以防使用具有完美前向保密 (PFS) 的密码。

您需要的是一个中间人代理,从您的应用程序的角度来看,它的行为类似于 SSL 服务器,而从服务器的角度来看,它的工作方式类似于客户端。

有很多程序可以作为代理运行,例如 Fiddler在 .Net/Windows 上,WebscarabBurpSuite ( java )。对于所有这些程序,您需要导出它们使用过的服务器证书并将其作为受信任的证书添加到您的程序中,例如通过在启动应用程序的命令行上指定合适的信任库(请参阅 Java 属性 javax.net.ssl.trustStrore)。

关于java - 解密由 Java HttpsURLConnection 生成的 Wireshark 中的客户端 SSL 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11591940/

相关文章:

java - 使用reuseForks配置maven-surefire插件

ssl - 如何检测传入的 SSL (https) 握手(SSL 有线格式)?

python - 如何处理原始 Python 套接字中的 ssl 连接?

webrtc - 使用 Wireshark 或类似工具分析来自浏览器 webRTC 流的 RTP 数据包

ssl - 解密来自 PCAP 的 TLS 流量

递归方法的 Java 输出

java - 完成新手问题,textview句柄无法识别

java - AppCompatSpinner 的条目在第二次选择时不会打开 TimePickerDialog。请查看详情

ssl - 带有 Rails 4 的 ActiveAdmin 重定向到生产环境中的本地主机

Wireshark 显示多个本地连接