从 Android 7.0(API 24)开始,安卓的安全机制发生了重要改变:App 默认只信任系统自带的根证书,不再信任用户手动安装的证书。
如果你只是把 Charles、Burp Suite 或 mitmproxy 的证书像安装普通文件一样装进手机,大部分 App 在发起 HTTPS 请求时依然会报错(提示网络无连接或 SSL 校验失败),因为它们认为你的抓包证书是“不安全”的。
为了绕过这个限制,必须利用 Root 权限,把我们的抓包证书伪装成系统自带的证书,强行塞进系统的核心目录里。
配置证书
1、安装Openssl
官方下载或使用winget安装
Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions
winget install -e --id ShiningLight.OpenSSL2、配置证书
安卓系统不认 mitm-server.crt 这种名字,它只通过证书特有的哈希值来识别。你用 OpenSSL 算出的 10fb1fcc 就是它的身份证号,必须重命名为 10fb1fcc.0。
PS C:\Users\Administrator> & "C:\Program Files\Git\usr\bin\openssl.exe" x509 -inform PEM -subject_hash_old -in .\mitm-server.crtCopy-Item .\mitm-server.crt "10fb1fcc.0"3、连接ADB
连接模拟器
让 ADB 工具连接到你电脑本地运行的 MuMu 模拟器。7555 是 MuMu 模拟器专属的本地通信端口。
PS C:\Users\Administrator\platform-tools> .\adb.exe connect 127.0.0.1:7555
connected to 127.0.0.1:7555获取最高系统权限
将 ADB 守护进程 (adbd) 以 Root(超级管理员)身份重启。因为你要修改的是安卓底层的 /system 目录,普通权限是无法写入的。
PS C:\Users\Administrator\platform-tools> .\adb.exe root
restarting adbd as root重新连接模拟器
PS C:\Users\Administrator\platform-tools> .\adb.exe connect 127.0.0.1:7555
already connected to 127.0.0.1:7555植入证书文件
将你电脑当前文件夹下的证书文件 10fb1fcc.0,直接“推”(上传)到安卓系统的系统级信任证书存放目录 /system/etc/security/cacerts/ 中。
PS C:\Users\Administrator\platform-tools> .\adb.exe push 10fb1fcc.0 /system/etc/security/cacerts
10fb1fcc.0: 1 file pushed, 0 skipped. 0.6 MB/s (1537 bytes in 0.002s)修改文件权限
通过 shell 调用安卓内部的 Linux 命令 chmod,修改刚刚放进去的证书文件的权限。
PS C:\Users\Administrator\s\platform-tools> .\adb.exe shell "chmod 644 /system/etc/security/cacerts/10fb1fcc.0"问题说明:在安卓严格的安全策略(SELinux)下,系统证书权限必须是 644(即 -rw-r--r--,只有 Root 才能修改,其他所有进程只能读取)。权限过高(如 664 或 777)会导致系统认为该文件存在安全风险,从而拒绝加载。