1. 项目概述:为什么需要手动植入证书?
在移动应用安全测试、逆向工程或者日常的抓包调试工作中,我们经常需要分析应用与服务器之间的网络通信。Fiddler、Charles这类抓包工具作为中间人(Man-in-the-Middle, MITM),正是实现这一目的的利器。它们的工作原理是,在你的设备和目标服务器之间建立一个代理,所有的网络请求都会先经过这个代理,从而被捕获和查看。
然而,现代操作系统(包括安卓)为了保障通信安全,强制要求HTTPS连接必须验证服务器的SSL/TLS证书。当Fiddler作为中间人时,它会动态地为每一个经过的HTTPS网站生成一个由它自己签发的证书。对于你的电脑浏览器来说,只要你安装了Fiddler的根证书(FiddlerRoot Certificate),它就会信任这个“伪造”的证书,抓包得以顺利进行。
问题就出在安卓系统上。默认情况下,安卓设备只信任系统内置的、由全球公认的证书颁发机构(CA)签发的证书。Fiddler自己生成的根证书并不在这个“白名单”里。因此,当你将安卓设备的代理指向Fiddler时,尝试访问HTTPS网站或使用HTTPS API的应用会弹出安全警告,甚至直接拒绝连接,导致抓包失败。
这就是“手动将Fiddler证书植入安卓系统信任区”的核心价值所在。它不是一个简单的“安装”,而是一个“植入”或“扎根”的过程。我们通过一系列操作,将Fiddler的根证书从“用户证书”区域(App可选择性信任)移动到“系统证书”区域(所有App强制信任),从而一劳永逸地解决HTTPS抓包时的证书信任问题。这对于测试那些使用了证书固定(Certificate Pinning)等高级安全策略的应用,或者需要在没有GUI的安卓模拟器/真机(如通过ADB)上配置环境时,尤其关键。整个过程涉及对安卓系统分区结构的理解、文件权限操作以及OpenSSL工具的使用,是安全测试工程师和逆向分析人员的必备技能。
2. 核心原理深度拆解:安卓的证书存储体系
要手动植入证书,首先必须理解安卓系统是如何管理信任证书的。安卓的证书存储体系分为两个清晰的层级,理解这一点是后续所有操作的理论基础。
2.1 用户证书与系统证书的鸿沟
在安卓系统中,证书根据其受信任的级别和存储位置,被严格区分为两类:
-
用户证书(User Certificates) :
- 存储路径 :
/data/misc/user/0/cacerts/(对于主用户,路径可能因系统版本略有不同,但理念一致)。 - 安装方式 :通常通过系统设置中的“安全”或“加密与凭据”菜单,选择“从存储设备安装”或类似选项。也可以通过ADB命令
adb shell settings put global verifier_verify_adb_installs 0后,使用adb install安装包含证书的.cer或.crt文件(不推荐且新系统已限制)。 - 信任范围 : 有限信任 。用户安装的证书默认 不被大多数应用信任 ,尤其是Android 7.0 (API 24) 之后。应用开发者可以通过应用的网络安全配置(Network Security Configuration)选择是否信任用户证书。对于抓包来说,这意味着很多应用,特别是银行、支付类App,会直接忽略用户证书,导致你的Fiddler证书形同虚设。
- 存储路径 :
-
系统证书(System Certificates) :
- 存储路径 :
/system/etc/security/cacerts/。 - 安装方式 : 无法通过常规用户界面安装 。必须通过具有系统分区(
/system)写入权限的方式,将证书文件直接放置到该目录下。这通常需要设备的Bootloader已解锁,并且已获取Root权限或使用已Root的系统镜像(如模拟器)。 - 信任范围 : 完全信任 。存放在此目录下的证书被操作系统内核和所有应用(除非应用使用了证书固定等额外手段)无条件信任。这是系统级别的“白名单”。
- 存储路径 :
因此,我们的目标非常明确:将Fiddler的根证书文件,从PC端导出,经过适当处理,最终放入安卓设备的 /system/etc/security/cacerts/ 目录中。
2.2 证书文件的命名与格式要求
直接复制文件进去是行不通的。 /system/etc/security


1万+

被折叠的 条评论
为什么被折叠?



