Appearance
Android 7 及以上安装 Ca 证书到系统级凭证目录
在 Android 7 以后,系统和 APP 不在信用用户级别的证书凭证,导致明明安装了 Charles、Fiddler 等中间人证书还是出现了无法正常抓包的情况。
准备工作
- 一台已经 root 的手机(本文使用的是 Pixel 5)
- Openssl 工具
- Charles (不限于其他工具)
证书生成
在 Charles 顶部工具栏依次选择 Help
-> SSL Proxying
> Save Charles Root Certificate
导出到指定目录,。
获取证书哈希值
使用 openssl
工具的 x509
指令获取 pme
证书的 hash 值
1. 证书转换(如果导出的是 .cer 格式需要执行此命令,如果已经是 .pme 则不执行)
$ openssl x509 -inform DER in charles.cer -out charles.pem
2. 获取 hash 值
# openssl 版本在 1.0 以上执行这行代码
$ openssl x509 -inform PEM -subject_hash_old -in charles.pem
# openssl 版本在 1.0 以下执行这行代码
$ openssl x509 -inform PEM -subject_hash -in charles.pem
使用 openssl version 可以查看当前 openssl 的版本
将证书复制后重命名
执行上述获取 hash 值的代码后,把输入内容往上滚动,则可以看到 900f8e2a
这样的一行内容,这个就是证书的 hash 值。
接下来对证书文件进行复制并重命名
$ cp charles.pem 900f8e2a.0
900f8e2a.0 中最后的 0 代表证书的版本,可以是其他1、2、3等,说白了就是为了防止文件名冲突。
将证书放置系统级目录中
Android 13 直接使用 MoveCertificate 模块。
以下先忽略。
先将证书从电脑中通过 adb push
命令推送到 /data/local/tmp
目录下,。
$ adb push 900f8e2a.0 /data/local/tmp
进入 /data/local/tmp
将 证书文件复制到系统级目录
$ cp 900f8e2a.0 /system/etc/security/cacerts/
不出意外的会给出以下错误
cp: /system/etc/security/cacerts//900f8e2a.0: Read-only file system