拓冰建站拓冰建站
首页 / 资讯中心 / 正文

安卓HTTPS抓包实战:Charles中间人代理原理与配置详解

1. 项目概述为什么我们需要在移动端抓取HTTPS包做客户端开发、测试或者对网络行为感兴趣的朋友肯定都遇到过这样的场景App里某个功能突然不好使了接口返回的数据不对或者你想研究一下某个应用是怎么和服务器通信的。这时候光靠看界面是没用的你得“看到”网络层面到底发生了什么。抓包就是让你能“看到”这些网络请求和响应的技术手段。而在移动互联网时代绝大部分App的通信都采用了HTTPS协议。HTTPS在HTTP的基础上加入了SSL/TLS加密层这就像给信件装上了防拆封的加密信封保证了传输过程的安全和隐私。但这也带来了一个麻烦对于开发者或测试人员来说我们自己也“看”不到信封里的内容了给调试和分析带来了巨大障碍。因此在安卓设备上抓取HTTPS流量就成了一个刚需且略带技术门槛的操作。Charles作为一款老牌且强大的HTTP/HTTPS代理工具因其直观的界面、强大的过滤和断点调试功能成为了众多开发者的首选。本教程将聚焦于在macOS系统上使用Charles对安卓手机或平板进行HTTPS抓包的完整流程。我会把每一步的原理、操作意图以及我踩过的坑都讲清楚目标是让你看完之后不仅能照着做成功还能明白每一步背后的“所以然”。2. 核心原理与工具准备理解中间人代理在开始动手之前我们必须先搞清楚Charles抓取HTTPS流量的核心原理——中间人攻击。别被这个名字吓到在这里我们是经过设备授权的“善意中间人”。2.1 HTTPS抓包的本质SSL/TLS代理正常情况下客户端你的手机App和服务器之间会建立一个直接的、加密的SSL/TLS连接。Charles要介入其中就必须让自己成为通信的中间节点。具体流程如下客户端连接代理你将手机的代理设置为Charles运行的电脑。此时手机发出的所有HTTP/HTTPS请求都会先发送到Charles。Charles“冒充”服务器对于HTTPS请求Charles会动态生成一个证书用它来与你的手机建立SSL连接。对手机来说Charles就是它要访问的“目标服务器”。Charles再连接真实服务器与此同时Charles会用它自己的证书或系统信任的证书与真实的服务器建立另一个SSL连接。解密、窥探、再加密Charles在中间扮演了双重角色。它先解密从手机收到的加密数据让你能在界面中看到明文内容然后它可能将数据原样或修改后再用与服务器的加密通道发送出去。反向的响应流程亦然。这个过程成功的关键在于让手机的系统信任Charles生成的证书。如果不信任手机就会弹出一个“网络可能受到监控”的警告并拒绝连接抓包也就失败了。2.2 工具清单与安装你需要准备以下三样东西一台运行macOS的电脑本教程基于macOSWindows版Charles操作大同小异但证书安装等路径有所不同。Charles Proxy软件访问Charles官网下载最新版本。它提供免费试用版启动后每30分钟会断一次重启即可对于学习和偶尔使用完全足够。一部安卓手机或平板需要和你的电脑在同一个局域网下。Charles安装后的首要配置安装完成后首次启动Charles它会请求为你添加系统网络代理权限一定要点击“允许”。这是Charles能拦截流量的基础。你可以在系统设置 - 网络 - 高级 - 代理中看到Charles已经配置好了。注意很多新手在这一步就卡住了因为没给权限导致Charles无法监听任何流量。如果没弹窗或当时拒绝了可以去系统设置 - 隐私与安全性 - 辅助功能里找到Charles并勾选。3. 核心配置详解电脑端与移动端双向设置配置是成功的关键这里分为电脑端和手机端两部分顺序不能错。3.1 电脑端Charles配置启动Charles后我们按顺序进行以下设置3.1.1 开启SSL代理功能这是抓HTTPS包的核心开关。在顶部菜单栏点击Proxy - SSL Proxying Settings...。在弹出的窗口中勾选Enable SSL Proxying。点击Add按钮在Host字段填入*Port字段填入443。这表示对任意主机*是通配符的443端口HTTPS默认端口的流量都进行SSL代理。点击OK保存。原理说明这里配置的是Charles的SSL代理规则。只配置*:443通常足够因为大部分HTTPS走443端口。如果你要抓取其他端口的HTTPS服务比如一些内部API用的8443需要在这里额外添加。3.1.2 获取电脑的本地IP地址手机需要知道代理服务器的地址。在Charles的菜单栏点击Help - Local IP AddressCharles会显示你电脑在当前局域网内的IP地址例如192.168.1.100。记下这个地址。3.1.3 设置代理监听端口默认端口是8888通常不需要改。你可以在Proxy - Proxy Settings...里确认HTTP Proxy的Port是8888并确保Enable transparent HTTP proxying是勾选状态。3.2 安卓设备端配置现在拿起你的安卓手机。3.2.1 连接同一网络确保手机连接的Wi-Fi和你的电脑是同一个局域网。这是内网通信的前提。3.2.2 配置Wi-Fi代理这是最关键的一步让手机的流量走向Charles。进入手机的设置 - WLAN长按当前已连接的Wi-Fi网络选择“修改网络”或“高级选项”。将代理设置为“手动”。代理服务器主机名填写你刚才记下的电脑IP地址如192.168.1.100。代理服务器端口填写8888。保存设置。配置完成后Charles会立即弹出一个请求连接的对话框询问你是否允许该设备连接。点击Allow。此时你回到Charles主界面应该已经能看到手机产生的一些HTTP请求流量了比如系统时间同步、天气更新等但HTTPS请求还是乱码或显示SSL Proxying not enabled for this host:port。3.2.3 安装并信任Charles根证书这是解决HTTPS乱码、让抓包成功的最后一步也是最容易出错的一步。在手机浏览器中访问一个特殊的网址chls.pro/ssl。这个网址是Charles提供的用于下载其根证书。访问后浏览器会下载一个名为charles-proxy-ssl-proxying-certificate.pem或charles.crt的文件。下载完成后系统会提示你安装证书。证书名称可以随意填写比如“Charles Proxy”。在安装过程中系统可能会要求你设置锁屏密码如果之前没设过这是安卓系统对证书安装的安全要求照做即可。安装成功后这还没完你必须去系统设置里明确“信任”这个证书。进入设置 - 安全 - 加密与凭据不同品牌手机路径略有差异可能是“安全性与位置信息 - 更多安全设置 - 加密与凭据”。点击信任的凭据或用户凭据。在用户标签页下你应该能找到刚才安装的“Charles Proxy”证书。点击它确保它是已启用或已信任状态。踩坑实录90%的HTTPS抓包失败都卡在证书这一步。常见问题有1) 只在浏览器里下载了证书但没安装2) 安装了但没去“信任的凭据”里启用3) 安卓7.0及以上版本对用户安装的证书默认不信任用户级应用需要将证书安装到系统级这通常需要Root或者让App自身信任用户证书在App的网络安全配置中设置。对于大多数App用户证书足够但一些金融类、强安全要求的App可能会检测并拒绝。4. 实战抓包与高级功能应用配置全部完成后你就可以开始真正的抓包了。打开手机上的任意App进行操作Charles的界面中会实时滚动出现请求记录。4.1 界面解析与基础操作Charles的主界面主要分为三块左侧结构树 (Structure)按域名或主机名组织请求视图清晰适合分析某个站点的所有接口。左侧序列视图 (Sequence)按请求发生的时间顺序排列适合观察完整的使用流。右侧详情面板选中一个请求后这里会显示请求和响应的详细信息。Overview概览URL、状态码、耗时等。Contents最重要的标签页。这里可以看到请求的Headers、Query String、Cookies以及请求体和响应体的具体内容。对于HTTPS请求此时你看到的就是解密后的明文了可能是JSON、XML或Form数据。Summary / Chart / Notes提供统计、图表和备注功能。常用操作清空记录点击工具栏的扫帚图标。开始/停止录制点击左下角的“录制”按钮红色圆点。停止录制可以防止无关流量干扰分析。过滤请求在左上角的Filter框里输入关键字如主机名api.xxx.com可以快速筛选请求。4.2 断点调试与请求篡改这是Charles最强大的功能之一可以拦截并修改请求或响应。设置断点在左侧结构树中右键点击你感兴趣的某个具体请求路径或整个域名选择Breakpoints。或者更精确地通过Proxy - Breakpoint Settings...添加断点规则。触发断点在手机上再次进行会触发该请求的操作。编辑请求请求被拦截后Charles会弹出Edit Request窗口。你可以在Query Params,Headers, 特别是Body标签页里修改任何内容比如改一下提交的参数然后点击Execute发送修改后的请求。编辑响应同样在服务器返回响应后Charles会弹出Edit Response窗口。你可以修改响应的状态码、Headers或Body内容然后点击Execute将修改后的响应返回给手机。这在模拟服务器错误、测试前端兼容性时极其有用。实操心得断点功能非常强大但不要滥用。拦截所有请求会导致所有网络操作卡住。务必精确设置断点规则调试完成后记得取消勾选或删除断点。另外修改JSON响应体时要特别注意格式一个多余的逗号都可能导致App解析崩溃。4.3 弱网环境模拟Charles可以模拟各种恶劣的网络环境用于测试App的容错能力和用户体验。点击顶部菜单Proxy - Throttle Settings...。勾选Enable Throttling。在Throttle preset下拉框中选择预设场景如3G、DSL或者选择Custom进行完全自定义。在Bandwidth带宽、Utilisation利用率、Round-trip latency往返延迟、MTU最大传输单元等参数中填入你想要的值。你还可以在Only for selected hosts下方添加特定域名只对这些域名的请求进行限速非常灵活。4.4 映射本地文件与远程映射这两个功能常用于前端开发和Mock数据。Map Local将某个特定的网络请求映射到本地的一个文件。比如你想测试一个API返回新的数据结构但后端还没开发完。你可以让这个API的请求直接返回你本地写好的一个JSON文件。右键请求 -Map Local...- 选择本地文件。Map Remote将请求从一个地址重定向到另一个地址。常用于将线上环境的请求指向测试环境或者替换某个资源文件。在Tools - Map Remote...中设置。5. 疑难杂症排查与进阶技巧即使按照步骤操作你也可能会遇到问题。这里汇总了最常见的情况和解决方案。5.1 常见问题速查表问题现象可能原因解决方案Charles完全看不到任何手机请求1. 手机代理未正确设置。2. 电脑防火墙阻止了8888端口。3. 手机和电脑不在同一局域网。1. 检查手机Wi-Fi代理的IP和端口。2. 临时关闭电脑防火墙或添加8888端口入站规则。3. 确认两者连接的是同一个路由器/网络。能看到HTTP请求但HTTPS请求显示乱码或SSL错误1. Charles未开启SSL代理。2. 手机未安装/未信任Charles证书。3. 目标域名不在SSL代理列表。1. 检查Proxy - SSL Proxying Settings是否启用并添加了*:443。2. 重新访问chls.pro/ssl下载安装并去系统“信任的凭据”中确认。3. 在Charles中右键该HTTPS请求选择Enable SSL Proxying自动添加规则。手机安装证书时提示“无法安装”1. 安卓旧版本需要设置锁屏密码。2. 手机品牌如华为、小米有额外的安全限制。1. 先设置一个锁屏密码图案、PIN码均可。2. 尝试在“安全”设置里寻找“从存储设备安装”或“证书安装”的独立入口。App提示“网络错误”或“证书验证失败”1. App使用了证书绑定。2. 安卓高版本尤其是9.0的网络安全策略更严格。1. 对于自己开发的App可修改代码信任用户证书配置networkSecurityConfig。2. 尝试将Charles证书安装到系统级需Root。对于无法修改的第三方App此方法可能无效。Charles弹出重复的证书信任提示每次重启Charles其生成的证书指纹可能变化试用版常见。1. 购买正式许可证可解决。2. 临时方案在手机上删除旧Charles证书重新访问chls.pro/ssl安装新证书。抓不到某些App如微信、支付宝的包这些App使用了非标准端口、自有协议或强证书绑定。通用方法可能失效。需要更高级的手段如配合Xposed/EdXposed模块如TrustMeAlready或使用虚拟机环境这涉及更复杂的技术栈。5.2 进阶技巧应对证书绑定越来越多的App特别是金融和大型互联网公司的App会采用“证书绑定”技术来对抗中间人攻击。这意味着App内置了它只信任的特定服务器证书而拒绝信任用户手动安装的Charles证书。应对策略需一定技术基础反编译与修改对于自己开发的或可修改的App可以反编译APK修改其网络安全配置文件res/xml/network_security_config.xml放宽证书校验规则。这通常需要Smali/APKTool等工具。使用Magisk模块在已Root且安装了Magisk的手机上可以安装像“Move Certificates”这样的模块将用户证书移动到系统证书目录从而绕过一些校验。使用Frida等动态注入工具在运行时Hook App的证书验证函数使其总是返回“验证成功”。这是目前比较流行的动态方案但需要编写脚本。使用虚拟机或专用测试机在像VirtualXposed、太极这样的无Root虚拟环境中运行App这些环境本身可能提供了绕过证书绑定的能力。个人体会对于日常开发和测试搞定90%的App抓包就足够了。遇到那10%做了强保护的App需要评估投入产出比。如果不是核心工作需求不必深究可以尝试寻找其提供的测试环境或开发包这些版本通常会关闭证书绑定。5.3 性能与效率优化当抓包时间长了记录会非常多导致Charles变卡。定期清理勤用“清空”功能。使用聚焦模式在Proxy - Recording Settings - Include里只添加你需要监听的特定主机或端口排除掉图片、静态资源等无关流量。保存会话重要的抓包记录可以通过File - Save Session...保存为.chls文件以后可以重新打开分析。最后再分享一个我常用的组合技“过滤 断点 弱网模拟”。当你要测试一个特定接口在弱网下的表现时先通过过滤找到这个接口然后为它设置断点再开启全局弱网模拟。这样当这个接口被调用时你不仅能观察到慢速下的请求响应情况还能在断点处暂停仔细查看或修改此时的数据状态极大地提升了测试的深度和效率。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门