核心概念:为什么需要配置?
在开始之前,我们先要理解一个基本原理:

(图片来源网络,侵删)
- 手机 和 电脑(运行 Charles) 通常连接在同一个 Wi-Fi 下。
- HTTPS 协议是加密的,手机和服务器之间的通信内容是“看不懂”的,Charles 默认只能看到加密的密文,而无法解密。
- SSL Pinning(证书锁定):为了防止中间人攻击(Charles 这种代理工具),很多 App 会在代码中内置一个或多个受信任的服务器证书,Charles 的证书不在其信任列表里,App 就会直接拒绝联网,导致抓包失败。
安卓手机抓包的核心步骤就是:
- 让手机信任 Charles 的根证书(解决 HTTPS 解密问题)。
- 让手机把网络流量通过 Charles 代理(让 Charles 能“看到”流量)。
准备工作
- 一台电脑:Windows, macOS 或 Linux 均可。
- 安装 Charles:在 Charles 官网 下载并安装最新版,有免费试用版,功能足够使用。
- 一台安卓手机:系统版本不限,但不同品牌(如小米、华为、OPPO、VIVO)在系统设置上略有差异。
- 电脑和手机连接在同一个 Wi-Fi 网络:这是最基本的前提。
详细步骤
第一步:在电脑上配置 Charles
-
开启代理功能
- 打开 Charles 软件。
- 点击顶部菜单栏的 Proxy (代理) -> Proxy Settings (代理设置)。
- 在弹出的窗口中,确保 "Enable transparent HTTP proxying" (启用透明 HTTP 代理) 是勾选状态。
- Host (主机名) 和 Port (端口) 保持默认即可(通常是
0.0.1:8888)。 - 点击 OK。
-
配置 SSL 代理
- 这是为了让 Charles 能够解密 HTTPS 流量,点击顶部菜单栏的 Proxy (代理) -> SSL Proxying Settings (SSL 代理设置)。
- 勾选 "Enable SSL Proxying" (启用 SSL 代理)。
- 在 Locations (位置) 栏下,点击 Add (添加)。
- Host (主机名):填入你想要抓包的域名,
www.baidu.com,如果想抓所有 HTTPS 流量,可以填 。 - Port (端口):填入
443,如果想抓所有 HTTPS 端口,可以填 。 - 点击 OK。
-
获取 Charles 根证书
(图片来源网络,侵删)- 点击顶部菜单栏的 Help (帮助) -> SSL Proxying (SSL 代理) -> Save Charles Root Certificate... (保存 Charles 根证书...)。
- 将证书文件(通常是
charles-proxy-ssl-proxying-certificate.pem)保存到电脑上,我们稍后需要把它传输到手机上。
第二步:在安卓手机上配置
核心流程: 连接 Wi-Fi -> 设置代理 -> 安装并信任证书
-
连接 Wi-Fi 并设置代理
- 在手机的 设置 -> WLAN (或 Wi-Fi) 中,连接到你电脑所在的同一个 Wi-Fi 网络。
- 长按该 Wi-Fi 网络,选择 "网络配置" 或 "修改网络"。
- 勾选 "高级选项" 或 "代理"。
- 在 代理 选项中,选择 "手动"。
- 主机名:填入你 电脑的局域网 IP 地址。
- 如何获取电脑 IP 地址?
- Windows: 打开命令提示符,输入
ipconfig,找到 "IPv4 地址"。 - macOS: 打开 "系统偏好设置" -> "网络",选择当前连接的网络,查看 "IP 地址"。
- Linux: 打开终端,输入
ip addr或ifconfig,找到inet地址。
- Windows: 打开命令提示符,输入
- 如何获取电脑 IP 地址?
- 端口:填入 Charles 的代理端口,默认是
8888。 - 保存设置。
-
安装并信任 Charles 证书
-
通过浏览器下载(推荐,适用于所有安卓版本)
(图片来源网络,侵删)- 在手机浏览器(如 Chrome, Firefox)中,访问地址:
chls.pro/ssl。 - 手机会自动检测到 Charles 的代理,并提示你下载一个证书文件(通常名为
charles-proxy-ssl-proxying-certificate.cer或类似名称)。 - 下载完成后,打开系统的 "下载" 文件夹,点击该证书文件进行安装,根据提示输入锁屏密码。
- 安装时,系统会让你为证书命名,并选择用途,选择 "VPN 和应用" 或 "WLAN"。
- 在手机浏览器(如 Chrome, Firefox)中,访问地址:
-
手动安装(适用于安卓 10 及以上系统)
- 将第一步保存到电脑的
charles-proxy-ssl-proxying-certificate.pem文件,通过微信、QQ、数据线等方式传输到手机上。 - 在手机上找到该文件,点击打开。
- 系统会提示你安装证书,输入锁屏密码后,在 "证书安装程序" 中选择 "VPN 和应用" 或 "WLAN"。
- 重要:安装后,你还需要手动去系统设置中信任它。
- 进入 设置 -> 安全 (或 安全和隐私) -> 更多安全设置 (或 加密与凭据) -> 从存储设备安装 (或 安装证书) -> CA 证书。
- 找到你刚刚安装的证书,给它命名并确认安装。
- 将第一步保存到电脑的
-
-
信任用户安装的证书(关键步骤!)
- 这是最容易出错的一步! 很多手机品牌默认不信任用户自己安装的证书。
- 进入 设置 -> 安全 (或 安全和隐私) -> 加密与凭据。
- 找到 "安装的证书" 或 "信任的凭据"。
- 点击进入,你会看到 "用户" 和 "系统" 两个标签页。
- 在 "用户" 标签页下,找到你刚才安装的 Charles 证书(可能就是你给它起的名字),确保它旁边的开关是打开的(被勾选)。
- 如果找不到 "信任的凭据" 选项:某些品牌(如小米、华为)的路径可能不同。
- 小米/红米: 设置 -> 更多设置 -> 安全设置 -> 从存储设备安装 -> CA 证书 (安装后) -> 设置 -> 更多设置 -> 安全设置 -> 管理已安装的证书 -> 用户证书 (在这里找到你的证书并点击它,会显示详细信息,确保是“信任”状态)。
- 华为: 设置 -> 安全 -> 更多 -> 加密与凭据 -> 信任的凭据 -> 在这里找到你的证书并启用它。
开始抓包与验证
-
检查 Charles
- 确保电脑上的 Charles 已经启动。
- Charles 左下角的 "HTTP Proxy" 状态应该显示为 "Started",并且你的手机 IP 地址会出现在 "Accessed from" 列表中,如果手机 IP 出现了,说明代理设置成功。
-
验证抓包
- 在手机上打开浏览器,访问任意网站(如
www.baidu.com)。 - 回到电脑的 Charles,你应该能看到抓到的 HTTP 请求了。
- 为了验证 HTTPS 抓包,在手机上打开一个支持 HTTPS 的 App(如微信、微博、淘宝),或者访问
https://www.baidu.com。 - 在 Charles 中,如果能看到具体的请求内容(如 HTML, JSON, 图片等),并且域名旁边有一个 小锁图标,说明 HTTPS 抓包也成功了!
- 在手机上打开浏览器,访问任意网站(如
常见问题与解决方案
-
问题:Charles 中看不到手机 IP,或者提示 "SSL Proxying error no certificate"。 原因:手机和电脑不在一个局域网,或者代理端口/IP 设置错误。 解决:重新检查 Wi-Fi 和电脑的 IP 地址、端口。
-
问题:Charles 中能看到手机 IP,但抓不到任何 HTTPS 请求,或者请求显示 "SSLHandshakeException"。 原因:手机没有信任 Charles 证书,或者 App 开启了 SSL Pinning。 解决:
- 仔细检查 第三步第 3 点,确保证书已正确安装并 在“信任的凭据”中被启用。
- SSL Pinning 问题:这是 App 自身的安全机制,普通用户很难绕过,可以尝试在 Charles 中关闭 SSL 代理,看能否抓到 HTTP 流量,如果完全抓不到,说明该 App 的证书锁定非常严格,可能需要更高级的工具(如 Frida)来动态绕过。
-
问题:手机浏览器可以访问网页,但 App 无法联网。 原因:部分 App(尤其是银行类、金融类)会检测代理环境,一旦发现使用代理就拒绝联网。 解决:这是 App 的设计,无法解决,可以尝试关闭手机上的 VPN 或其他代理类 App。
-
问题:Charles 抓到的 HTTPS 内容是乱码或无法解析。 原因:SSL 代理设置未开启或 Host/Port 不匹配。 解决:回到 第一步第 2 点,检查 SSL Proxying Settings 是否已正确配置。
高级技巧
- 过滤请求:在 Charles 的过滤栏中输入域名(如
baidu.com),只显示与该域名相关的请求,方便查找。 - Map Local:如果你想模拟服务器返回特定数据,可以右键点击一个请求,选择 "Map Local",然后选择一个本地的文件来替代服务器的响应,这对于测试和调试非常有用。
- Breakpoints:设置断点,可以修改请求的参数或响应的内容,再发送出去,观察 App 的行为。
遵循以上步骤,你就可以成功地在安卓手机上使用 Charles 进行抓包了,祝你调试顺利!
