哥们姐们,今天我来给大伙儿唠唠Fiddler这玩意儿怎么抓HTTPS包。说起来,这事儿我可没少折腾,以前每次碰到加密的网页或者APP,Fiddler就跟个瞎子一样,啥也看不到,急得我抓耳挠腮,那真是茶不思饭不想,晚上觉都睡不为啥?我那时候在公司里,负责一块儿线上业务,结果有天出点小问题,用户反馈说他们APP某个功能老是刷不出来东西。
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.icu
领导急了,把我叫过去,劈头盖脸就问我怎么回事。我心里发虚,这不是我负责的模块吗?我赶紧去后台看日志,翻了半天也没个头绪。看着那APP在用户手机上就是转圈圈,我琢磨着,这肯定得看看请求到底发出去没,数据有没有回来,回来的又是最直接的办法,就是抓包!
我当时就想,Fiddler不是挺好使的吗?那赶紧开起来。结果一开,傻眼了。HTTP的请求倒是密密麻麻地出来一堆,可那APP用的是HTTPS,加密的!Fiddler窗口里,一堆"Tunnel to"的字样,内容全是乱码,根本没法儿看。当时就懵了,这可咋整?领导还在后面催着,眼看这快到下班点了,问题还没解决,晚上加餐是妥妥的了。
第一次摸索:解密选项在哪儿?
我当时就急了,赶紧网上搜,各种百度谷歌轮番上阵。搜来搜去,总算看到有人说Fiddler能解密HTTPS。我一听,眼睛都亮了,赶紧照着帖子上的说法,开始在Fiddler里找。
我先是打开Fiddler这软件。
然后往上边菜单栏看,找到了那个“Tools”(工具)选项,点了一下。
“Tools”下面有个“Options”(选项),这个名字很关键,感觉很多设置都在这里面。
点了“Options”之后,会弹出来一个大框框,里边儿有好多页签,我挨个看了看,终于,发现了一个叫做“HTTPS”的页签,这个名字一看就对路子!
点进去一看,里边有个叫做“Decrypt HTTPS traffic”的选项,前面还有个小勾勾。旁边写着“解密HTTPS流量”。我一看这个,心里就明白了,原来是这儿!赶紧把这个勾勾给点上。
遇到大山:证书问题
可当我把这个勾一打上,Fiddler就跳出来一个提示,大致意思就是要信任Fiddler的根证书。我以前没搞过这个,心里有点犯嘀咕,这啥玩意儿?但为了能抓到包,我也顾不了那么多了,一咬牙,就点了“Yes”或者“Trust”。
点完之后,Fiddler又噼里啪弹出来好几个窗口,问我要不要把这个证书安装到系统里,问我信不信任它。我想了想,这Fiddler不就是个抓包工具嘛应该没啥大问题,为了解决问题,那就信任它呗!于是我就一路“是是是”、“确定确定”地按下去。
整个过程,Fiddler等于是自己给自己做了一个“身份证”,然后让我给这个“身份证”盖了个章,说它是个合法的。这样它就能假装成网站服务器,跟我的浏览器或者APP“聊天”,同时也能假装成我的浏览器或者APP,跟真正的服务器“聊天”。它这么一折腾,所有加密的数据就都得打它这儿过一道,它就能看到原始内容了。
手机上的折腾:曲线救国
搞定电脑上的,我又遇到了新问题。我这APP是在手机上跑的,电脑上Fiddler设置好了,手机咋办?手机又没装Fiddler,它咋知道Fiddler这个“中间商”的存在?
我又是一顿网上查,才知道原来手机也得设置代理!
我把手机和电脑连在一个WiFi下面,保证它们俩在一个局域网里。
然后打开电脑的命令行,输入
ipconfig(或者ifconfig在Mac/Linux上),找到我电脑的IP地址。记住,是局域网IP,不是外网IP。我拿出我的安卓手机(iPhone也差不多),跑到“设置”里找“WLAN”或者“WiFi”选项。
找到我现在连的这个WiFi,长按或者点旁边那个小箭头,进去以后有个“修改网络”或者“网络详情”之类的选项。
里面有个“代理”设置,默认是“无”,我把它改成“手动”。
然后“代理主机名”我就填我电脑那个IP地址。
“代理端口”Fiddler默认是8888,我就填8888。
保存一下,手机这边的代理就设置好了。
这还没完!手机也得信任Fiddler那个“身份证”!不然它一样不认。手机这边更麻烦一点。我先打开手机浏览器,在地址栏里输入*:8888/或者直接输我电脑IP加端口,然后就出来了一个Fiddler的页面,上面有个“FiddlerRoot certificate”的下载链接。
我点了那个链接把证书下载下来。下载完之后,手机会提示你安装证书。安装的时候,手机会让你设置一个证书名,随便起一个就行,比如“Fiddler证书”。
安卓手机一般安装完就没啥大问题了。苹果手机稍微有点特殊,安装完之后,还得额外跑去“设置”->“通用”->“关于本机”->“证书信任设置”里,把Fiddler那个证书手动打开,让它完全信任。
成功了!
搞完这些,我重新打开APP,再看看Fiddler,奇迹发生了!之前那些“Tunnel to”的记录,现在都变成了一条条清晰的HTTPS请求了!请求头、请求体、响应头、响应体,全都能看到了!那感觉,简直就像是从瞎子变成了千里眼,所有的东西都一览无余。
我赶紧定位问题,发现APP的请求发出去之后,服务器返回了个莫名其妙的错误码,原来是后端接口的问题,跟我前端没啥关系。我把抓到的包和错误信息截图发给领导和后端同事,问题很快就解决了。那天晚上,我终于不用加班了。
所以说,Fiddler这玩意儿,只要把HTTPS解密这块儿搞明白了,基本上抓包就没啥能难住你的了。整个过程下来,虽然有点折腾,但真的是值了!