6、HTTPS抓包原理:中间人攻击原理、证书伪造、SSL剥离攻击
说实话,很多做Android开发的朋友一听到「HTTPS抓包」就觉得头大。总觉得这玩意儿太底层,跟自己没关系。但我在实际项目里踩过太多坑了——有一次线上支付接口突然报证书错误,排查了整整两天,最后发现是第三方SDK偷偷把证书绑定给改了。嗯,从那以后我就把HTTPS抓包原理当成了必修课。
今天咱们就来聊聊,HTTPS抓包到底是怎么一回事。说白了,就是中间人攻击(MITM)的实战应用。你想想看,HTTPS本身是安全的,那抓包工具凭什么能解密你的流量?答案很简单——它在你和服务器之间,扮演了一个「中间人」的角色。
中间人攻击原理
中间人攻击,英文叫Man-in-the-Middle Attack,简称MITM。我习惯叫它「二五仔攻击」——表面上两边都跟你握手,实际上两边都在骗你。
正常的HTTPS通信流程是这样的:
- 客户端向服务器发起TLS握手
- 服务器返回数字证书
- 客户端验证证书合法性
- 协商对称密钥,建立加密通道
但中间人攻击介入后,流程就变了味:
- 客户端向服务器发起连接,但被中间人截获
- 中间人伪装成服务器,向客户端返回自己的伪造证书
- 客户端(如果没有严格验证)接受了伪造证书
- 中间人同时与真实服务器建立合法连接
- 所有数据都经过中间人转发,明文可见
核心要点:中间人攻击成功的关键,在于客户端是否严格验证了服务器证书。如果客户端「信任」了中间人的伪造证书,那整个加密通道就形同虚设。
我在一次安全审计中遇到过这样的情况:某个金融App的登录接口,居然没有做证书校验。我用Fiddler一抓,用户名密码直接明文显示在请求体里。你想想看,这要是被恶意WiFi劫持了,后果不堪设想。
证书伪造
证书伪造是中间人攻击的核心技术。抓包工具(比如Charles、Burp Suite)之所以能解密HTTPS流量,就是因为它生成了一个「根证书」,并让你安装到设备上。
具体流程是这样的:
- 生成根证书:抓包工具自己创建一个CA根证书
- 安装到设备:你把这个根证书安装到Android系统的信任存储中
- 动态签发:每次抓包时,工具用这个根证书动态签发目标域名的证书
- 完成欺骗:客户端信任了根证书,自然也就信任了动态签发的域名证书
说白了,这就是「我信任你,所以你说谁可信,我就信谁」的逻辑。但这里有个大坑——
警告:Android 7.0(API 24)及以上版本,系统默认只信任系统级CA证书,不信任用户安装的证书。这意味着,你装的那些抓包工具根证书,默认情况下对App是无效的!
为什么会这样?因为Google也意识到了中间人攻击的风险。很多恶意软件就是通过诱导用户安装伪造证书来实现流量劫持的。所以从Android 7.0开始,系统做了这个安全加固。
那抓包工具怎么应对?有两种常见方式:
- Root设备:把用户证书移动到系统证书目录(/system/etc/security/cacerts/)
- 修改App配置:在App的AndroidManifest.xml中设置network_security_config,允许用户证书
我个人习惯用第一种方式,因为不需要改App代码。但要注意,移动系统证书需要root权限,而且不同Android版本的证书格式可能不一样——我踩过这个坑,Android 10的证书目录结构跟Android 8完全不同。
SSL剥离攻击
SSL剥离攻击,也叫SSL Stripping,是另一种更「阴险」的攻击方式。它不伪造证书,而是直接让HTTPS降级成HTTP。
攻击流程是这样的:
- 用户输入网址(比如 https://example.com)
- 中间人拦截请求,把HTTPS链接替换成HTTP链接
- 中间人自己跟服务器建立HTTPS连接
- 用户看到的是HTTP页面,所有数据明文传输
你想想看,用户明明输入的是HTTPS地址,结果实际走的却是HTTP。浏览器地址栏的小锁图标不见了,但很多用户根本不会注意到这个细节。
避坑指南:我曾经在测试一个电商App时发现,它的登录页面虽然用了HTTPS,但登录后的跳转链接却是HTTP。这就给了SSL剥离攻击可乘之机。正确的做法是:全站强制HTTPS,并且启用HSTS(HTTP Strict Transport Security)。
HSTS是什么?简单说,就是告诉浏览器:「以后访问我这个网站,只能用HTTPS,别给我走HTTP」。浏览器收到这个指令后,会把这个策略缓存起来,下次直接走HTTPS,不给中间人任何降级的机会。
但HSTS也有一个「第一次访问」的问题——如果用户第一次访问时就被攻击了,那HSTS还没生效,攻击照样能成功。所以现在很多浏览器内置了HSTS预加载列表,把常用网站的HTTPS策略直接写死在浏览器里。
三种攻击方式的对比
| 攻击方式 | 核心原理 | 防御手段 | 抓包工具代表 |
|---|---|---|---|
| 中间人攻击 | 伪造证书,欺骗客户端 | 证书绑定(Certificate Pinning) | Charles、Burp Suite |
| 证书伪造 | 安装恶意根证书 | 系统证书校验、Android 7.0+安全策略 | mitmproxy |
| SSL剥离攻击 | HTTPS降级为HTTP | HSTS、全站HTTPS | sslstrip |
这张表我建议你收藏一下。每次做安全测试时,对照着看看自己的App能防住哪几种攻击。
知识体系总览
下面这张图,是我梳理的HTTPS抓包与中间人攻击的核心知识结构。你可以把它当成一个「思维导图」来看:
这张图把三种攻击方式的关系理清楚了。你会发现,它们虽然手法不同,但核心目标都一样——破坏HTTPS的加密信任链。理解了这一点,你就能举一反三,知道该怎么防御了。
个人经验:我建议你在做App安全测试时,至少用两种抓包工具交叉验证。因为有些App对特定工具的证书做了特殊处理,换一个工具可能就抓不到了。我遇到过Charles抓不到、但mitmproxy能抓到的情况,原因是App对Charles的证书指纹做了黑名单检测。
好了,这一章的内容就到这里。记住一句话:没有绝对的安全,只有不断升级的攻防。下一章我们会深入证书绑定的具体实现,到时候再聊。
公众号:蓝海资料掘金营,微信deep3321