背景:
Android从7.0开始系统不在信任用户CA证书(应用targetSdkVersion >=24是生效,如果targetSdkVersion < 24 即使系统是7.0+依然会信任)也就是说即使安装了用户CA证书,在Android 7.0+的机器上,targetSdkVersion >=24的应用HTTS包就抓不到了。
比如上面的例子,抓包工具用内置的CA证书,创建了www.baidu.com域名的公钥证书发给Client,系统校验此证书时发现是用户CA证书签发的,那么我们将出现下图情况或者显示没有网络,请检查您的网络连接。
解决方案:(本人Android7.1.2亲测有效)
使用OpenSSL对FiddlerRoot.cer证书进行转换,然后放入手机系统证书目录内(/system/etc/security/cacerts------系统证书具体目录),并对其附加读写权限,以下为详细步骤。
环境准备:
1.抓包工具Fiddler
2.夜神模拟器----/温馨提示:如果你用的是真机那么必须要过root
3.OpenSSL-----/文章底部有windows安装配置步骤
4.AndroidSDK
操作步骤:
第一步:导出FiddlerRoot.cer证书
第二步:cmd命令行切到桌面
cd Desktop
第三步:使用OpenSSL将FiddlerRoot证书有cer格式转换成 pem格式
openssl x509 -inform DER -in FiddlerRoot.cer -out cacert.pem
第四步:计算pem证书hash值-截取下图中箭头指向的269953fb即可
openssl x509 -inform PEM -subject_hash_old -in cacert.pem
第五步:将桌面上的cacaert.pem证书 修改为 269953fb.0 #名称为上一步操作的hash值,后缀为0
第六步:将证书放入夜神模拟器系统证书目录
插一句--在操作前一定要保证手机or模拟器已经开启了root,若模拟器的话还要开启usb调试选项,需要在设置 - 关于平板电脑或关于手机 - 对着Android版本号的位置猛戳5下(开启开发者选项)- 返回进入开发者选项 - 打开USB调试按钮开关 ps:用力越猛效果越好。
6.1先将证书放入夜神模拟器用户证书目录一份(目录:主目录/Pictures/res/)
6.2将证书复制一份到系统证书目录(目录:根目录/etc/security/cacerts/)
第七步:查看adb连接状态(输入完命令可能会报错adb版本问题,不要慌查看我发得往期文章有介绍过解决方案)
adb devices
如果一切正常那么恭喜你,如果你是初次安装AndroidSDK可能就会出现下图的情况,他会先检查你的adb版本会出现协议异常,不用慌会自动复位。再次输入命令表示告诉你TCP已经握手成功可以建立连接关系接下来我们三次输入则返回了我们的可连接设备127.0.0.1:6200。
第八步:建立adb连接
adb conncet 127.0.0.1:62001
# 查看端口使用情况
netstat -ano | findstr "5037"
初次建立连接还是一样会有一些波动,我们可以查看我们对应的TCP握手端口是否有被多余占用,若没有我们继续尝试建立连接即可,若有则通过进程PID将其杀掉,保留我们自己TCP的端口独立使用。直到出现already connected to 127.0.0.1:62001表示连接成功。
第九步:赋予权限
到这里已经基本等于完成了,我们需要将我们添加到系统证书内.0赋予读写权限,
# adb进入模拟器shell命令行
adb -s 127.0.0.1:62001 shell
# 首先要给外层根目录中的system赋予权限
mount -o remount -rw /system
# 然后我们cd到系统证书目录
cd system/etc/security/cacerts
# 给我们的269953fb.0证书赋予权限
chmod 644 269953fb.0
9.1修改完成后---查看权限是否启用
ls -l
9.2最后我们需要在把最外层system的权限改回去
cd ../../../..
mount -o remount -ro system
第十步:打开Fiddler去抓包 --- 纵享丝滑
若本文对你有帮助请留下你的点赞!!! 感谢!!!
以下为OpenSSL安装:
去官网下载好以后傻瓜式安装一直下一步,然后部署环境变量即可。
部署完cmd命令行输入openssl显示以下页面表示安装成功