如何使用Charles Proxy进行HTTP/HTTPS抓包 – wiki基地


揭秘网络通信:Charles Proxy HTTP/HTTPS 抓包实战指南

在现代软件开发、网络调试和安全分析中,深入了解应用程序与服务器之间的通信细节至关重要。无论是前端工程师调试 AJAX 请求,后端工程师分析 API 调用,移动开发者排查 App 网络问题,还是安全专家审查数据传输,一款强大的代理抓包工具都是不可或缺的。在众多工具中,Charles Proxy 凭借其直观的用户界面、强大的功能集以及对 HTTP 和 HTTPS 的全面支持,成为了许多专业人士的首选。

本文将为你提供一份详尽的 Charles Proxy 使用指南,从基础安装到复杂的 HTTPS 配置,再到高级功能的应用,带你一步步掌握这款强大的网络调试利器。

引言:什么是 Charles Proxy?为何选择它?

Charles Proxy 是一款基于 Java 开发的跨平台(Windows, macOS, Linux)HTTP 代理服务器和监视工具。它的核心功能是作为你计算机(或连接的设备)与互联网之间的中间人(Man-in-the-Middle),拦截并记录所有流经它的 HTTP 和 HTTPS 网络流量。

为何选择 Charles Proxy?

  1. 易于上手: 相比命令行工具,Charles 提供了图形化界面,让网络请求和响应一目了然。
  2. 强大的功能: 除了基本的抓包和查看功能,Charles 还提供了请求重放、修改(Rewrite)、断点(Breakpoints)、弱网模拟(Throttling)、本地文件映射(Map Local)、远程地址映射(Map Remote)等高级特性,极大地提高了调试效率。
  3. HTTPS 支持: 通过安装其根证书并启用 SSL Proxying,Charles 可以解密并查看加密的 HTTPS 流量,这是进行现代化 Web 和 App 开发调试的必备能力。
  4. 跨平台: 无论你使用什么操作系统,Charles 都能提供一致的体验。
  5. 移动设备支持: 轻松配置手机或平板电脑通过 Charles 代理上网,抓取移动应用的通信数据。

掌握 Charles Proxy,意味着你拥有了一双透视网络通信的“X光眼”,能够清晰地看到数据是如何流动、被处理以及可能出现问题的环节。

第一步:安装与初步了解

首先,你需要从 Charles Proxy 的官方网站下载适合你操作系统的版本并进行安装。Charles 是一个商业软件,提供免费试用期。试用期过后,你可以选择购买许可证,或者在免费模式下继续使用,但每次使用时长会有限制(通常为 30 分钟),且启动时会有延迟提示。对于学习和非频繁使用而言,试用模式已足够。

安装过程通常非常简单,按照安装向导的提示一步步操作即可。安装完成后,启动 Charles Proxy。

初识 Charles UI

启动 Charles 后,你会看到一个主界面,主要包含以下几个区域:

  1. 菜单栏 (Menu Bar): 提供文件操作、编辑、视图、代理设置、工具、帮助等功能入口。
  2. 工具栏 (Toolbar): 常用功能的快捷按钮,如清除会话、开始/停止抓包、启用/禁用代理、启用/禁用 Throttling、启用/禁用 Breakpoints 等。
  3. 会话窗口 (Session Window): 这是 Charles 最核心的区域,显示了捕获到的所有网络请求。默认情况下,它会分成两部分:
    • Structure (结构视图): 按 Host(域名/IP地址)分组显示请求,适合查看某个网站或服务的所有相关请求。
    • Sequence (序列视图): 按时间顺序线性显示所有请求,适合追踪操作流程中的网络活动。
  4. 请求/响应详情窗口 (Request/Response Viewer): 当你在会话窗口选中一个请求时,这个区域会显示该请求的详细信息,包括:
    • Overview (概览): 请求的基本信息,如 URL、方法、状态码、协议等。
    • Headers (头部): 请求和响应的 HTTP 头部信息。
    • Body (主体): 请求和响应的主体数据,Charles 会根据内容类型(如 JSON, XML, HTML, Text, Image 等)提供不同的视图和格式化选项。
    • Summary (总结): 请求的时间、大小等统计信息。
    • 还有其他一些高级视图,如 Notes, Charts, Cookies, Cache 等。

HTTP 抓包:开箱即用

对于未经加密的 HTTP 请求,Charles 通常可以做到“开箱即用”。启动 Charles 后,如果你的操作系统和浏览器配置了使用系统代理(大多数情况下默认就是),Charles 会自动成为系统代理。此时,访问 HTTP 网站或使用 HTTP 协议的应用程序,你会看到请求和响应自动出现在 Charles 的会话窗口中。

  • macOS: Charles 启动时会提示是否自动配置系统代理,选择允许即可。
  • Windows: Charles 启动时通常会提示安装 Windows Proxy Helper,这有助于自动配置系统代理。允许安装即可。
  • 浏览器设置: 多数浏览器默认使用系统代理设置。如果需要手动配置,可以将代理服务器设置为 127.0.0.1 (或 localhost),端口设置为 Charles 的默认端口 8888

你可以尝试访问一个简单的 HTTP 网站(如果还能找到的话,比如 http://info.cern.ch)或使用一些非敏感的内部 HTTP 服务,观察 Charles 中出现的请求。在 Sequence 或 Structure 视图中找到对应的请求,点击查看其 Headers 和 Body。

第二步:HTTPS 抓包的核心与挑战

现代网络通信绝大多数都使用 HTTPS。HTTPS 在 HTTP 的基础上加入了 SSL/TLS 加密层,确保数据在传输过程中的机密性和完整性。这对于用户隐私和数据安全至关重要,但也给抓包带来了挑战:Charles 作为中间人,它无法直接查看加密后的数据。

为了实现 HTTPS 抓包,Charles 需要进行“SSL Proxying”,也就是扮演一个中间人的角色,解密来自客户端的请求,再加密发送给服务器;接收来自服务器的响应,解密后发送给客户端。为了让客户端(浏览器、App 等)信任这个中间人,Charles 需要一个特殊的设置:安装并信任 Charles 的根证书。

SSL Proxying 的原理

  1. 当客户端(例如你的浏览器)尝试访问一个 HTTPS 网站(例如 https://www.google.com)时,请求首先被导向 Charles Proxy。
  2. Charles 拦截到这个请求后,它不会直接转发给 www.google.com。相反,Charles 会“假装”自己就是 www.google.com,并生成一个针对 www.google.com 的 SSL 证书。
  3. 这个伪造的证书并不是由一个公共的、浏览器默认信任的证书颁发机构(CA)签发的,而是由 Charles 自己在安装时生成的根证书签发的。
  4. Charles 将这个伪造的证书发送给客户端。
  5. 如果客户端信任了 Charles 的根证书,它就会认为这个伪造的证书是合法的,建立加密连接(这个连接是在客户端和 Charles 之间)。
  6. 客户端通过这个连接将加密的请求发送给 Charles。Charles 接收后,使用 Charles 伪造证书对应的私钥解密请求,获取原始的 HTTP 数据。
  7. Charles 然后作为客户端,向真正的 www.google.com 发起一个标准的 HTTPS 请求。
  8. www.google.com 返回其真实的 SSL 证书,Charles 验证这个证书的合法性,然后与 www.google.com 建立另一个加密连接(这个连接是在 Charles 和服务器之间)。
  9. 服务器通过这个连接发送加密的响应给 Charles。Charles 接收后解密响应。
  10. Charles 再次加密这个响应(使用它伪造的证书),通过第一个加密连接发送给客户端。
  11. 客户端接收并解密响应。

在这个过程中,Charles 成功地充当了中间人,并且能够看到所有原始的 HTTP 请求和响应数据。客户端信任 Charles 根证书是整个过程的关键步骤。

第三步:配置 HTTPS 抓包 – 安装并信任 Charles 根证书

这是配置 Charles 抓取 HTTPS 流量中最重要、也是最容易出错的一步。你需要将 Charles 生成的根证书安装到你的操作系统或设备中,并明确告诉系统或设备“信任”这个证书,即使它不是由大家熟知的 CA 签发的。

步骤 1:获取 Charles 根证书

在 Charles 的菜单栏中选择 Help -> SSL Proxying -> Install Charles Root Certificate (macOS) 或 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser (获取证书下载地址)。

步骤 2:安装并信任证书(分不同平台)

a) 在 macOS 上安装并信任系统证书:

  1. 选择 Help -> SSL Proxying -> Install Charles Root Certificate
  2. 系统会打开“钥匙串访问”应用,显示 Charles Proxy 定制根证书。
  3. 双击该证书,打开证书详情窗口。
  4. 展开“信任”部分。
  5. 将“使用此证书时”的选项从“永不信任”改为“总是信任”。
  6. 关闭窗口,系统会提示你输入用户密码以保存更改。输入密码即可。
  7. 关闭并重新打开浏览器或其他需要抓包的应用程序,使更改生效。

b) 在 Windows 上安装并信任系统证书:

  1. 选择 Help -> SSL Proxying -> Install Charles Root Certificate
  2. 会弹出一个证书导入向导。
  3. 选择“将证书安装到指定存储位置”。
  4. 点击“浏览”,选择“受信任的根证书颁发机构”。
  5. 点击“确定”,然后点击“下一步”,完成导入。
  6. 可能会弹出安全警告,确认导入即可。
  7. 关闭并重新打开浏览器或其他需要抓包的应用程序。

c) 在 iOS 设备上安装并信任证书 (连接 Charles 后使用 Safari 访问指定地址):

  1. 确保你的 iOS 设备和运行 Charles 的电脑在同一个 Wi-Fi 网络下。
  2. 在 Charles 菜单中选择 Help -> Local IP Addresses 查看 Charles 运行的电脑的 IP 地址。
  3. 在 iOS 设备的 Wi-Fi 设置中,找到当前连接的 Wi-Fi 网络,点击详情 (ℹ️)。
  4. 配置 HTTP 代理为“手动”。
  5. 服务器填写 Charles 电脑的 IP 地址,端口填写 Charles 的默认端口 8888
  6. 保存设置。此时设备的网络流量就会通过 Charles。
  7. 在 iOS 设备上打开 Safari 浏览器,访问地址 chls.pro/ssl
  8. 会提示下载一个配置描述文件,点击“允许”。
  9. 下载完成后,打开设备的“设置”应用。
  10. 在顶部通常会看到“已下载描述文件”的选项,点击进入。
  11. 安装 Charles SSL Proxying 证书描述文件。
  12. 重要步骤 (iOS 10.3+): 安装完成后,证书并不会自动被信任。你需要进入 设置 -> 通用 -> 关于本机 -> 证书信任设置 (Settings -> General -> About -> Certificate Trust Settings)。
  13. 在“启用完全信任的根证书”列表中,找到 Charles Proxy 的证书,将其开关打开,选择“继续”。
  14. 现在 iOS 设备应该信任 Charles 根证书了。

d) 在 Android 设备上安装并信任证书 (连接 Charles 后使用浏览器访问指定地址):

  1. 确保你的 Android 设备和运行 Charles 的电脑在同一个 Wi-Fi 网络下。
  2. 在 Charles 菜单中选择 Help -> Local IP Addresses 查看 Charles 运行的电脑的 IP 地址。
  3. 长按当前连接的 Wi-Fi 网络,选择“修改网络”或类似选项。
  4. 展开高级选项,找到代理设置,选择“手动”。
  5. 代理主机名填写 Charles 电脑的 IP 地址,代理端口填写 Charles 的默认端口 8888
  6. 保存设置。此时设备的网络流量就会通过 Charles。
  7. 在 Android 设备上打开浏览器(推荐使用 Chrome),访问地址 chls.pro/ssl
  8. 证书文件 (.pem 或 .crt) 会被下载。
  9. 打开设备的“设置”应用,搜索“证书”或“信任的凭据”(Trusted credentials)。
  10. 选择“从存储设备安装”或“安装证书”。
  11. 找到刚刚下载的 .pem.crt 文件进行安装。
  12. 系统会要求你命名证书(可以随意命名,如 Charles)并选择凭据用途(通常是 VPN 和应用)。
  13. 重要步骤 (Android 7.0+): 从 Android 7.0 开始,用户安装的 CA 证书默认不再被应用信任,除非应用特意配置了信任用户证书。这意味着,对于很多 App,即使你安装了 Charles 证书,App 的 HTTPS 请求可能仍然无法被 Charles 解密,会看到 UnknownClient SSL handshake failed。抓取 App 流量可能需要更高级的手段(如 Root 设备 + Magisk 模块),但对于浏览器流量和一些未限制用户证书的应用,安装此证书是有效的。
  14. 安装过程中或之后,系统可能会要求设置锁屏 PIN 或密码,这是安装用户证书的要求。

常见问题:

  • 证书未被信任: 确保在证书信任设置中明确启用了对 Charles 根证书的信任。重启应用程序或设备有时能解决问题。
  • 看不到已下载的描述文件 (iOS): 如果安装描述文件失败,尝试在 Safari 中清除缓存和网站数据,然后重新访问 chls.pro/ssl
  • Android App 抓不到 HTTPS: 记住 Android 7.0+ 的限制,大部分 App 默认不再信任用户安装的 CA 证书。

第四步:启用 SSL Proxying

仅仅安装并信任证书是不够的,你还需要告诉 Charles 你希望对哪些域名启用 SSL Proxying。默认情况下,Charles 不会对任何 HTTPS 连接进行解密,以避免不必要的性能开销和潜在的兼容性问题。

  1. 在 Charles 菜单栏中选择 Proxy -> SSL Proxying Settings...
  2. 在弹出的窗口中,勾选 Enable SSL Proxying
  3. Include 部分,点击 Add 添加你需要抓取 HTTPS 流量的域名和端口。
  4. Host 字段填写域名(例如 api.example.com),Port 字段填写端口(通常是 443,如果未指定则默认是 443)。
  5. 如果你想抓取所有域名的 HTTPS 流量,可以添加一个条目:Host: * (或 *.*), Port: 443 (或空着表示所有端口)。注意: 抓取所有 HTTPS 流量可能会导致 Charles 性能下降,并可能影响一些底层系统的证书校验(尽管你已经信任了 Charles 证书)。建议只添加你需要调试的特定域名。
  6. Exclude 部分用于排除不需要进行 SSL Proxying 的域名,例如一些银行网站或对证书校验非常严格的服务,避免出现问题。
  7. 点击 OK 保存设置。

现在,当你访问你在 Include 列表中配置的 HTTPS 网站或使用相关的 App 时,你应该能在 Charles 中看到解密后的请求和响应内容了。在 Charles 中,解密成功的 HTTPS 请求会有一个绿色的锁图标,并且你可以正常查看其 Headers 和 Body。

第五步:高效利用 Charles 的高级功能

成功抓取到 HTTPS 流量后,Charles 的强大之处才刚刚展现。以下是一些常用且极大地提升调试效率的功能:

1. 过滤 (Filtering)

当你抓取大量流量时,会话窗口可能会非常杂乱。过滤功能可以帮助你快速定位目标请求。

  • 底部过滤栏: 在 Charles 窗口底部的 Filter 输入框中,你可以输入 Host、Path、Query 或它们的组合来过滤显示的请求。例如:
    • google.com: 只显示与 google.com 相关的请求。
    • api: 只显示 URL 中包含 “api” 的请求。
    • /users.*: 只显示路径以 /users 开头的请求。
    • baidu.com /s?wd=: 只显示访问 baidu.com 且路径以 /s?wd= 开头的请求。
  • 焦点模式 (Focus): 右键点击某个 Host 或路径,选择 Focus。Charles 会将所有不属于该焦点的请求变灰,只高亮显示焦点的请求。可以设置多个焦点。右键选择 Unfocus 取消。
  • 筛选设置 (Filter Settings): 在菜单栏 Proxy -> Filter Settings... 中,可以设置更复杂的过滤规则,如按协议、状态码、大小等过滤。

2. 查看请求/响应详情 (Viewing Details)

在会话窗口选中请求后,底部的详情窗口是分析流量的核心。

  • Headers (头部): 仔细检查请求和响应头部,如 Cookie, User-Agent, Referer, Cache-Control, Content-Type, Authorization 等,这些信息对于理解通信过程至关重要。
  • Body (主体): Charles 能自动识别常见的 Body 格式并进行格式化。
    • JSON/XML Text: 显示原始文本。
    • JSON/XML Tree: 以树状结构展示 JSON/XML 数据,方便查看层级和内容。
    • Form: 对于 application/x-www-form-urlencoded 类型的数据,以键值对列表展示。
    • Text: 以纯文本形式显示。
    • Hex: 以十六进制形式显示二进制数据。
    • Image: 如果响应是图片,直接显示图片。
    • 其他: 还有 Protobuf、AMF 等专业格式的支持。

利用这些视图,你可以清晰地看到请求发送了什么数据,服务器返回了什么数据。

3. 请求重发 (Repeat) 与 组合 (Compose)

  • Repeat: 在会话窗口中右键点击一个请求,选择 Repeat。Charles 会重新发送完全相同的请求。这对于测试接口的幂等性、服务器的缓存策略或重复触发某个操作非常有用。
  • Repeat Advanced: 提供了更高级的重发选项,可以设置重复次数、并发数、延迟等,适合进行简单的性能或稳定性测试。
  • Compose: 在会话窗口中右键点击一个请求,选择 Compose。Charles 会在新的标签页中打开一个请求编辑器,你可以随意修改请求的方法、URL、头部、主体等,然后点击 Execute 发送修改后的请求。这对于测试接口的不同参数组合、构造特定请求场景、或者在没有客户端代码的情况下直接测试 API 非常方便。

4. 断点 (Breakpoints)

断点功能允许你在请求发送到服务器之前或响应返回给客户端之前暂停流量,并可以修改请求或响应的任意部分。

  1. 在菜单栏选择 Proxy -> Breakpoints Settings... 或在工具栏点击断点图标启用全局断点。
  2. 在 Breakpoints Settings 窗口中,添加你需要设置断点的 Host 和 Path。你可以选择是拦截请求 (Request) 还是响应 (Response)。
  3. 当匹配设置的请求或响应发生时,Charles 会暂停,并在单独的 Breakpoint 窗口中显示详情。
  4. 在 Breakpoint 窗口,你可以查看和修改 Headers、Body 等内容。修改后点击 Execute 继续,或者点击 Abort 取消该请求。

使用场景:

  • 测试客户端在收到特定响应状态码或数据时的行为(修改响应)。
  • 在不修改客户端代码的情况下,修改发送给服务器的请求数据进行测试(修改请求)。
  • 观察请求发送前或响应返回前的最终状态。

5. 重写 (Rewrite)

Rewrite 功能允许你定义一组规则,Charles 会根据这些规则自动修改匹配的请求或响应,而无需手动干预(不像断点那样需要手动 Execute)。这是一种更持久、更自动化的修改方式。

  1. 在菜单栏选择 Tools -> Rewrite...
  2. 勾选 Enable Rewrite
  3. 点击 Add 添加一个 Rewrite Rule Set。
  4. 在 Rule Set 中,可以设置 Location(要匹配的 Host 和 Path)。
  5. Rules 部分,点击 Add 添加具体的修改规则。Rule Type 有多种,例如:
    • Add Header: 添加一个请求或响应头。
    • Remove Header: 删除一个头部。
    • Modify Header: 修改一个头部的值。
    • Add Query Param: 添加一个查询参数。
    • Remove Query Param: 删除一个查询参数。
    • Modify Query Param: 修改一个查询参数的值。
    • Body: 对请求或响应主体进行查找和替换(支持文本和正则表达式)。
    • Host: 修改请求的目标 Host。
    • Path: 修改请求的 Path。
  6. 配置好规则后,点击 OK 保存。匹配的请求/响应会按照规则被自动修改。

使用场景:

  • 线上环境调试:修改请求头(如添加特定的用户 ID)来模拟不同用户。
  • 接口版本切换:通过修改 Path 或 Host 将请求重定向到新版本的接口。
  • 数据Mock:修改响应 Body,返回假数据进行前端或客户端开发和测试。
  • 移除缓存头:移除响应中的缓存相关头部,强制客户端每次都请求最新数据。

6. 本地映射 (Map Local) 与 远程映射 (Map Remote)

映射功能可以将一个远程 URL 的请求重定向到本地文件或另一个远程 URL。

  • Map Local:

    1. 在菜单栏选择 Tools -> Map Local...
    2. 勾选 Enable Map Local
    3. 点击 Add 添加映射规则。
    4. Map From 部分填写要拦截的远程 URL (Host, Path, Query)。
    5. Map To 部分选择一个本地文件路径 (Local Path)。
    6. 点击 OK 保存。
      现在,当客户端请求匹配 Map From 的 URL 时,Charles 不会访问远程服务器,而是直接返回你指定的本地文件内容。

    使用场景: 前端开发时,将某个 JS、CSS 或 JSON 接口的请求映射到本地修改后的文件,无需部署即可看到修改效果。Mock API 响应。

  • Map Remote:

    1. 在菜单栏选择 Tools -> Map Remote...
    2. 勾选 Enable Map Remote
    3. 点击 Add 添加映射规则。
    4. Map From 部分填写要拦截的远程 URL (Host, Path, Query)。
    5. Map To 部分填写要重定向到的目标远程 URL (Host, Path, Query)。
    6. 点击 OK 保存。
      现在,当客户端请求匹配 Map From 的 URL 时,Charles 会将请求转发到 Map To 指定的 URL。

    使用场景: 将生产环境的某个 API 请求重定向到开发环境或测试环境的服务器。在不修改客户端配置的情况下,快速切换后端服务。

7. 网络限速 (Throttling)

Throttling 功能可以模拟不同的网络条件,帮助你测试应用程序在慢速、高延迟或不稳定的网络环境下的性能和用户体验。

  1. 在菜单栏选择 Proxy -> Throttle Settings...
  2. 勾选 Enable Throttling
  3. 你可以选择预设的限速模式(如 Dial-up, 3G, DSL 等),或者自定义上下行带宽、延迟、丢包率等。
  4. 你还可以选择 Only for specified Hosts,只对特定的域名进行限速,不影响其他网络流量。
  5. 点击 OK 保存设置。
  6. 在工具栏点击乌龟🐢图标可以快速启用/禁用限速。

使用场景: 测试 App 在弱网环境下的加载速度、错误处理、用户界面的响应性。前端性能优化时分析资源加载情况。

8. 发布 Gist (Publish Gist)

Charles 可以方便地将当前会话中的请求导出为文件或直接发布到 GitHub Gist,方便与他人分享调试问题或分析结果。

  • 在菜单栏选择 Tools -> Publish Gist...。你可以选择要发布的请求(所有或选中的),是否包含响应 Body 等。

第六步:移动设备抓包 – 详细设置

前面在配置 HTTPS 证书时已经初步涉及了移动设备的设置,这里再次强调和总结移动设备通过 Charles 抓包的完整流程。

  1. 电脑和手机连接同一 Wi-Fi: 这是最基础的要求。确保两者在同一个局域网内。
  2. 查看 Charles 运行电脑的 IP 地址: 在 Charles 菜单栏选择 Help -> Local IP Addresses...,找到电脑在当前 Wi-Fi 下的 IP 地址。
  3. 配置手机的 Wi-Fi 代理:
    • iOS: 进入 设置 -> Wi-Fi,点击当前连接网络旁边的信息图标 (ℹ️),在底部找到“配置代理”,选择“手动”,服务器填写 Charles 电脑的 IP 地址,端口填写 8888。保存。
    • Android: 进入 设置 -> 网络和互联网 -> Wi-Fi (路径可能因设备和系统版本不同),长按当前连接网络,选择“修改网络”,展开高级选项,找到代理设置,选择“手动”,代理主机名填写 Charles 电脑的 IP 地址,代理端口填写 8888。保存。
  4. 安装并信任 Charles 根证书 (HTTPS 必需):
    • iOS: 在手机上使用 Safari 访问 chls.pro/ssl 下载描述文件,然后到 设置 -> 已下载描述文件 中安装。安装后务必前往 设置 -> 通用 -> 关于本机 -> 证书信任设置 中手动开启对 Charles 根证书的完全信任。
    • Android: 在手机上使用浏览器访问 chls.pro/ssl 下载证书文件 (.pem 或 .crt)。然后前往 设置,搜索“证书”,选择“从存储设备安装”或“安装证书”,找到下载的文件进行安装。注意 Android 7.0+ 对用户证书的限制。
  5. 在 Charles 中允许连接: 当手机第一次通过 Charles 代理时,Charles 会弹出一个连接确认对话框,提示来自某个 IP 地址的设备请求连接。请选择 Allow
  6. 启用 SSL Proxying (HTTPS 必需): 同前面桌面端的设置,在 Charles 的 Proxy -> SSL Proxying Settings... 中添加需要抓包的域名和端口。

完成以上步骤后,你的手机上的网络流量就会通过 Charles,并且对于配置了 SSL Proxying 的 HTTPS 流量,Charles 也能够解密查看。

第七步:常见问题与故障排除

即使按照步骤操作,也可能会遇到一些问题。以下是一些常见的故障排除建议:

  • Charles 会话窗口中没有流量显示:
    • 确认 Charles 正在运行,并且工具栏上的抓包按钮(红色圆点)是亮的。
    • 确认你的系统或设备正确配置了使用 Charles 作为代理(IP: 127.0.0.1 或 Charles 电脑的局域网 IP,端口: 8888)。
    • 检查防火墙设置,确保没有阻止 Charles 的入站或出站连接。
    • 重启浏览器或 App,有时候程序会缓存代理设置。
  • HTTPS 流量显示为 UnknownClient SSL handshake failed
    • 证书问题: 确保 Charles 根证书已成功安装并被系统/设备信任。特别是 iOS 10.3+ 需要额外的信任步骤,Android 7.0+ 对用户证书有限制。
    • SSL Proxying 未启用: 确保在 Proxy -> SSL Proxying Settings... 中勾选了 Enable SSL Proxying,并且添加了要抓包的域名和端口到 Include 列表中。
    • 客户端固定证书 (Certificate Pinning): 某些 App 或网站为了更高的安全性,会采用证书固定技术,即在应用内部硬编码了服务器证书的公钥或哈希值。这种情况下,Charles 作为中间人提供的伪造证书将无法通过应用的校验,从而导致连接失败或显示错误。绕过证书固定通常需要更高级的技术,如 Root 设备、Xposed/Frida 框架等,超出了本文的范围。
    • 网络环境问题: 确保设备可以正常访问互联网,代理设置没有导致网络中断。
  • 抓包速度慢或 Charles 崩溃:
    • 如果抓取所有流量,可能会导致性能问题。尽量只对需要调试的域名启用 SSL Proxying 和其他高级功能。
    • 清除会话(工具栏的扫帚图标)可以释放内存。
    • 检查 Charles 的日志 (Help -> View Event Log) 获取更多信息。

结论

Charles Proxy 是一款功能全面、界面友好的网络抓包与调试工具。通过本文的详细介绍,你应该已经掌握了其核心功能:从基础的 HTTP 抓包到复杂的 HTTPS 配置,再到利用过滤、重写、断点、映射、限速等高级特性解决实际问题。特别是 HTTPS 抓包,它是进行移动应用和现代 Web 应用调试的关键一步,理解其原理并正确配置证书是成功使用的基础。

虽然 Charles 是一个商业软件,但其提供的强大功能和带来的效率提升对于任何从事网络相关工作的开发者、测试工程师或安全人员来说,都是物超所值的。不断实践和探索 Charles 的各项功能,你将能更深入地理解网络协议,更快地定位和解决问题,成为一名更高效的技术专业人士。

希望这篇详细的指南能够帮助你开启或深化你的 Charles Proxy 使用之旅!


发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部