【问题标题】:How to sniff communication between SSL protected Metro web service and WCF client?如何嗅探受 SSL 保护的 Metro Web 服务和 WCF 客户端之间的通信?
【发布时间】:2011-09-12 15:19:00
【问题描述】:

环境: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 上,接口旁边的数据包计数器保持不变,但我多次调用该服务。

更新2

尝试在选项中手动设置 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>

【问题讨论】:

  • 是的 Fiddler 也适用于服务。你是如何配置系统使用 Fiddler 作为代理或者你是如何配置 WCF 客户端来使用它的?
  • @Ladislav Mrnka 我刚刚通过信任 Fiddlers 根证书进行了尝试。我没有设置其他任何东西。我需要在服务端使用 Fiddlers 证书吗?
  • 在IE中配置Fiddler为代理,客户端自动使用。
  • @Ladislav Mrnka 在 IE 中默认配置为代理,在 Fiddler 中看不到 web 服务相关的消息 :(
  • 客户端和服务是否在同一台计算机上?

标签: java web-services ssl fiddler packet-sniffers


【解决方案1】:

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

【讨论】:

  • 谢谢!这可行,但是我只看到请求消息。我希望看到整个交流。
  • 我现在可以看到回复了。从配置中删除了maxSizeOfMessageToLog="2000",所以它是默认的Int32.MaxValue
【解决方案2】:

您可以设置 Metro 来转储 SOAP 消息,信息 here。就个人而言,我使用charles proxy 观看肥皂交换。您使用“update2”中的系统属性配置 java 代理,效果很好。

【讨论】:

    【解决方案3】:

    使用http://portswigger.net/burp/ 它有一个代理。代理可用于查看 http 流量。它还可以通过动态生成自签名证书来显示 SSL 流量。您需要将生成的证书导入到 jax-ws 客户端的 java 密钥库中。确保您已启用“支持不支持代理的客户端的隐形代理”

    【讨论】:

      【解决方案4】:

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

      您可以在http://www.tamos.com/products/commview/ 下载跟踪,看看它是否适合您。

      【讨论】:

        【解决方案5】:

        可能是WebScarab 是您所需要的。嗅探ssl流量的手册有很多,例如that

        【讨论】:

          【解决方案6】:

          我成功尝试过的一种方法是确保使用 SSLv2(而不是 SSLv3),然后按照the SSL page on the Wikishark Wiki 中的说明使用Wireshark,但在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 Guidehttps.protocols 上的部分。)我自己还没有完成这部分,并且我似乎找不到关于这一点的明确文档。

          (PS 在我的情况下,当我解密 .NET 到 .NET SSL 流量时,我认为是切换回 SSLv2 使得 Wireshark 可以读取流量。但是,this blog post 表明我正在切换同时从 Diffie-Hellman 密码到非 DH 密码。)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-04-11
            相关资源
            最近更新 更多