方法一:基于Fiddler2等第三方工具(需要在Java端禁用SSL安全检查)

原文拷贝自http://blog.csdn.net/zmxj/article/details/6327775,向原作者表示敬意

最近在写一个客户端访问客户提供的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;
}
});

另外可参考http://www.ioncannon.net/programming/1280/using-a-http-proxy-to-debug-jax-ws-and-soap-over-https/

方法二:查看Log4J的log

发送Https请求的Java类库都用到了Apache HttpServer。我们只要打开Log4j的相应开关,就可以在Java Console中看到Https发送和接收的报文。

具体方法为:将以下两个文件复制到$JAVA_MAVEN_PROJECT/src/main/resources文件夹下,然后正常执行程序就可以了(如果该项目已经定义有log4j.propertes或log4j.xml,需要将两个配置文件合并,具体参考Log4j文档)

log4j.xml(NND,XML源代码一上传新浪微博就丢失,只好发截图)

如何抓取基于https协议的webservice数据包的更多相关文章

  1. Fiddler基本原理与抓取Andriod与IOS的App数据包

    Fiddler基本原理 Fiddler数据包的原理是Fiddler将自己设置为一个代理服务器,默认监听127.0.0.1:8888端口同时将浏览器的HTTP.HTTPS协议设置为使用代理服务器也就是使 ...

  2. 使用wireshark 抓取 http https tcp ip 协议进行学习

    使用wireshark 抓取 http https tcp ip 协议进行学习 前言 本节使用wireshark工具抓包学习tcp ip http 协议 1. tcp 1.1 tcp三次握手在wire ...

  3. fiddler抓取手机https请求详解

    前言: Fiddler是在 windows下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析,fiddler默认只能抓取http请求,需要配置和 ...

  4. 使用CXF实现基于Soap协议的WebService

    本文介绍使用CXF实现基于Soap协议的WebService(CXF的版本是3.0.0) 一. 前言 Java有三种WebService规范:Jax-WS,Jax-RS,Jaxm 1. Jax-WS( ...

  5. LoadRunner系列之—-04 录制基于https协议的脚本

    实际性能测试过程中,有些需录制脚本的页面或接口是基于https协议的,按原来方法录制脚本,录完了脚本是空的.为解决这个问题,第一步了解https协议的具体实现,这块网上资料很多,可参考页面下方参考资料 ...

  6. 使用HttpClient携带pfx证书调用HTTPS协议的WebService

    调用第三方服务时,厂商提供了一个WSDL文件.调用的地址和一个后缀为pfx的证书文件,通过SOUPUI记载证书是可以正常调用WebService服务,那么如何将该服务转换为代码呢? 咨询了厂商的支持, ...

  7. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  8. Jmeter Web 性能测试入门 (二):Fiddler 抓取 http/https 请求

    jmeter自带了拦截request的功能,并且也有对应的tool:badboy 可以用.但由于我经常做移动端的项目,个人还是习惯用fiddler来收集request. 官网下载并安装Fiddler ...

  9. charles之抓取浏览器https请求

    用charles抓取浏览器https的包时,请求显示为unknown,且请求和响应数据乱码,本篇介绍如何抓取正常响应的https请求 目录 1.安装charles 2.安装证书.添加域名 3.抓包 1 ...

随机推荐

  1. 201621123079《Java程序设计》第1周学习总结

    第1周-Java基本概念 1.本周学习总结 第一次上课接触java,了解了java的由来和历史,还有JCP,JSP的概念,并学会如何建立一个java文件和运行过程.感觉java比之前学习的数据结构更高 ...

  2. 20Spring切面的优先级

    通过使用@order注解指定切面的优先级,值越小,优先级越高代码: package com.cn.spring.aop.impl; //加减乘除的接口类 public interface Arithm ...

  3. PHP:现有图片验证码类

    文章来源:http://www.cnblogs.com/hello-tl/p/7593022.html <?php class TL_Captcha_img{ private $image; / ...

  4. 杭电 2111 Saving HDU (贪心)

    Description 话说上回讲到海东集团面临内外交困,公司的元老也只剩下XHD夫妇二人了.显然,作为多年拼搏的商人,XHD不会坐以待毙的.   一天,当他正在苦思冥想解困良策的时候,突然想到了自己 ...

  5. 第七章习题G题

    题意 给出如图案例,要你从某一点开始走,一直走到极限(即无法再进行扩展),这时你走过的点会连成一个数,不同的走法当然会有不同的数,要求是输出最大的数(注意每个方块走过一次就不能再走) 思路 •1.枚举 ...

  6. Altium designer中生成gerbera文件

    在Altium designer中生成gerbera文件的方法有很多,不同版本,差异行不太大,正如下边链接地址里博主在10版本下的方法,在6.0版本长也是这样 http://blog.sina.com ...

  7. flash-热风焊盘的制作

    计算部分: 热风焊盘的内径(ID)等于钻孔直径+20mil, 外径(OD)等于Anti-pad的直径,通常是比焊盘的直径大20mil. 开口宽度等于(OD-ID)/2+10mil,保留整数位. 如果焊 ...

  8. 如何在matlab里安装libsvm包

    有时我们需要用到SVR(支持向量回归)方法,而 matlab 自带的svm工具箱不能做回归分析,于是有了安装libsvm包的打算. 中间遇到一些困难,比如找不到编译器等等,经过一下午和一晚上的努力,在 ...

  9. JQuery Easy UI 简介

    [什么是JQuery Easy UI?] jQuery EasyUI 是一组基于 jQuery 的 UI 插件集合,而 jQuery EasyUI 的目标就是帮助Web 开发者更轻松的打造出功能丰富并 ...

  10. 【Codeforces 1117C】Magic Ship

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 我们可以把这个行船的过程分解成两个过程 1.船经过时间t被风吹到了某个地方 2.船用这t时间尝试到达终点(x2,y2) 会发现如果时间t能最终 ...