1. 项目概述:为什么安卓高版本HTTPS抓包成了“迷宫”?
如果你是一名移动端开发、测试或者安全研究员,最近几年在尝试对安卓应用进行HTTPS抓包时,大概率会碰一鼻子灰。明明在安卓7.0(API 24)之前,只要在手机上安装一个抓包工具(如Fiddler或Charles)的CA证书,就能轻松解密绝大多数应用的HTTPS流量。但到了安卓7.0及更高版本,你会发现很多应用,特别是银行、支付、社交类的主流App,它们的HTTPS请求在抓包工具里变成了一堆看不懂的乱码,或者直接显示“TLS握手失败”。这个现象背后,是安卓系统在安全机制上的一次重大升级,它像一道无形的墙,把传统的抓包方法挡在了外面,形成了一个让很多从业者头疼的“技术迷宫”。
简单来说,这个迷宫的核心在于“证书信任体系”的改变。在安卓7.0之前,系统信任用户安装的证书(即用户证书存储区)。你把Fiddler的CA证书装进去,系统就认,所有应用发出的HTTPS请求都会乖乖地交给这个“中间人”证书来解密。但从安卓7.0开始,谷歌引入了“网络安全配置”和更严格的证书固定机制。系统默认只信任系统预置的CA证书(系统证书存储区),而不再无条件信任用户安装的证书。这意味着,除非应用开发者主动在应用配置里声明“我信任用户证书”,否则你的抓包工具证书根本不会被认可,HTTPS流量自然无法解密。
更棘手的是,为了对抗中间人攻击,很多应用还额外启用了“证书固定”技术。这项技术可以理解为应用自带了一份“白名单”,只信任特定的几个或一个证书(比如它自己服务端的证书),完全无视系统里其他任何CA证书,包括那些合法的、系统预置的。这就好比你家门锁不仅换了,你还只认自己带的那把钥匙,物业给的万能钥匙也不好使了。因此,想要成功抓包,我们不仅需要让系统信任我们的抓包证书,还需要绕过或解除应用自身的证书固定。这整个过程,涉及系统权限、应用逆向、网络代理配置等多个层面的知识,步骤繁琐,任何一个环节出错都会导致失败,所以才有了“迷宫”一说。
2. 核心原理拆解:证书信任体系与证书固定
要走出迷宫,必须先看懂地图。这里我们需要深入理解两个核心安全机制:安卓的证书信任体系,以及应用层的证书固定技术。
2.1 安卓的证书信任体系演变
安卓系统的证书存储分为两个主要区域:系统证书存储区和用户证书存储区。
- 系统证书存储区 :存放着全球各大受信任的根证书颁发机构证书。这些证书在设备出厂时预置,或通过系统OTA更新。所有经由这些根证书签发的子证书(比如
*.google.com的证书)都会被系统默认信任。这个区域普通用户和应用无法修改。 - 用户证书存储区 :存放用户自己安装的证书,比如企业Wi-Fi的证书、抓包工具的CA证书等。在安卓6.0及之前,所有应用默认信任用户证书存储区里的证书。
关键的转折点发生在安卓7.0 。为了提高安全性,谷歌规定:以Android 7.0(API 24)为目标平台的应用,默认不再信任用户安装的CA证书。除非应用开发者在其应用的网络安全配置文件中明确添加 <trust-anchors> 标签,声明信任用户证书,否则应用只会信任系统证书。
这就解释了为什么老方法失效了。你安装的Fiddler/Charles证书属于“用户证书”,而高版本目标API的应用默认不认它。这就是第一道屏障。
2.2 证书固定的原理与实现
如果说系统默认不信任用户证书是第一道门,那么证书固定就是应用自己加的第二道锁,而且更坚固。
证书固定的本质是 应用在代码中硬编码或配置其只信任的特定证书的公钥哈希值 。当建立TLS连接时,应用会比对服务器返回的证书的公钥哈希值是否与自己“记住”的其中一个匹配。如果匹配,连接继续;如果不匹配,即使这个证书被系统根证书库信任(比如一个被恶意签发的证书),应用也会立即终止连接,防止中间人攻击。
常见的证书固定实现方式有两种:
- 网络安全配置文件 :在
res/xml/network_security_config.xml文件中配置<pin-set>。这是谷歌推荐的方式,相对容易分析和修改。 - 代码级固定 :在Java/Kotlin代码中,使用
OkHttp的CertificatePinner或自定义的X509TrustManager来实现。这种方式更隐蔽,对抗逆向的强度更高。
对于抓包者而言,证书固定意味着即使你成功将抓包工具的CA证书安装到系统区(绕过了第一道屏障),应用在握手时发现证书不是它“钦定”的那个,依然会拒绝连接,你在抓包工具里看到的可能就是 TLS handshake failure 。
因此,完整的抓包方案必须双管齐下: 首先,要让目标应用信任我们的抓包证书;其次,要找到并解除应用的证书固定逻辑。
3. 环境与工具准备:构建你的“探路杖”
工欲善其事,必先利其器。面对这个迷宫,我们需要一套组合工具。以下是我在多次实践中总结出的高效工具链,覆盖了从代理、证书处理到逆向分析的各个环节。
3.1 抓包代理工具选型
这是核心工具,负责拦截、解密和展示网络流量。
- Charles / Fiddler :老牌且强大的图形化抓包工具。功能全面,支持SSL代理、请求断点、修改重发、流量映射等。 Charles对JSON、XML等格式的展示和格式化更友好 ,是我首推的图形化工具。Fiddler在Windows平台集成度更高。
- mitmproxy :基于Python的命令行抓包工具。 灵活性极高,可通过脚本实现自动化 ,适合批量测试或集成到CI/CD流程中。它同时提供Web交互界面。对于喜欢折腾和需要定制功能的开发者,它是利器。
- Burp Suite :安全测试领域的“瑞士军刀”。除了抓包,更侧重于安全漏洞的主动和被动扫描。社区版功能有限,专业版非常强大但价格昂贵。 如果你主要进行安全审计,Burp是专业选择。
个人心得 :对于日常开发调试,Charles的易用性和稳定性是最佳平衡点。建议从Charles入手,熟悉后再根据需求探索mitmproxy或Burp。
3.2 安卓设备与系统要求
- 真机 vs 模拟器 : 强烈推荐使用真机 。许多模拟器(尤其是x86架构的)在网络栈、证书处理上可能


340

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



