Charles Proxy Android 设置:SSL 分步指南
5分钟内完成Android系统上Charles代理的配置。完整分步教程:SSL证书安装、Wi-Fi代理设置以及流量捕获。
- 手动配置 Wi-Fi 代理 — 将手机流量直接路由至您的工作站 IP 地址和 Charles 的默认端口 8888。
- SSL CA 证书安装 — 从 chls.pro/ssl 下载,并在 Android 11 至 15 的最新版本上将其注册为受信任的凭据。
- 绕过 Android 7 及以上版本的 SSL 固定 — 针对调试版本,请配置 network_security_config.xml;针对正式版 APK 检查,请部署系统证书。
- 上游移动代理链路 — 将Charles解密后的请求通过真实的4G/5G运营商IP地址进行路由,以测试基于地理位置的移动API。
什么是 Charles Proxy?为什么要在安卓设备上使用它?
Charles Proxy 是一款跨平台的 HTTP 和 HTTPS 调试代理服务器,位于客户端应用程序与互联网之间。对于移动端工程师、安全研究人员和质量保证(QA)专家而言,Charles 充当本地中间人(MITM)引擎。 它会记录您的 Android 智能手机或模拟器发起的每个出站请求,测量端点延迟,重写请求头,限制带宽以模拟受限的蜂窝网络连接,并将 TLS 有效载荷解密为格式化的明文 JSON 或 XML 格式。
虽然通过原生开发者工具检查桌面设备的网页浏览器流量非常简单,但现代 Android 移动应用程序会使用 TLS 1.3 和证书验证例程对网络流进行加密。 通过配置适用于 Android 的 Charles Proxy,您可以在部署客户端更新之前,深入分析第三方移动应用程序的内部工作原理、审核 API 身份验证头信息、调试失败的移动支付、验证分析跟踪标签,以及诊断速率限制响应。
查看完整的 REST 和 GraphQL 请求负载,检查 Bearer 令牌、查询参数和 Cookie,并修改请求头后重新执行失败的调用。
使用动态生成的根CA证书实时解密HTTPS流量,将无法读取的二进制TLS数据流转换为可读文本。
通过PXM2串联Charles,利用4G/5G移动代理轮转,无需离开办公桌即可在40多个国家的真实蜂窝网络IP下调试移动应用。
先决条件及查找工作站 IP 地址
在配置您的 Android 设备之前,必须确保您的计算机(正在运行 Charles Proxy)和您的 Android 手机或平板电脑都连接到了完全相同的本地 Wi-Fi 网络。咖啡馆的公共网络、企业访客 Wi-Fi 以及启用了 AP 客户端隔离功能的网络都会阻止您的手机访问计算机上的 8888 端口。
默认情况下,Charles Proxy 会在所有本地接口上监听 HTTP 代理端口 8888:
请按照以下步骤查找计算机的本地 IPv4 地址:
-
方法 A:直接在 Charles Proxy 中检查(最简单)
在计算机上的 Charles Proxy 中,点击顶部菜单:帮助 > 本地 IP 地址。此时会弹出一个对话框,显示您当前的局域网 IPv4 地址(例如 192.168.1.145 或 10.0.0.22)。
-
方法 B:通过命令行终端进行检查
在 macOS 或 Linux 系统上,请在终端中运行 ifconfig 或 ip a 命令,查找 en0 或 wlan0 的 inet 地址。在 Windows 系统上,请打开命令提示符或 PowerShell,运行 ipconfig 命令,并记下当前活动的 Wi-Fi 适配器下的 IPv4 地址。
# macOS / Linux terminal:
ip route get 1.1.1.1 | awk '{print $7}'
# Windows PowerShell:
(Get-NetIPAddress -AddressFamily IPv4 -InterfaceAlias 'Wi-Fi*').IPAddress
Firewall Warning: Ensure your workstation firewall (Windows Defender, macOS Application Firewall, or ufw on Linux) allows incoming TCP connections on port 8888. If blocked, your phone will immediately display "No Internet Connection" upon enabling the proxy.
步骤 1:Android Wi-Fi 手动代理配置
在确认了工作站的 IP 地址并运行了 Charles Proxy 之后,请将 Android 设备的 Wi-Fi 网络适配器配置为将所有出站 TCP 流量通过计算机的代理端口进行转发。
-
打开 Android 的 Wi-Fi 设置
打开“设置” > “网络与互联网” > “互联网”(或“Wi-Fi”)。长按或轻点当前已连接的 Wi-Fi 网络旁边的齿轮图标。
-
修改网络设置并展开高级选项
Tap "Modify network" (or the pencil edit icon), then expand "Advanced options".
-
将代理设置为“手动”
In the Proxy dropdown, select "Manual". Enter your computer's local IP (e.g. 192.168.1.145) under Proxy hostname, and type 8888 under Proxy port. Tap Save.
点击“保存”。此时,您的安卓手机发出的所有 HTTP 请求都将被路由到您计算机上的 8888 端口。
步骤 2:在 Charles 中授权 Android 连接
就在您的手机通过代理发送第一个网络数据包的瞬间,Charles Proxy 便检测到来自您本地子网中一个陌生 IP 地址的连接。出于安全考虑,Charles 会阻止该连接,直到您明确授权该设备为止。
A modal dialog will pop up on your computer screen asking: "A connection attempt from [phone IP] was received. Do you want to allow it?"
点击 允许。Charles 将自动将您的手机 IP 地址添加到其访问控制白名单中。
如果您不小心点击了“拒绝”,或者提示框从未出现,您可以通过 代理 > 访问控制设置 手动配置访问控制白名单:
专业提示:将整个本地子网(例如 192.168.1.0/24 或 10.0.0.0/24)添加到“访问控制设置”中,可以避免在手机的 DHCP 租约因 IP 地址变更而每次刷新时,Charles 都向您发出提示。
步骤 3:下载 Charles SSL 证书
在此阶段,普通 HTTP 流量会被捕获,但所有 HTTPS 流量在 Charles 中都会显示为带有挂锁图标且有效载荷被乱码化的加密 CONNECT 隧道。要解密 TLS 数据流,Android 必须信任 Charles 根证书颁发机构 (CA)。
Charles 包含内置说明,并可通过本地 Web 网关按需提供其根证书:
-
在您的安卓手机上打开 Chrome
请勿在启用了严格证书固定机制的应用内 WebView 或浏览器中使用。请使用标准的 Google Chrome 或原生 Android 浏览器。
-
转到证书下载网关
在地址栏中输入 chls.pro/ssl,然后按 Enter 键。(注意:请使用 http://,而不是 https://)。
-
确认文件下载
Charles 拦截了该域名,并立即返回其生成的根证书文件,文件名为 getssl.crt 或 charles-proxy-ssl-proxying-certificate.pem。
另一种离线导出方法:如果您的手机无法访问 chls.pro/ssl,请在电脑上打开 Charles,依次进入“帮助”>“SSL 代理”>“保存 Charles 根证书”,将其保存为 .pem 或 .crt 文件,然后通过 USB 或执行 adb push cert.pem /sdcard/Download/ 命令将其传输到手机上。
第 4 步:在 Android 上安装 CA 证书
下载完成后,您必须将该证书安装到 Android 的凭据存储中。
在不同版本的 Android 系统上安装证书
| Android 版本 | “设置”中的导航路径 | 行为与提示 |
|---|---|---|
| Android 11、12、13、14、15 | “设置” > “安全与隐私” > “更多安全设置” > “加密与凭据” > “安装证书” > “CA证书” | Android displays "Your CA certificate won't be private". Tap "Install anyway", verify lock screen PIN, and select getssl.crt from Downloads. |
| Android 7、8、9、10 | “设置” > “安全” > “从存储安装”(或轻触“下载”通知中的 getssl.crt) | Direct certificate installation dialog appears. Enter name "Charles Proxy" and tap OK. |
第 5 步:启用 SSL 代理以进行 HTTPS 解密
在手机上安装该证书后,手机即可验证由Charles生成的SSL证书。不过,除非您配置了SSL代理规则,否则Charles本身不会尝试解密HTTPS流量。
-
在 Charles 中打开 OpenSSL 代理设置
在 Charles 的顶部菜单中,依次选择“代理”>“SSL 代理设置”。
-
启用 SSL 代理
Ensure the checkbox "Enable SSL Proxying" is checked.
-
添加目标通配符规则 (*:* 或 *:443)
Under the Include tab, click "Add". In the Host field, type * (asterisk) to decrypt all domains, or specify a targeted domain such as *.example.com. In the Port field, type 443 (or *), then click OK.
第 6 步:Android 7 及以上版本的网络安全配置与 SSL 固定
如果你现在在 Android 设备上打开 Google Chrome,你会发现所有 HTTPS 网站都能成功解密。然而,当你启动原生移动应用时,请求可能会因“SSLHandshakeException:未找到证书路径的信任锚点”而失败。
从 Android 7.0(API 级别 24)开始,谷歌更改了默认信任策略:原生应用不再信任用户安装的 CA 证书,除非应用开发者在应用清单中明确允许。
方案 A:面向开发者(您正在开发的应用程序)
如果您可以访问该应用的源代码,请创建一个网络安全配置文件,以指示调试版本信任用户证书。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust system CAs and user-installed CAs (Charles) in debug builds -->
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
然后在您的 AndroidManifest.xml 文件的 <application> 标签下引用此配置:
<application
android:name=".MainApplication"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config">
...
</application>
方案 B:针对第三方应用程序(安全审计与逆向工程)
在分析无法编辑源代码的第三方生成的 APK 时,请使用以下三种成熟的绕过机制之一:
| 技术 | 要求 | 它是如何绕过证书限制的 |
|---|---|---|
| Magisk TrustUserCerts 模块 | 已获取root权限的手机或Magisk模拟器 | 将证书从“用户”存储区(/data/misc/user/0/cacerts-added)移动到“系统”存储区(/system/etc/security/cacerts),使应用程序认为 Charles 是预装的出厂证书颁发机构(CA)。 |
| Frida 动态挂钩 | 设备上的 frida-server | 在运行时对内存中的 OkHttp3 CertificatePinner、TrustManagerImpl 和 Conscrypt 类进行挂钩,以强制 SSL 验证检查返回 true。 |
| APKTool 补丁处理 | 未获取root权限的设备 | Decompiles the APK with apktool d app.apk, injects network_security_config.xml, sets android:debuggable="true", and resigns with uber-apk-signer. |
第 7 步:将 Charles 与 PXM2 4G/5G 移动代理串联
虽然查尔斯在本地检查并解密数据包,但从您的工作站发出的请求却显示的是您家中或办公室的宽带IP地址。在审计反欺诈防御机制、Instagram/TikTok移动自动化或受地理限制的流媒体API时,目标系统会将来自移动用户代理的数据中心或住宅宽带IP模式标记出来。
您可以通过PXM2专用的4G/5G移动调制解调器,将Charles Proxy作为上游组件进行串联。在此架构中,Charles会在您的桌面屏幕上本地解密并显示请求,而PXM2则通过真实的移动运营商无线网络将实际请求转发至目标。
将 Android 与 Charles 以及 PXM2 蜂窝调制解调器连接起来的完整上游代理链工作流。
要在 Charles 中配置上游链路,请:
-
转到“外部代理设置”
在 Charles 中,点击“代理”>“外部代理设置”。
-
启用外部代理服务器
Check "Use external proxy servers". Check both "Web Proxy (HTTP)" and "Secure Web Proxy (HTTPS)".
-
输入 PXM2 网关凭据
In Web Proxy Server, enter your assigned PXM2 gateway hostname and port (for example, gate.pxm2.io:8000). Check "External proxy requires authentication", then input your username and password.
第 8 步:禁用代理及常见错误的故障排除
测试结束后,请记得关闭手机上的代理。如果在 Android Wi-Fi 代理仍处于启用状态时关闭工作站上的 Charles,您的手机将完全无法连接互联网。
若要恢复原状:请返回“设置” > “网络与互联网” > “Wi-Fi” > “编辑网络” > “高级选项”,将“代理”从“手动”改回“无”。
故障排除矩阵:Android 版 Charles 代理问题
| 观察到的问题/错误 | 根本原因 | 修复操作 |
|---|---|---|
| Phone shows "No Internet Connection" immediately | 端口 8888 被电脑防火墙阻挡,或手机 IP 在 Charles 访问控制中被拒绝。 | 在 Windows 防火墙/macOS Pfctl 中允许 8888 端口。打开 Charles Proxy > 访问控制设置,并添加您的子网(例如 192.168.1.0/24)。 |
| chls.pro/ssl 超时或显示外部网站 | 手机上的 Wi-Fi 代理尚未启用,或者指向了错误的 IP 地址。 | 请确认您的计算机 IP 地址未通过 DHCP 发生变化。在访问 chls.pro/ssl 之前,请确保代理设置为“手动”,端口号为 8888。 |
| SSLHandshake:收到致命警报:certificate_unknown | CA证书未安装,或者应用强制执行针对 Android 7 及以上版本用户的 CA 限制。 | 请检查“设置” > “安全” > “受信任的凭据” > “用户”选项卡,确认是否已添加 Charles CA。请配置 network_security_config.xml 文件,或使用 Magisk TrustUserCerts。 |
| Charles 中请求旁带有红色“X”的锁形图标 | 已禁用对所请求的主机或端口的 SSL 代理功能。 | Right-click the host in the Structure panel and click "Enable SSL Proxying", or add *:443 under Proxy > SSL Proxying Settings. |
| 尽管证书有效,应用程序仍显示连接错误 | 该应用程序实现了硬编码的 SSL 证书固定(例如 OkHttp 的 CertificatePinner)。 | 结合 SSL 解绑脚本(例如 frida-multiple-unpinning)使用 Frida,以动态禁用证书哈希校验。 |
法国
新加坡
印度
常见问题解答
为什么在设置好 Charles Proxy 后,Android 会显示“无网络”?
出现这种情况通常是因为 Charles Proxy 未运行、计算机防火墙阻止了 8888 端口的入站连接,或者您的 Android 设备未连接到完全相同的 Wi-Fi 子网。 请核对计算机的本地 IP 地址,确保 Charles 正在运行且已在连接提示中点击“允许”,并在 Windows Defender 或 macOS 应用程序防火墙中允许 8888 端口。
为什么在 Charles Proxy 中 HTTPS 请求会因 SSL 握手错误而失败?
自 Android 7.0(API 级别 24)起,Android 应用默认不信任用户安装的 CA 证书。 虽然在安装证书后 Chrome 仍可浏览 HTTPS 网站,但原生应用会抛出 SSLHandshakeException 异常,除非该应用包含一个信任用户证书的 network_security_config.xml 文件,或者在已获取 root 权限的设备或模拟器上将证书移入系统信任存储库。
如果 chls.pro/ssl 无法打开,该如何下载 Charles 证书?
在手机浏览器中打开 chls.pro/ssl 之前,您必须将 Android 设备的 Wi-Fi 代理配置为指向 Charles(计算机 IP 地址和端口 8888)。Charles 会拦截此特定域名,并提供其根证书。 或者,在电脑上的 Charles 中,依次选择“帮助”>“SSL 代理”>“保存 Charles 根证书”,通过 USB 或 adb 将 .pem 或 .crt 文件传输到手机上,然后进行安装。
在 Android 11、12、13、14 和 15 中,CA 证书的安装选项在哪里?
在 Android 11 及更高版本中,点击证书文件不再会直接安装该证书。请打开“设置” > “安全”(或“安全与隐私”) > “更多安全设置” > “加密与凭据” > “安装证书” > “CA 证书”。 在安全警告中点击“仍要安装”,使用 PIN 码/指纹进行身份验证,然后从“下载”文件夹中选择已下载的 getssl.crt 文件。
如何将 Charles Proxy 与 PXM2 4G/5G 移动代理串联使用?
在 Charles 中,进入“代理”>“外部代理设置”。勾选“使用外部代理服务器”,选择“Web 代理 (HTTP)”和“安全 Web 代理 (HTTPS)”,输入您的 PXM2 代理主机名和端口(例如 gate.pxm2.io:8000),勾选“外部代理需要身份验证”,并输入您的 PXM2 凭据。来自您的 Android 设备的所有出站流量都将通过 Charles 进行本地检查,并经由真实的移动运营商蜂窝网络 IP 地址发出。
相关移动代理指南
浏览 PXM2 网络中关于编程语言、操作系统和自动化平台的安装教程。
平台与操作系统指南
开发人员与自动化指南
通过真实的 4G/5G 运营商 IP 地址测试移动应用
将本地 Charles 调试功能与覆盖 40 多个国家的专用移动运营商调制解调器相结合。提供无限流量、即时轮换端点,且数据中心 IP 地址绝不会被封禁。
获取移动代理