MoveCertificate 证书迁移常见问题:从装不上到抓包成功的实战排查
【免费下载链接】MoveCertificate支持Android7-16移动证书,兼容magiskv20.4+/kernelsu/APatch, Support Android7-16, compatible with magiskv20.4+/kernelsu/APatch项目地址: https://gitcode.com/GitHub_Trending/mo/MoveCertificate
MoveCertificate 是一个 root 模块,把用户证书移动到系统信任库,兼容 Magisk v20.4+、KernelSU、APatch,支持 Android 7-16。本文覆盖从安装模块、放证书、格式转换,到 OTA 升级、模式切换、工具共存的整条链路。按"诊断漏斗"组织:先用定位表对号入座,再按安装、运行、维护、风控四个阶段逐条过,每个问题按"症状 → 原因 → 操作 → 验证"四步给答案。
🚦 快速定位表
| 你看到的现象 | 最可能的原因 | 跳到哪一节 |
|---|---|---|
| 模块装不上 / 管理器里没出现 | 没 root 或 root 方案版本过旧 | 模块装不上或列表里没有 |
| 装完重启了,代理仍提示证书不受信 | 用户证书目录是空的,证书没放对 | 装完没反应,代理仍提示不受信 |
| 文件在目录里,但系统不认 | PEM 文本格式直接推入,模块已过滤删除 | 证书文件在目录里却没生效 |
| 推完证书抓包页面还是打不开 | 文件名不是证书自身的 subject hash | 多个证书互相覆盖或哈希对不上 |
Android 14+ 在/system/etc/security/cacerts/找不到证书 | 14 起证书库迁到 conscrypt APEX,看错目录 | Android 14 及以上证书不加载 |
| OTA 大版本升级后证书"消失" | conscrypt 版本目录变化,旧挂载失效 | 模块更新或 OTA 后证书丢失 |
| 切换 builtin/compatible 模式后行为诡异 | 旧模式挂载残留未清理 | 切换 builtin 与 compatible 模式残留 |
| 用了 AdGuard 后链路异常 | AdGuard 中间 CA 与抓包链路冲突 | AdGuard 等代理工具冲突处理 |
🔧 阶段一:装不上 / 装完没反应
模块装不上或列表里没有
模块安装直接报错,或装完在管理器列表里找不到。先确认设备真的处于 root 状态,且 root 方案在支持范围内(Magisk v20.4+ / KernelSU / APatch,当前版本以 module.prop 标注的 release 为准)。
# 先验证 su 可用 adb shell su -c "id" # 返回 uid=0(root) 才算 root 成功验证:管理器里出现 MoveCertificate 且状态为启用,重启无异常。
装完没反应,代理仍提示不受信
模块显示启用、也重启了,App 里证书照样不受信。九成是/data/local/tmp/cert/里根本没有证书——模块只搬运这个目录,不会凭空产生。
adb push <你的证书文件> /data/local/tmp/cert/ adb reboot验证:adb shell ls /data/misc/user/0/cacerts-added/出现哈希命名的文件。
证书最终生效后,抓包工具里 HTTPS 内容可正常解密渲染,就是下面这个效果:
证书文件在目录里却没生效
文件确实在/data/local/tmp/cert/,重启后系统目录里没有。非 der 格式的文件会被模块过滤删除——文件头字节必须是0x30,PEM 文本一律不搬。
# 开机日志在模块目录下,过滤与挂载问题都写在这里 adb shell cat /data/adb/modules/MoveCertificate/install.log过滤逻辑源码见 sh/common.sh。验证:日志里出现is not a der certificate就是格式问题,直接跳到阶段二。
📦 阶段二:能跑但行为不对(格式与兼容)
文件移动成功但系统不认证书
目标目录里能看到文件,App 就是不信任。移动过去的是 PEM(base64 文本),Android 系统库只读 der 二进制,编码不对等于没装。
openssl x509 -inform PEM -subject_hash_old -in <你的证书文件> # 计算哈希;OpenSSL 1.1+ 用 subject_hash_old,老版本用 subject_hash openssl x509 -in <你的证书文件> -outform der -out cacert.der # 转 der mv cacert.der 02e06844.0 # 改成"哈希值.0",哈希以上一步实际输出为准 adb push 02e06844.0 /data/local/tmp/cert/ adb reboot验证:重启后adb shell ls /system/etc/security/cacerts/(Android 13 及以下)能看到该文件且权限 644。
多个证书互相覆盖或哈希对不上
推了两张证书只生效一张,或者文件名和证书对不上。文件名必须是证书自身的 subject hash,不是随便起的;同哈希多证书靠.0、.1、.2后缀共存。
# 第二张证书单独算哈希,别复用第一个名字 openssl x509 -inform PEM -subject_hash_old -in <第二张证书.pem> mv cacert2.der 7a3f2b1c.0 # 用实际算出的哈希替换 adb push 7a3f2b1c.0 /data/local/tmp/cert/ adb reboot验证:adb shell ls /data/local/tmp/cert/下每张证书后缀不冲突。
Android 14 及以上证书不加载
同样的操作在 13 以下正常,14+ 的/system/etc/security/cacerts/里就是没有文件。Android 14 起系统证书库挪到了 conscrypt APEX 里,模块也相应 bind 到/apex/com.android.conscrypt/cacerts/,是看错目录,不是没生效。
adb shell ls -l /apex/com.android.conscrypt/cacerts/ | grep 02e06844验证:哈希文件出现且权限 644 即成功;没有的话查install.log里mount bind相关行是否报 status 失败。
🔄 阶段三:更新、模式切换与工具共存
模块更新或 OTA 后证书丢失
升级后系统不信任了,用户目录也空了。OTA 大版本升级会换 conscrypt 版本目录,模块内旧挂载目录随之失效;换模块版本同理。修复记录见 changelog.md。
# 重新放置证书并重启,模块会把系统原有证书先备份再合并 adb push <你的证书文件> /data/local/tmp/cert/ adb reboot验证:重启后 apex 目录(14+)或/system/etc/security/cacerts/(≤13)里重新出现你的哈希文件。
切换 builtin 与 compatible 模式残留
两种挂载模式来回切之后,旧证书还生效或新证书不生效。builtin 模式会把证书写进模块内挂载目录,切回 compatible 时残留不清就会"幽灵生效"。模块新版启动时会主动清理,但老版本要手动确认。
adb shell cat /data/adb/modules/MoveCertificate/mode.conf # 查看当前模式 adb shell su -c "sed -i 's/mode=builtin/mode=compatible/' /data/adb/modules/MoveCertificate/mode.conf" adb reboot验证:install.log出现cleaned builtin mode leftovers表示残留已清。
AdGuard 等代理工具冲突处理
同时装了 AdGuard 后代理链路异常、部分 HTTPS 失败。AdGuard 的中间 CA 与本模块的抓包链路不兼容,模块在启动时按哈希47ec1af8主动跳过它,这是设计行为不是故障。
# 让模块在开机时自动清理冲突的中间证书,不要手动把 AdGuard 中间证书塞进 cert 目录 adb reboot adb shell ls /data/local/tmp/cert/ # 不应再出现 47ec1af8.* 文件验证:47ec1af8.*不在列表里,抓包链路恢复。
🛡️ 阶段四:安全红线与长期维护习惯
只安装可信来源的证书
一张系统证书意味着全部 App 都无条件信任它的签发者,装了恶意 CA 等于全网流量可被窃听。这不是排错项,是红线:装之前先核对指纹。
openssl x509 -inform PEM -noout -fingerprint -sha256 -in <你的证书文件>验证:SHA256 指纹与该抓包工具官方公布值一致才允许推入设备。
定期清理与干净卸载
半年前调试用的证书还挂在系统信任库里,风险只增不减。用户目录里的文件模块照单全搬,不会替你淘汰旧的;模块自带的 web 页面支持长按删除已装证书,命令行则删文件后重启。
adb shell rm /data/local/tmp/cert/<不再需要的证书> adb reboot卸载模块时的清理行为见 uninstall.sh,官方完整用法见 README.md。验证:重启后系统证书目录里对应哈希文件消失。
✅ 如果只记三件事
- 重启是必选项——证书只在开机时搬运,装完不重启等于没装。
- der 格式 + 自身哈希命名——格式不对模块会直接删掉,文件名不对系统不认。
- 先看
install.log——格式过滤、挂载失败、模式残留全部写在模块目录的日志里,比盲猜快得多。
如果以上都没覆盖你的情况,把install.log内容附在 issue 里发到项目仓库或社区,带上 Android 版本和 root 方案,定位会快很多。
【免费下载链接】MoveCertificate支持Android7-16移动证书,兼容magiskv20.4+/kernelsu/APatch, Support Android7-16, compatible with magiskv20.4+/kernelsu/APatch项目地址: https://gitcode.com/GitHub_Trending/mo/MoveCertificate
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考