如何抓取基于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认证的代码如下:
参考自文章Using a HTTP Proxy to Debug JAX-WS and SOAP Over 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
。
相关文章推荐
- 如何利用fiddler手机抓包以及抓取HTTPS数据包
- Fiddler如何抓取HTTPS协议的网页
- Python调用基于https协议的WebService
- android如何利用基于Http 协议的WebService服务来获取远程数据库数据
- .Net平台如何基于wsdl文件搭建虚拟WebService服务器进行跨平台服务调试?
- 浏览器---Chrome前端开发必备插件,如何设置代理,react调试,定死https协议,sublime热更新,浏览器发请求post
- [笔记]如何通过Charles抓取https协议请求
- web页面调试,如何抓取请求回应的协议包?
- Python调用基于https协议的WebService
- Fiddler: 如何抓取HTTPS协议的网页
- Charles 如何抓取https数据包
- java编写webservice接口如何调试
- java如何调用https地址类型的webservice接口
- 如何自适应网页的协议(http/https/……)
- PHP如何抓取https内容?记录一下。
- 【网络协议】使用soket实现IP协议数据包抓取
- 手机如何抓取数据包和fiddler使用方法
- 一、基于HTTPS协议的12306抢票软件设计与实现--实现效果
- Charles抓取HTTP、HTTPS的数据包