Charles抓包实战:从Mac到Android的SSL证书配置与疑难排解
2026/7/16 8:32:28 网站建设 项目流程

1. Charles抓包基础与环境准备

第一次接触Charles抓包时,我被它强大的功能震撼到了。这个看似简单的工具不仅能拦截HTTP/HTTPS请求,还能修改请求参数、模拟慢速网络,甚至重写服务器响应。记得有次调试一个支付接口,就是靠Charles修改了0.1元的测试金额,避免了反复充值带来的麻烦。

要在Mac上使用Charles抓取Android设备的网络流量,首先需要确保开发环境正确配置。以下是详细的环境准备步骤:

  1. 安装Charles:前往 Charles官网 下载最新版本。虽然它是收费软件,但提供30天免费试用期,对于短期项目完全够用。安装过程很简单,双击dmg文件拖拽到Applications文件夹即可。

  2. 网络环境检查:确保你的Mac和Android设备连接在同一个WiFi网络下。我遇到过不少新手因为设备不在同一局域网而无法抓包的情况。可以通过ping命令测试连通性:

ping 192.168.1.100 # 替换为你的手机IP
  1. 获取本机IP:在Charles的Help菜单选择"Local IP Address",或者直接在终端运行:
ifconfig | grep "inet " | grep -v 127.0.0.1

记下en0接口的IP地址,通常是192.168.x.x这样的内网IP。

  1. Android设备准备:进入手机设置->关于手机,连续点击"版本号"7次开启开发者模式。然后在开发者选项中开启"USB调试",这对后续安装证书很有帮助。

2. HTTP抓包配置实战

配置HTTP抓包只需要两个核心步骤,但实际操作中会遇到各种细节问题。上周帮同事调试时,就发现他的手机始终无法连接到Charles,最后发现是公司网络隔离了设备间的通信。

2.1 配置Charles代理端口

  1. 打开Charles,点击菜单Proxy -> Proxy Settings
  2. 在HTTP Proxy部分勾选"Enable transparent HTTP proxying"
  3. 端口默认使用8888,如果冲突可以改为其他值(如8889)
  4. 建议勾选"Support HTTP/2"以兼容现代网络协议

2.2 配置Android网络代理

  1. 进入手机WiFi设置,长按当前连接的网络选择"修改网络"
  2. 在高级选项中找到代理设置,选择"手动"
  3. 服务器主机名填写刚才获取的Mac IP地址
  4. 端口填写Charles中设置的端口(默认8888)
  5. 保存设置后,Charles会弹出连接确认对话框,点击"Allow"

此时在手机浏览器访问任意HTTP网站,Charles界面应该会出现请求记录。如果遇到连接问题,可以尝试以下排查步骤:

  • 关闭Mac防火墙:系统设置->隐私与安全->防火墙
  • 检查代理设置是否正确:在手机浏览器访问http://charlesproxy.com/getssl,应该能看到Charles的欢迎页面
  • 重启Charles和手机网络

3. HTTPS抓包全流程解析

HTTPS抓包比HTTP复杂得多,主要是因为SSL/TLS加密机制。Charles通过中间人(MITM)技术实现HTTPS解密,这需要在设备和电脑上安装特定的根证书。最近帮一个金融App做测试时,就遇到了证书校验失败的问题,花了半天时间才解决。

3.1 Charles SSL代理配置

  1. 点击Proxy -> SSL Proxying Settings
  2. 勾选"Enable SSL Proxying"
  3. 在Include部分添加需要抓包的域名和端口,可以使用通配符*抓取所有HTTPS流量
  4. 建议将443(HTTPS默认端口)和自定义API端口都加入列表

3.2 证书安装关键步骤

Mac端证书安装:

  1. Help -> SSL Proxying -> Install Charles Root Certificate
  2. 在钥匙串访问中找到"Charles Proxy CA"证书
  3. 双击证书,在信任设置中将"使用此证书时"改为"始终信任"

Android端证书安装(传统方法):

  1. Help -> SSL Proxying -> Save Charles Root Certificate
  2. 将生成的.pem文件通过USB或网络发送到手机
  3. 在手机设置->安全->加密与凭据中选择"安装证书"
  4. 选择CA证书,找到.pem文件完成安装

Android 7.0+特殊处理:由于Android 7.0开始限制用户证书,需要额外配置:

  1. 创建res/xml/network_security_config.xml文件:
<network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system"/> <certificates src="user"/> </trust-anchors> </base-config> </network-security-config>
  1. 在AndroidManifest.xml的application标签添加:
android:networkSecurityConfig="@xml/network_security_config"

4. 常见问题与深度解决方案

在实际项目中,我遇到过各种抓包失败的情况。以下是几个典型问题及其解决方案:

4.1 证书安装失败问题排查

现象:手机提示"无法安装证书"或"证书格式错误"

解决方案

  1. 尝试将.pem证书重命名为.crt后缀
  2. 使用ADB命令强制安装:
adb push charles.pem /sdcard/ adb shell am start -n com.android.settings/.SecuritySettings
  1. 对于MIUI等定制系统,可能需要关闭"MIUI优化"(开发者选项内)

4.2 抓包显示Unknown问题

现象:HTTPS请求显示为Unknown或乱码

排查步骤

  1. 确认Charles的SSL Proxying已启用
  2. 检查证书是否安装正确(手机设置->安全->信任的凭据)
  3. 尝试在Charles的SSL Proxying Settings中添加具体域名而非通配符
  4. 对于使用证书固定(pinning)的App,需要额外处理:
# 使用objection绕过证书固定 pip install objection objection --gadget com.example.app explore -s "android sslpinning disable"

4.3 Android高版本兼容性问题

从Android 9开始,系统默认阻止非加密流量,需要在network_security_config.xml中添加:

<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">your.api.domain</domain> </domain-config>

对于Android 10+,还需要在Application标签添加:

android:usesCleartextTraffic="true"

5. 高级技巧与实战经验

经过多次项目实战,我总结出一些提升抓包效率的技巧:

5.1 精准过滤请求

Charles默认会捕获所有网络流量,可以通过这些方式过滤:

  1. 在Filter栏输入关键字(如"api")
  2. 右键请求选择"Focus"聚焦特定请求
  3. 在Proxy -> Recording Settings中设置包含/排除规则

5.2 修改请求与响应

调试接口时经常需要修改参数:

  1. 右键请求选择"Edit"
  2. 修改Query/POST参数后点击"Execute"
  3. 对响应选择"Edit Response"可以直接返回自定义数据

5.3 断点调试技巧

设置断点可以拦截特定请求:

  1. 右键请求选择"Breakpoints"
  2. 在Proxy -> Breakpoint Settings中配置断点条件
  3. 请求被拦截时可以修改任意内容

5.4 模拟慢速网络

测试弱网环境表现:

  1. Proxy -> Throttle Settings
  2. 选择预设网络类型(如3G)
  3. 可以自定义带宽、延迟和丢包率

记得有次测试时发现App在2G网络下完全无法使用,就是这个功能帮我们提前发现了问题。

6. 安全注意事项与最佳实践

在金融类App测试中,安全团队曾对我们的抓包操作提出质疑。经过沟通,我们制定了以下安全规范:

  1. 测试环境隔离:只在测试网络中使用抓包工具,禁止在生产环境配置
  2. 证书管理:项目结束后立即移除设备上的Charles证书
  3. 数据加密:敏感数据使用临时测试账号,避免真实数据泄露
  4. 权限控制:设置Charles密码保护(Proxy -> Access Control Settings)

对于安全性要求高的App,建议开发阶段就建立专用的调试证书体系,而不是依赖Charles的通用证书。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询