Fiddler拦截Https请求,差点搞死我

因为我们的做的APP跟支付行业有关,所有在整个通讯过程中是需要加密的,所以用了OKhttp3中的Https。我们都知道http协议1.0中一直是短连接的,到了Http1.1之后默认改为了长连接,如果想改为短连接只要将header中Connection设置为close即可。但是昨天老大跟我说我们的Https你看看Connection是不是close,抓个包看下。然后我立马想到了WireShak这个神器,抓出来的包一看简直要疯掉:

老大说这是什么玩意这是,你用Fiddler试一下。于是Fiddler开始探索

1. 下载Fiddler完全免费的一款软件

2. 配置 tool->option->配置connection,

3. 选择Allow remote compwser to connect

4. 接下来配置手机,查看你电脑的ip,window系统在dos窗口下输入ipconfig,要保证你的电脑和你的手机在同一个网段下,就是联同一个WiFi。然后长按你手机连接的网络,设置代理,如下图:

代理服务主机名填你电脑的ip,端口号是是8888,是Fiddler设置的。

这个是时候你就可以抓包了,但这个只是普通的http的包你可以抓到,如下:

5. 这个时候你可以抓取普通的HTtp了,但是如果你要搞一个Https的请求,分分钟让你怀疑人生,如图:

What? Connection 明明设置的是close,怎么就到这里变成长连接了?

6. 接着往下走,这个时候网上会有很多教程告诉你,要设置拦击Https,并在手机上下载证书:如下图: 你只要一步一步的点击确定走下去就行:

5. 手机上在浏览起立输入你的ip:端口号:如: 192.168.31.100:8888,就会出出现如下图所示:

  

6. 之后你在抓取数据包的时候,然后估计又要怀疑人生了,抓出来的用于跟没设置之前是一样的。这个时候我的内心是崩溃的,我靠什么玩意。 难道是我的OKhttp用的不对,在

 new Request.Builder().header("Connection", "close")

  各种怀疑OKHttp3用的不对,于是用研究各种https,做各种实验,最终觉得应该没有错,于是又各种百度各种Google,最后突然灵光一现,不对呀,既然这个是加密的,随随便便就给拦截了,好像也不行吧。 于是导出Fiddler的证书,然后用在我的项目里面,我靠终于对了。 

所以你要拦截自己APP的Https请求,先要导出Fiddler的证书:

导出之后,替换你APP里面的证书,这个时候在拦截如下: 12306拦截成功

最后终于发现代码是没错的。以后得长点心,多去思考一下。

原文地址:https://www.cnblogs.com/xlurenjia/p/7860579.html