一、抓取app的https协议
1、fiddler工具配置
在Tools->Options切换到Tab页HTTPS,勾选下图中箭头指向的复选框,并确认是否缺少协议,若缺少默认的协议,则增加,如缺少;tls1.2,注意分号间隔。
切换到tab页Connections,勾选Allow remote computers to connect。
由于默认的证书不符合andriod和ios的证书要求,所以需要下载CertMaker插件,双击安装后,重启fiddler。注意这一步很重要,必须使用CertMaker插件,不要使用默认的证书生成器,否则抓不到包。
下载地址:https://www.telerik.com/fiddler/add-ons
2、手机设置代理
首先确保手机与PC在同一个局域网内,鼠标移动到fiddler右上角的Online上,可以查到PC的IP地址
IOS手机:设置->无线局域网->找到连接的无线网络,设置HTTP代理,服务器填写的要与Online中的IP地址一致,端口填写8888。
安卓手机:设置->WLAN->找到连接的无线网络-->代理选择"手动"->主机名填写的要与Online中的IP地址一致,端口填写8888。
设置完代理后,打开手机浏览器,地址输入:PC的IP地址:8888(如10.66.88.101:8888),点击最下边的FiddlerRoot certificate,确认安装。
IOS手机安装完证书后,在设置->通用->关于本机->证书信任设置,找到刚安装的证书,并打开,如下图。
设置完fiddler工具及手机端的IP代理、证书安装后,一般就可以抓取app端的https的请求数据
二、经过以上常规设置后,若还是无法捕获https协议
1、显示Tunnel to...443
可能原因是IOS的版本为10以上,安卓应用用的是的api 24 以上
IOS的解决方法:设置->常规->关于本机->证书信任设置,开启fiddler的证书(相当于同意全量监控,所以其他应用不要乱开 通), 再试试扑包,应该就可以显示了
安卓api 24以上的解决方法: 安卓没有提供系统层面上的设置,所以只能在应用上下功夫了,需要在应用代码配置中进行配置,相当于开发者留后门,否则只能root设备了,然后绕过证书验证了。严格意义上来说,安卓这是无解的,下面提供代码配置内容
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-config>
</network-security-config>
三、其他问题
fiddler捕获不了的情况分析:
1、fiddler并不是支持所有协议,目前已知的有http2、tcp、udp、websocket等,如果应用使用了以上协议,那么fiddler则无法捕获。fiddler无法捕获http2是因为fiddler是基于.net framework实现的,而.net framework不支持http2。
2、fiddler抓包的原理是中间人攻击,即两头瞒,欺骗客户端和服务器端,如果https证书写死在app里,也就是,app不信任fiddler颁发给它的证书,app只信任自己的证书,fiddler无法瞒客户端了,因此fiddler也就无法抓包了。如果
是自己开发的app,开发调试方便起见,可以使用类似wireshake工具导入服务器证书,抓包解密。
四、参考
fiddler抓包for ios :https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureForiOS
fiddler抓包for android :https://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureForAndroid
tunnel to 的完美解决:
常见异常解决方法:
关于android 7.0 无法进行https抓包的问题:
越努力越幸运