![使用 Process Monitor 和/或 Fiddler 或其他工具记录应用程序的网络活动](https://linux22.com/image/541225/%E4%BD%BF%E7%94%A8%20Process%20Monitor%20%E5%92%8C%2F%E6%88%96%20Fiddler%20%E6%88%96%E5%85%B6%E4%BB%96%E5%B7%A5%E5%85%B7%E8%AE%B0%E5%BD%95%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%BD%91%E7%BB%9C%E6%B4%BB%E5%8A%A8.png)
我需要监控一个有点棘手的应用程序。它是一个 Java .jnlp 文件。使用 Process Monitor,我能够识别它(它的 javaw 实例)发送到我网络中的其他服务器;但是,运行 Fiddler 时,它没有显示任何活动。我确实知道流量是 HTTPS 加密的,并且它似乎连接到我的服务器正在运行 Web 服务器(tomcat)的端口。使用 Process Monitor,我可以看到数据的长度和方向(发送/接收),但它甚至不显示加密的内容。
我想知道,是否有任何方法可以中间人操作该程序来查看它从我的机器发送了什么数据?
更新
此 jnlp 与之通信的服务器软件是作为“包”安装的,我无法在此应用程序的目录中找到任何 SSL 证书文件。我使用过 Wireshark,但没有私钥,我无法解密流量。
使用运行某些代理(其他?)软件的 VM 网关解决方案似乎最容易实现,您将如何使用 Virtual Box 部署该解决方案?
答案1
Fidler 不是嗅探器——它是一个代理。除非您可以让有问题的应用程序使用代理,否则其流量都不会通过 Fiddler。
Microsoft Network Monitor 会显示加密流量,Wireshark 也是如此。Network Monitor 3.x 版本的优点是能够根据进程进行过滤(因为它们与操作系统“紧密耦合”)。
据我所知,Java 应用程序不使用操作系统的 SSL“堆栈”,因此嵌入 Windows SSL 堆栈的拦截实用程序也无济于事。
推测远程服务器没有运行容易在内部窥探的 SSL 堆栈(因为您说它们正在运行 Tomcat,而且不太可能使用 OS SSL 堆栈)。
我会在一个 VM 中运行有问题的程序,并使用基于 Linux 的 VM 作为其默认网关。然后,您可以使用一些 iptables NAT 规则将连接尝试重定向到 HTTPS 到 HTTP 代理,该代理又将请求转发到 HTTP 到 HTTPS 反向代理,最终转发到您的服务器。当流量处于代理和反向代理服务器之间的 HTTP 状态时,您将能够记录流量。这并不优雅(其他人可能会想到一种使用更少移动部件的更简洁的方法),但您可以使用现成的软件完成整个过程(我可能会使用几个 nginx 实例)。假设有问题的应用程序没有验证它是否确实在与您的服务器通信,但如果是,您只需从您的服务器导出 SSL 证书和私钥即可使欺骗“完成”。
假设你已经从你的服务器获得了 SSL 私钥,并且你没有配置你的服务器的 SSL 来执行基于 RSA 的密钥交换,那么你可以直接捕获流量并使用 Wireshark 解密。
答案2
在服务器上安装 wireshark
答案3
只要您提供私钥,Wireshark 就能够解密 SSL 流量。如果您转到“编辑”->“首选项”,然后从协议列表中选择 SSL,则有一个字段可以输入私钥文件的位置,以及应与其一起使用的 IP 和端口。如果您需要更多信息,Google 会为您提供大量演练。(例如:http://support.citrix.com/article/CTX116557)
当然,这假设您有权访问应用程序正在与之通信的服务器的私钥。但如果是这样,您应该能够轻松完成此操作。——
Christopher Karel