Android 7.0以上版本HTTPS抓包解决方法
摘要:Android 7.0以上版本HTTPS抓包解决方法 Android 自 7.0 版本开始,系统不再信任用户 CA 证书(应用 targetSdkVersion >= 24 时生效,如果 targetSdkVersion < 2...
Android 7.0以上版本HTTPS抓包解决方法
Android 自 7.0 版本开始,系统不再信任用户 CA 证书(应用 targetSdkVersion >= 24 时生效,如果 targetSdkVersion < 24 即使系统是 7.0+ 依然会信任),也就是说即使安装了用户 CA 证书,应用的HTTPS包依然抓不了,会像下面这样,那么我们怎么绕过这种限制呢?
安装 CA 证书到系统目录
对于拥有root权限的设备,这是最佳的解决方案,如果把 CA 证书安装到系统 CA 证书目录下,那这个假 CA 证书就是真正的洗白了,不是真的也是真的了;
由于系统 CA 证书格式都是特殊的 .0
格式,我们必须将抓包工具内置的 CA 证书导出为这种格式,这里我们以Charles
为例;
安装OpenSSL
下载地址:http://slproweb.com/products/Win32OpenSSL.html
这里下载Win64位的OpenSSL轻量版即可,大小5M,EXE或MSI安装包皆可;
安装过程全部默认即可,这里不详细说明了;
我们需要在命令行中使用openssl命令,所以手动设置一下环境变量,将OpenSSL安装目录下的bin目录这个路径添加到PATH;
之后在CMD命令行中输入openssl
,出现如下这样表示安装成功了;
从Charles中导出CA证书
我这里以导出Base64格式的证书为例;
然后在命令行输入以下命令,D:\Charles.pem为导出的证书文件路径;
openssl x509 -inform PEM -subject_hash_old -in D:\Charles.pem
之后可以得到证书的哈希值b18d9bf1
,将原来的pem文件名修改为b18d9bf1.0
,然后拷贝到Android设备中,我这里以雷电模拟器为例;
直接拖拽将文件传到模拟器中;
使用Re管理器将文件拷贝至/system/etc/security/cacerts
目录下,并设置权限0644
,然后重启设备;
可以看到信任的系统凭据已经有Charles的证书了;
抓包测试
打开Charles简单设置一下;
手机设置代理到Charles,我这里就不演示了,我这里是使用的一款叫Proxifier
的软件直接将模拟器的流量重定向到抓包软件,目的都是一样;
然后用浏览器打开一个https站点测试了一下,没有报证书错误;
打开一个软件测试一下,也没有提示网络错误;