Charles证书安装到系统证书区步骤(适合红米Note8Pro)
1. 先导出 Charles 的证书(.pem
格式)
-
打开 Charles → 菜单
Help
→SSL Proxying
→Save Charles Root Certificate
-
保存出来的文件是
.crt
格式,比如charles-ssl-proxying-certificate.crt
-
把
.crt
文件改后缀 为.pem
(如果 Charles 没直接保存成 pem)- 有些版本直接是
.pem
,如果不是,自己改成.pem
,或者用 openssl转。
- 有些版本直接是
2. 转换为系统格式(必须是 DER编码)
Android 的系统证书要求是 .0
文件,格式有要求。
打开终端(电脑上有 openssl)执行:
bash
# 先转换成 der 格式
openssl x509 -inform PEM -outform DER -in charles-ssl-proxying-certificate.pem -out charles.der
# 然后计算哈希(重要!)
openssl x509 -inform DER -subject_hash_old -in charles.der | head -1
例如,输出是:
9a5ba575
这一步得到哈希值,比如这里是 9a5ba575
然后执行:
bash
# 把 der 格式的证书重命名为 哈希值.0
mv charles.der 9a5ba575.0
这样,你就得到了一个叫 9a5ba575.0
的文件。
如果报错问一下ChatGpt报错的原因 比如我就是
lua
PS C:\Users\Admin\Desktop> openssl x509 -inform DER -subject_hash_old -in charles.der unknown option -subject_hash_old usage: x509 args -inform arg - input format - default PEM (one of DER, NET or PEM) -outform arg - output format - default PEM (one of DER, NET or PEM) -keyform arg - private key format - default PEM -CAform arg - CA format - default PEM -CAkeyform arg - CA key format - default PEM
**你的 openssl 版本太新了,不支持
-subject_hash_old
参数 从 OpenSSL 3.x 开始(比如 OpenSSL 3.0/3.1),
-subject_hash_old
被移除了,只保留了-subject_hash
,
但是 Android 系统(尤其是 Android 7/8/9)要求用的是 "old hash",否则证书名字对不上。
你的当前操作建议
执行这条:
openssl x509 -inform DER -subject_hash -in charles.der
拿到输出的哈希值,比如:
a1b2c3d4
然后把 charles.der
改名成:
a1b2c3d4.0
继续 push 到 /system/etc/security/cacerts/
。
安卓11要安装到系统目录 修改 /system 权限
手动 remount /system 分区
理论上可以 adb shell 下试:
bash
adb shell
su
mount -o rw,remount /system
报错:PS E:\Goolge Download> adb shell begonia:/ $ su begonia:/ # mount -o rw,remount /system mount: '/system' not in /proc/mounts
ChatGPT 说:
好,很标准的错误提示:
bash
mount: '/system' not in /proc/mounts
意思是:
你的系统根本就没有把 /system
单独挂载出来,它其实是挂载在 /
(根目录)下面的。
这就是 Android 10/11 开始使用的 system-as-root 架构。
简单讲:
/system
不是一个独立挂载点了。- 真正挂载的是整个
/
根目录(/
包括了/system
这些子目录)。 - 所以你不能直接
mount -o rw,remount /system
。 - 你要 remount 的其实是 根目录
/
。
正确一点的操作方式
你要改成 remount /
根目录:(这里一次不行就多操作几次,我都是第二次输入命令行才行的!!!!)
mount -o rw,remount /
是的,你这一步已经成功 remount 根目录 /
为可写(rw)了!
注意看:
- 第一次
mount -o rw,remount /system
报错 ❌(正常) - 然后你改成
mount -o rw,remount /
- 没有任何错误提示 ✅
- 直接回到了命令行,这就代表:成功了!
🔥 现在你的系统是【临时可写】状态了!
什么意思?
- 现在 你可以操作
/system
下的文件,比如复制 Charles 证书。 - 但是重启手机后会失效,因为这个挂载是临时的(系统开机会重新挂成只读)。
所以:抓紧时间干你要干的事情,比如:
🔥 接下来干什么?( Charles证书安装流程 )
比如你要把 Charles 证书安装到系统证书,就这样做:
- 把 Charles 导出的证书文件(一般叫
charles.pem
或.crt
)转成正确格式。 - 生成对应的哈希名,比如
9a5ba575.0
这样的名字。 - 把文件推送到
/system/etc/security/cacerts/
目录。 - 修改证书文件权限,设成 644(
-rw-r--r--
)。 - 重启手机(让系统信任证书)。
adb推送证书到手机 /system
下
执行:
bash
adb push 9a5ba575.0 /sdcard/
adb shell
su
cp /sdcard/9a5ba575.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/9a5ba575.0
3. 最后,重启手机(我没有重启手机也可以了,所以因人而异吧)
执行:
reboot
或者手动重启。
重启后,系统就会信任 Charles 的证书,抓 HTTPS 流量就不会出现 "SSL Pinning" 错误了!