最近研究了一下利用Mac上如何利用fiddler抓取https协议数据,踩了很多地雷,所以想在此总结一下,希望其他小伙伴不要再踩我踩过的雷。
工作原理
Fiddler是用代理web服务器的形式工作的,代理端口是8888,代理端口可以在fiddler中设置。
一、mono的安装
1. mono作用:简单的说就是由于Fiddler是基于.Net技术开发的,没办法直接在Mac/Linux下使用,mono就是给Fiddler在Mac/Linux系统下提供.Net运行环境的。mono可以在这里下载。
2.安装步骤:
下载完成后在Terminal里执行以下命令
/Library/Frameworks/Mono.framework/Versions/<Mono Version>/bin/mozroots --import --sync
其中Mono Version是指mono的版本,现在是5.10.1版。此步是为了从Mozilla LXR上下载所有受信任的root证书,存于Mono的证书库里。root证书能用于请求https地址。
接下来把mono加入到环境变量中,编辑.bash_profile文件:
sudo vi ~/.bash_profile
加入文本:
export MONO_HOME=/Library/Frameworks/Mono.framework/Versions/5.0.1
export PATH=$PATH:$MONO_HOME/bin
保存后重新打开Terminal,Mono环境已装好。
二、Fiddler的安装
从Fiddler官网https://www.telerik.com/download/fiddler下载,打开Terminal,进入到刚才Fiddler的保存路径,执行命令运行:
sudo mono --arch=32 Fiddler.exe
在Mac上要指明--arch=32 ,猜测可能是Fiddler运行在32位机器上的程序,原因不是很确定,有清楚的朋友欢迎指正。
三、代理配置
打开Fiddler后依次选中tools->options->Connections按下图勾选选中:
iPhone手机中的代理设置:
1. 要想抓取手机端内容首先要让手机跟电脑链接到同一个网络中
2. 点击手机设置->Wi-Fi右侧的蓝色按钮进入http代理设置:
在http代理处选择手动模式,输入ip和端口。ip即pc的局域网地址,端口为:8888
四、https证书的配置
由于https的ssl/tls层使用了非对称的加密方式,利用公钥加密私钥解密,其中公钥放在证书中,所以Fiddler要监听https协议的网络请求需要配置证书。
1. Fiddler中相关设置:
在选择好后Fiddler会安装相关证书,点击OK按钮完成。
2. 在移动端证书的配置:
之前已经说过了,要抓取移动端数据,必须使手机和电脑连接到同一个网络,然后在Safari 打开http://<ip>:8888,点击 FiddlerRoot certificate,进行证书安装。其中IP就是电脑局域网IP
安装的证书需要认证,否则无法使用,ios设置证书认证:设置-->通用--->关于本—>证书信任设置 。找到刚才安装的证书点击信任。
3. 在mac电脑中配置证书:
打开Fiddler在Fiddler工具栏中依次点击Tools-->Options-->HTTPS-->Actions-->Export Root Certificate to Desktop导出证书到桌面上:
双击证书,会跳到钥匙串中,即可倒入证书到Mac电脑证书管理中:
双击钥匙串中倒入的证书设置信任证书及可以抓取浏览器中的https协议请求的数据:
好了,整个在Mac上利用fiddler爬取https协议请求数据的过程就讲完了,看了很多别人写的相关博客,借鉴了写的不错的,再此申明一下。