Android平台HTTPS抓包全方案

这篇博客详细介绍了在Android平台上进行HTTPS抓包的原理和方法,包括中间人攻击、安装CA证书、应对Android 7.0用户CA限制的策略,如networkSecurityConfig配置、使用平行空间、导入系统CA证书等。还讨论了Firefox证书安装、公钥证书固定、双向认证抓包等问题,提供了解决方案。
摘要由CSDN通过智能技术生成

前言 

HTTP协议发展至今已经有二十多年的历史,整个发展的趋势主要是两个方向:效率和安全。效率方面,从HTTP1.0的一次请求一个连接,到HTTP1.1的连接复用,到SPDY/HTTP2的多路复用,到QUIC/HTTP3的基于UDP传输,在效率方面越来越高效。安全方面,从HTTP的明文,到HTTP2强制使用TLSv1.2,到QUIC/HTTP3强制使用TLSv1.3,越来越注重数据传输的安全性。总而言之,HTTP协议的发展对用户是友好的,但是对开发者而言却不那么友善。

抓包是每个程序员的必修技能之一,尤其是在接口调试和程序逆向方面具有广阔的用途。但是,随着越来越多的通信协议使用加密的HTTPS,而且系统层面也开始强制规定使用HTTPS,抓包似乎是显得越来越难了。

本篇博客,主要详解Android平台下,HTTPS抓包的常见问题以及解决办法。工欲善其事必先利其器,博客中以HttpCanary作为抓包工具进行讲解。更多HttpCanary的资料,请见:

点击我的GitHub地址免费获取

抓包原理

几乎所有网络数据的抓包都是采用中间人的方式(MITM),包括大家常用的Fiddler、Charles等知名抓包工具,HttpCanary同样是使用中间人的方式进行抓包。

Android平台HTTPS抓包全方案

 

从上面这个原理图,可以看出抓包的核心问题主要是两个:

  • MITM Server如何伪装成真正的Server
  • MITM Client如何伪装成真正的Client

第一个问题,MITM Server要成为真正的Server,必须能够给指定域名签发公钥证书,且公钥证书能够通过系统的安全校验。比如Client发送了一条https://www.baidu.com/的网络请求,MITM Server要伪装成百度的Server,必须持有www.baidu.com域名的公钥证书并发给Client,同时还要有与公钥相匹配的私钥。

MITM Server的处理方式是从第一个SSL/TLS握手包Client Hello中提取出域名www.baidu.com,利用应用内置的CA证书创建www.baidu.com域名的公钥证书和私钥。创建的公钥证书在SSL/TLS握手的过程中发给Client,Client收到公钥证书后会由系统会对此证书进行校验,判断是否是百度公司持有的证书,但很明显这个证书是抓包工具伪造的。为了能够让系统校验公钥证书时认为证书是真实有效的,我们需要将抓包应用内置的CA证书手动安装到系统中,作为真正的证书发行商(CA),即洗白。这就是为什么,HTTPS抓包一定要先安装CA证书。

第二个问题,MITM Client伪装成Client。由于服务器并不会校验Client(绝大部分情况),所以这个问题一般不会存在。比如Server一般不会关心Client到底是Chrome浏览器还是IE浏览器,是Android App还是iOS App。当然,Server也是可以校验Client的,这个后面分析。

/ 安装CA证书 /

抓包应用内置的CA证书要洗白,必须安装到系统中。而Android系统将CA证书又分为两种:用户CA证书和系统CA证书。顾明思议,用户CA证书是由用户自行安装的,系统CA证书是由系统内置的,很明显后者更加真实有效。

系统CA证书存放在/etc/security/cace

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值