Android 14无法安装系统级证书:原Android 13可用方法失效求助
Android 14 下无法通过迁移证书到系统目录监控HTTPS请求的问题解决
确实有大量开发者遇到了这个问题,Android 14对系统证书的管理机制做了严格收紧,之前将用户级代理证书手动移动到/system/etc/security/cacerts/的方式已经不再生效。
问题原因
Android 14引入了系统证书存储的强验证机制,直接通过adb推送的证书会被系统判定为未经过官方授权的篡改内容,不会被加入系统信任列表,自然无法实现全量HTTPS请求监控。
可行解决办法
方法一:官方模拟器开启可写系统分区后安装证书
适用于使用Android官方模拟器的场景,步骤如下:
- 启动模拟器时添加可写系统参数:
emulator -avd 你的AVD名称 -writable-system - 切换adb到root权限并重新挂载系统分区:
adb root adb remount - 将代理证书按规则重命名为「证书哈希值.0」(和Android 13及之前的命名规则一致),推送至系统证书目录:
adb push 你的证书文件 /system/etc/security/cacerts/ - 设置证书文件的权限和归属:
adb shell chmod 644 /system/etc/security/cacerts/你的证书文件名 adb shell chown root:root /system/etc/security/cacerts/你的证书文件名 - 重启模拟器使配置生效:
adb reboot
方法二:修改应用网络安全配置(自有应用测试)
如果测试的是你们团队开发的应用,可以通过修改应用的网络安全配置,让应用信任用户级代理证书,无需修改系统分区:
- 在应用的
res/xml/目录下创建network_security_config.xml文件,内容如下:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config> - 在
AndroidManifest.xml的<application>标签中引用该配置:<application ... android:networkSecurityConfig="@xml/network_security_config"> ... </application>
重新打包安装应用后,代理工具就能捕获该应用的HTTPS请求了。
方法三:使用Frida hook证书验证逻辑(第三方应用测试)
如果测试的是无法修改代码的第三方应用,可以用Frida脚本绕过证书验证,强制让应用信任代理证书。核心逻辑是hook系统的证书验证方法,将用户级代理证书加入信任列表,示例脚本的核心片段大致如下:
Java.perform(function() { const TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl'); TrustManagerImpl.checkTrustedRecursive.implementation = function() { // 跳过证书验证或强制信任代理证书 return; }; });
具体脚本可以根据目标应用的Android版本和加密库做调整。
内容的提问来源于stack exchange,提问作者TheAutomationTester
相关产品推荐
相关产品推荐

