6

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

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

我应该注意,我已经考虑过简单地将日志记录添加到 Java 代码库中,但最终会更喜欢数据包捕获的基本事实而不是日志记录,因为我可能会错过/省略一些重要的代码库日志记录我不完全理解。

4

2 回答 2

6

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

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

您需要的是一个中间人代理,从您的应用程序的角度来看,它就像一个 SSL 服务器,从服务器的角度来看,它就像客户端一样工作。

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

于 2012-07-21T13:57:15.400 回答
2

您可以使用extract-ssl-secrets工具从任何 Java 应用程序中提取 Wireshark 所需的密钥。

如果开箱后无法正常工作,请参阅故障排除部分。

于 2016-12-13T19:01:25.033 回答