环境:NetBeans 7.0.1,GlassFish 3.1
我想嗅探WCF(.NET Framework 4)客户端和Metro(2.1.1)Web服务之间的通信,然后检查消息以确保一切都是我想要的。 Web服务使用传输安全性(SSL)。我已经知道Fiddler,但我没有成功使用它;仅显示HTTPS浏览器流量。有没有办法设置Fiddler来捕获我的服务之间的流量?还有其他办法吗?
更新
我尝试在不同的机器上启动客户端和服务器,然后使用Fiddler,但没有成功。我尝试使用Wireshark捕获流量,但是在localhost上都没有成功运行。如果我在不同的机器上尝试过,我只能看到服务之间的TCP数据交换。
在localhost + Wireshark上,接口旁边的数据包计数器保持不变,但我多次调用该服务。
UPDATE2
试图在选项中手动设置NetBeans代理,并以编程方式,但没有成功:
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "8888");
尝试使用这些JVM选项启动GlassFish,但没有:(:
<jvm-options>-Dhttp.proxyHost=localhost</jvm-options>
<jvm-options>-Dhttp.proxyPort=8888</jvm-options>
<jvm-options>-Dhttps.proxyHost=localhost</jvm-options>
<jvm-options>-Dhttps.proxyPort=8888</jvm-options>
答案 0 :(得分:1)
作为Fiddler的替代方案,如果您控制WCF客户端,则可以启用WCF Message Logging,它会将所有未加密的SOAP消息保存到跟踪日志中。可以在app.config文件中启用日志记录,因此您甚至不必重建应用程序以启用或禁用日志记录。
答案 1 :(得分:1)
您可以设置metro转储SOAP消息,信息here。就个人而言,我使用charles proxy来观看肥皂交换。使用“update2”中的系统属性配置java代理,效果很好。
答案 2 :(得分:1)
使用http://portswigger.net/burp/ 它有一个代理。代理可用于查看http流量。它还可以通过动态生成自签名证书来显示SSL流量。您需要将生成的证书导入jax-ws客户端的java密钥库。确保您已启用“支持非代理感知客户端的隐形代理”
答案 3 :(得分:0)
我经常使用commview来监控本地环回适配器上的流量。当您的客户端和服务位于同一台计算机上时,为数不多的允许流量捕获的工具之一。
您可以在http://www.tamos.com/products/commview/下载跟踪,看看它是否适合您。
答案 4 :(得分:0)
答案 5 :(得分:0)
我成功尝试过的一种方法是确保使用SSLv2(而不是SSLv3),然后按Wireshark所述使用the SSL page on the Wikishark Wiki,但更好地使用Citrix support page "How to decrypt SSL and TLS traffic using Wireshark " 。这是通过给Wireshark提供服务器SSL证书的私钥来实现的,这样它就可以解密对话。
要在您的方案中强制使用SSLv2,在服务器端JVM上设置-Dhttps.protocols=SSLv2Hello
似乎已足够了,但我一起搜索了它。 (例如,参见the Java 1.4.2 Troubleshooting page上的“为什么我得到javax.net.ssl.SSLException”问题,以及JavaTM Secure Socket Extension (JSSE) Reference Guide中https.protocols
上的部分。)我没有自己做了这个部分,我似乎无法找到关于这一点的明确文档。
(PS在我的情况下,当我解密.NET-to-.NET SSL流量时,我认为是切换回SSLv2,这使得Wireshark可以读取流量。但是,this blog post表明我同时从Diffie-Hellman密码切换到非DH密码。)