Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何嗅探受SSL保护的Metro web服务和WCF客户端之间的通信?_Java_Web Services_Ssl_Fiddler_Packet Sniffers - Fatal编程技术网

Java 如何嗅探受SSL保护的Metro web服务和WCF客户端之间的通信?

Java 如何嗅探受SSL保护的Metro web服务和WCF客户端之间的通信?,java,web-services,ssl,fiddler,packet-sniffers,Java,Web Services,Ssl,Fiddler,Packet Sniffers,环境:NetBeans 7.0.1,GlassFish 3.1 我想嗅探WCF(.NET Framework 4)客户端和Metro(2.1.1)web服务之间的通信,然后检查消息以确保一切都是我想要的。web服务使用传输安全性(SSL)。我已经知道了,但是我没有成功地使用它;只有HTTPS浏览器流量可见。有没有办法设置Fiddler来捕获我的服务之间的流量?还有别的办法吗 更新 我尝试在不同的机器上启动客户机和服务器,然后使用Fiddler,但没有成功。我尝试Wireshark捕获流量,但在本

环境:NetBeans 7.0.1,GlassFish 3.1

我想嗅探WCF(.NET Framework 4)客户端和Metro(2.1.1)web服务之间的通信,然后检查消息以确保一切都是我想要的。web服务使用传输安全性(SSL)。我已经知道了,但是我没有成功地使用它;只有HTTPS浏览器流量可见。有没有办法设置Fiddler来捕获我的服务之间的流量?还有别的办法吗

更新

我尝试在不同的机器上启动客户机和服务器,然后使用Fiddler,但没有成功。我尝试Wireshark捕获流量,但在本地主机上运行这两个程序都没有成功。如果我在不同的机器上尝试它们,我所能看到的就是服务之间的TCP数据交换

在localhost+Wireshark上,接口旁边的数据包计数器保持不变,但是我多次调用该服务

更新2

尝试在选项中手动设置NetBeans的代理,但未成功:

System.setProperty("http.proxyHost", "localhost"); 
System.setProperty("http.proxyPort", "8888"); 
System.setProperty("https.proxyHost", "localhost"); 
System.setProperty("https.proxyPort", "8888"); 
尝试使用这些JVM选项启动GlassFish,但没有:(:

-Dhttp.proxyHost=localhost
-Dhttp.proxyPort=8888
-Dhttps.proxyHost=localhost
-Dhttps.proxyPort=8888

作为Fiddler的替代方案,如果您控制WCF客户端,您可以启用,并且它会将所有未加密的SOAP消息保存到跟踪日志中。日志记录可以在app.config文件中启用,因此您甚至不必重建应用来启用或禁用日志记录。

您可以设置metro来转储SOAP消息,info.personal首先,我用来观看soap交换。您可以使用“update2”中的系统属性配置java代理,效果非常好。

我经常使用commview来监控本地环回适配器上的流量。当您的客户端和服务都在同一台计算机上时,这是允许流量捕获的少数工具之一

您可以在下载一条线索,看看它是否适合您。

可能正是您所需要的。例如,有许多用于嗅探ssl流量的手册。

使用
它有一个代理。该代理可用于查看http流量。它还可以通过动态生成自签名证书来显示SSL流量。您需要将生成的证书导入jax ws客户端的java密钥存储中。确保已启用“支持非代理感知客户端的不可见代理”

我成功尝试过的一种方法是,确保使用SSLv2(与SSLv3相反),然后按照上所述使用,但更好。这是通过向Wireshark提供服务器SSL证书的私钥来实现的,以便它可以解密对话

为了在您的场景中强制使用SSLv2,在服务器端JVM上设置
-Dhttps.protocols=SSLv2Hello
似乎就足够了,但我用谷歌搜索了它(例如,请参阅上的“为什么我会得到javax.net.ssl.SSLException”问题,以及中的
https.protocols
部分。)我自己还没有完成这一部分,我似乎找不到关于这一点的清晰文档


(另外,在我的例子中,当我解密.NET到-.NET SSL流量时,我认为是切换回SSLv2使Wireshark可以读取流量。但是,这表明我同时从Diffie-Hellman密码切换到了非DH密码。)

是的,Fiddler也适用于服务。您是如何配置系统以使用Fiddler作为代理的,还是如何配置WCF客户端以使用它?@Ladislav Mrnka我只是通过信任Fiddler根证书来尝试。我没有设置任何其他内容。我需要在服务端使用Fiddler证书吗?在IE中将Fiddler配置为代理,并且应该ld将由客户端自动使用。@Ladislav Mrnka默认情况下,它在IE中配置为代理,并且在Fiddler中看不到与web服务相关的消息:(客户端和服务是否在同一台计算机上?谢谢!这可以工作,但是我只看到请求消息。我更希望看到整个exchange。我现在可以看到响应。已从配置中删除
maxSizeOfMessageToLog=“2000”
,因此它是默认的
Int32.MaxValue
<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>