您的位置:首页 > 理论基础 > 计算机网络

如何抓取基于https协议的webservice数据包(webservice调试)

2011-04-16 15:26 246 查看
     最近在写一个客户端访问客户提供的webservice时,得到响应异常,于是想用工具抓取请求响应的soap数据查找异常原因,如果service是http发布的,用一般的http、tcp监控工具都可以抓到发送数据的原文,但是我请求的service是https发布的,使用一般的较底层的网络抓包工具抓到的都是经过加密的数据。搜索了很多相关文章最后找到了抓取解密后https明文的方法。

     我的前题是我使用java写的一段客户端代码请求一个基于https发布的webservice,我的客户端代码工具自动生成的基于JAX-WS的客户端代码。思路是这样的,我们需要找到一个基于proxy的http抓包工具并且他支持https抓包解码。然后在客户端代码中设置代理的ip和端口号然后发送请求就可以利用工具抓到解密后的原文。
我找了一些工具,像apache的tcpMon只能抓到加密过的数据。membrane-monitor感觉界面做的不错,但是貌似对https的代理支持不太完全,像smsniff这样的也是太底层,只能抓到密文。最后发现两个工具可以支持抓到解密后的数据,就是Fiddler2和paros两个都是开源的免费软件。Fiddler2是个不错的工具,安装后他会自动代理ie和firefox等浏览器请求,基本无需设置,默认代理端口是8888.要抓取https数据,需要设置https解密功能打开即可。具体可参考这篇文章在服务器上用Fiddler抓取HTTPS流量
,paros是个相当简单的软件,安装好后只要设置个代理地址和端口就可以了,默认就支持代理和解密https。设置好代理后,该如何使用客户端代码调用呢,首先在调用客户端的代码前我们需要在system property中设置如下代理的配置项:

System.setProperty("http.proxyHost", "localhost");

System.setProperty("http.proxyPort", "8888");

光这样代码执行还是会得到异常提示需要证书,客户端发送https请求是需要证书信息的,出于调试目的我们可以在客户端代码中设置忽略ssl认证,(这里我们提供一个证书到制定一个路径应该也是可以的,具体参考java net相关api)这样就可以正常发送请求了,请求成功后,可以看到fidder2中抓到了请求的数据。忽略ssl认证的代码如下:

// The following tells Java to ignore certificate problems
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
} };
try {
SSLContext context = SSLContext.getInstance("TLS");
context.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());
} catch (Exception e) {
}
// This tells Java to not worry about hostnames matching
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String string, SSLSession ssls) {
return true;
}
});


参考自文章Using a HTTP Proxy to Debug JAX-WS and SOAP Over HTTPS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息