一、安卓7以上charles设置https抓包
二、错误提示:Not allowed - connection dropped
一、安卓7以上charles设置https抓包
使用抓包软件(以 Charles 为例)抓取APP的 https 请求时,Android和Charles都正确安装了证书却出现抓包失败,报错:
1 | Client SSL handshake failed: An unknown issue occurred processing the certificate (certificate_unknown) |
原因:Android7.0 之后默认不信任用户添加到系统的CA证书:
To provide a more consistent and more secure experience across the Android ecosystem, beginning with Android Nougat, compatible devices trust only the standardized system CAs maintained in AOSP.(文档链接)[https://android-developers.googleblog.com/2016/07/changes-to-trusted-certificate.html]
解决方案
一、官方解决方案(需修改代码)
官方文档:https://developer.android.google.cn/training/articles/security-config.html
详细演示:https://blog.csdn.net/mrxiagc/article/details/75329629
二、将抓包软件的证书安装成系统证书(需ROOT)
1.用Charles导出证书,随便命名 charles.pem
2.安装open ssl open ssl网址,然后配置环境变量,把openssl安装路径bin的路径(例如 C:\OpenSSL-Win64\bin)加入到操作系统的系统环境变量Path中
3.在cmd中输入
openssl x509 -subject_hash_old -in charles.pem
为刚才下载的证书(charles.pem),这个路径为绝对路径
后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1
4.然后将 charles.pem 这个文件改为 生成的数字加.0,例如:0505096d.0
5.然后在用前端根证书导入的方法导入证书
adb root
adb remount
adb push 0505096d.0 /etc/security/cacerts/
adb shell chmod 644 /etc/security/cacerts/0505096d.0
1 | 1.在charles软件Help菜单中SSL Proxying中保存root证书 |
如果remount或push失败,需要执行以下命令
adb disable-verity
adb reboot
6.以上方法一般可以抓到了,如果还是不行,需要配置 Proxy——SSL Proxying Settings——SSL Proxying,勾选Enable ——SSL Proxying,点击“add”,将Host和Port配置为*,如下图所示: