HTTP抓包流程
为了实现对安卓手机或模拟器的网络请求抓包,简单流程为:
- 电脑上安装Fiddler等抓包工具,其原理就是一个HTTP/HTTPS代理服务器。注意需要允许远程电脑连接
- 确保电脑和安卓手机在同一个子网中,互相能够PING通。比如:可以连接同一个WIFI热点,或者用电脑给手机开热点都可以
- 在手机的WLAN设置中,设置WIFI代理,指向电脑的IP和抓包工具的端口,比如:192.168.122.101:8888
- 这个时候,如一切正常,HTTP代理就已经可以工作了,可以在手机浏览器里访问HTTP站点,看看抓包工具中是否有反应。
HTTPS抓包原理
- HTTPS抓包就要麻烦一些了,要知道HTTPS的报文是加密的,主要防的就是在网络传输中间环节做手脚。
- 不过抓包工具可以用中间人方式(Man-In-The-Middle)方式来解析HTTPS报文,大概原理是对访问者假装自己是目标网站,对目标网站假装自己是访问者,
- 这需要访问者信任这个中间人签发的(伪造的)网站证书,具体做法是将抓包工具提供的根证书添加到系统的“受信任的根证书颁发机构”中去。
-
在电脑上比较简单,打开"Fiddler设置->HTTPS面板":
- 选中"Capture HTTPS CONNECTs", "Decrypt HTTPS traffic", "Ignore server certificate errors(unsafe)"
- 点击右面的Actions按钮,选择"Trust Root Certificate"即可
在Android中安装根证书
但是在安卓系统中就要自己动手安装根证书了,下面梳理一下整个过程:
前提
- Android 4.4及以上
- 手机已经root,则可以安装为系统证书,否则只能安装用户证书
区别在于:用户证书会要求手机必须有锁屏密码 - adb连接手机正常
安装为用户级别证书
- 把证书文件 .crt/.cer下载到内部存储,比如/sdcard
- 文件管理器打开文件,会自动打开证书管理应用,给证书起个名字即可导入,另外需要设定屏幕解锁密码
- 打开 设置 -> 安全和隐私 ->凭据存储 -> 用户 可以查看安装的证书
-
对于Fiddler有个更简便的办法:
- 打开手机浏览器,访问 http://ipv4.fiddler:8888/
- 打开的页面最下面的链接:You can download the Fiddler certificate,点击即可下载安装证书,步骤和从文件安装一致
安装为系统级别证书
把证书文件转换为Android可识别格式
- 确定文件名。我这里安装了两个不同工具的证书,即Fiddler和LittleProxy-MITM,它们的证书格式不同,因此使用的命令也略有不同。
openssl x509 -inform DER -subject_hash_old -in FiddlerRoot.cer
openssl x509 -inform PEM -subject_hash_old -in littleproxy-mitm.pem
把输出的第一行的8位hex字符串保存下来,比如269953fb,最终的证书文件名则为269953fb.0 - 转换证书文件格式
openssl x509 -inform DER -in FiddlerRoot.cer -text > 269953fb.0
openssl x509 -inform PEM -text -in littleproxy-mitm.pem > 4bb9877f.0 - 编辑输出的文件,把"-----BEGIN CERTIFICATE-----"到文件结束这部分移动到文件首部
安装证书
- 把证书文件复制到手机内部存储。adb push后第一个参数是证书文件在电脑上的路径,第二个是手机内部存储的路径
adb push path/to/269953fb.0 /sdcard -
从内部存储复制到系统证书目录。adb shell启动命令行交互,su获取超级用户权限,mount将/system目录重新挂载为可读写,最后执行复制
adb shell
su
mount -o remount,rw /system
cp /sdcard/269953fb.0 /system/etc/security/cacerts/ -
修改文件权限。
cd /system/etc/security/cacerts/
chmod 644 269953fb.0 -
用ls命令检查文件权限是否正确。下面一行是期望的输出。
ls -alZ
-rw-r--r-- root root u:object_r:system_file:s0 5ed36f99.0 - 重启设备
- 打开“设置->安全和隐私->凭据存储->系统”可以查看安装的证书。
验证
- 手机浏览器打开HTTPS站点,看抓包工具中是否可以正常解析HTTPS报文。
参考
- 详细过程:http://wiki.cacert.org/FAQ/Im...
- 不同扩展名的证书文件具体介绍及相互转换:https://blog.csdn.net/xianggu...
- openssl x509命令详解:https://www.openssl.org/docs/...