ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Mac下Charles抓包全攻略:HTTPS证书配置与手机调试实战

Mac下Charles抓包全攻略:HTTPS证书配置与手机调试实战 最近后台好几条私信都在问同一件事Mac 上到底怎么正经把 Charles 用起来。说实话Windows 上大家抓包习惯开 Fiddler换到 Mac 之后要么工具没下文了要么用起来很别扭。Charles 算是这个领域里为数不多让 Mac 用户体验比较顺畅的抓包工具尤其在前后端联调、小程序调试、移动端 App 排查网络请求时几乎绕不开它。这篇东西我不打算写成照搬官网的说明书而是按我在 Mac 上从下载、安装、证书配置到手机抓包的真实流程来写把每一步背后的逻辑说清楚顺手把常见报错和坑也一起列出来。内容适配新手也欢迎老手指正。文章会覆盖 Charles 的核心定位、Mac 下的安装细节、HTTPS 证书信任、手机端抓包、高频问题排查以及我自己日常最常用的几个效率功能。如果你正在准备接手一个需要大量网络调试的活或者刚被 Mac 上的抓包配置折磨了一下午这篇可以直接帮你省掉那些弯路。1. 为什么在 Mac 上抓包大家都会提到 Charles1.1 抓包这件事到底在抓什么抓包工具解决的是一个很实际的困惑当你在浏览器里打开一个网页或在手机上点了一下登录按钮你的设备和服务器之间到底发生了什么前端参数有没有传对后端返回了什么字段哪个请求耗时最长这些问题如果没有抓包工具几乎只能靠猜。抓包的原理说白了就是中间人模式。你的请求原本是直接发给服务器的开启抓包后Charles 会先拦截下来再替你把请求转交出去。服务器返回的数据同样先经过它再回到你的客户端。通过这种“转手”的方式你能完整看到请求的 URL、请求头、请求体、响应状态码、响应内容、耗时、Cookie 等信息。所以抓包工具能做的事远不止“看数据包”这么简单。它可以在请求发出前打断修改参数再放行也可以把线上接口响应直接映射到本地测试数据还能在弱网环境下模拟高延迟、高丢包的极端场景。这些能力合在一起基本覆盖了前后端联调、接口排查、安全测试、逆向分析等场景。1.2 Charles 与 Fiddler一次清晰对比很多人会问Fiddler 在 Windows 上是神器到了 Mac 上是不是也得配上。这里有一个最容易踩的认知误区。经典版 Fiddler 是基于 .NET Framework 的老牌工具很长时间里只在 Windows 上表现良好Mac 上要么跑虚拟机要么忍受兼容问题。后来官方推出了 Fiddler Everywhere虽说已经跨平台但使用时需要登录账号在部分大型项目中授权策略也没那么灵活。Charles 则是基于 Java 开发的跨平台抓包工具天生就很适合 macOS 环境。它的界面逻辑和操作方式在 Mac 上融入得比较自然软件体积也不大日常维护成本低。我自己在 Mac 上两款工具都用过一段时间Adobe 类软件那种巨大的界面差异不谈单说抓包这个核心场景Charles 的会话列表更清晰请求体格式化展示更好用证书管理能力也更直观。对比项CharlesFiddler Everywhere跨平台表现原生跨平台Mac 体验稳定跨平台但部分 UI 和登录逻辑偏繁琐默认代理端口88888866HTTPS 配置一键安装根证书证书管理清晰需要逐平台信任步骤略多会话管理按域名/接口维度分组直观会话树形结构稍显混乱常用高级功能Map Local、Rewrite、断点、弱网模拟类似功能也具备但部分需脚本辅助一句话总结在 Mac 上做抓包、网络调试Charles 是多数场景下更省心的选择。这不是说 Fiddler Everywhere 不好而是 Charles 的学习资料多、生态成熟遇到问题更容易找到答案。2. Charles 在 Mac 上的下载与安装流程2.1 安装前确认环境Java 这个历史遗留问题老版本的 Charles通常指 4.5 及更早版本依赖 Java 运行环境不少 Mac 用户在双击打开后弹出一个无法运行的提示就是缺 Java 导致的。如果你也拿到了老版本安装包需要先去确认系统里有没有 Java。Mac 上查看 Java 版本的方式很简单打开终端输入java -version如果提示找不到 java说明没有安装。去 Oracle 官网或通过 Homebrew 安装 OpenJDK 都可以。我个人更推荐 Homebrew 方式brew install openjdk17但这里要说一个关键细节从 Charles 4.6 版本开始官方已经把 Java 运行时打进了安装包你在 Mac 上装新版 Charles 时不需要再单独为它装 Java。这极大降低了新手的配置门槛。我在日常操作中基本不额外关注 Java 环境用的就是官方最新稳定版。提示如果你在安装过程中看到与 Java 相关的报错先确认下载的是不是官网最新版。如果必须用老版本再考虑装 Java否则别把时间浪费在环境配置上。2.2 下载 DMG 安装包并完成安装Charles 的官方下载地址是 charlesproxy.com进入页面后找到 Download 区域选择 macOS 对应的版本即可。下载下来的是一个 .dmg 镜像文件双击打开后会出现一个简洁的安装窗口里面是 Charles 图标和一个 Applications 快捷入口。标准操作是把 Charles 图标拖进 Applications 文件夹。这一步看似简单但有两个细节值得注意。第一如果系统提示“无法打开因为来自身份不明的开发者”不要慌。这不是安装包坏了而是 macOS 的 Gatekeeper 安全机制在起作用。打开“系统设置 - 隐私与安全性”在页面下方找到“仍要打开”的按钮确认即可。具体路径在 macOS Catalina 及更早版本中是“安全性与隐私”在 Monterey 及之后版本中叫“隐私与安全性”。第二不建议直接双击在 dmg 里运行 Charles尽量拖入 Applications 固定安装。因为很多功能需要 Charles 在后台持续运行如果每次从 dmg 打开挂载管理会干扰后续的证书信任和代理设置。安装完成后从启动台打开 Charles界面是一个带有两级会话列表的主窗口。首次打开时可能会弹一个关于网络权限的访问提示务必点击允许否则后续抓包会一直失败。2.3 首次启动与试用许可说明Charles 是一款商业软件下载安装后默认提供 30 天免费试用。试用期结束后仍能打开界面但每次启动会有等待倒计时部分高级功能会被限制。很多人在这里会动一些“歪心思”但我建议所有用 Charles 做正经开发、测试、学习的朋友都先老老实实走一遍官方试用流程。理由很简单你用它调试接口、排查线上问题、服务客户项目这些场景都涉及生产环境和他人数据用不正规渠道的工具版本不仅软件时效性无法保证后续升级、证书、功能异常都很难排查。独立开发者靠软件授权养活自己该支持的支持一下商业版本费用也不高。试用的主要限制是会话保存和部分高级配置不能长期使用但基础的抓包、代理、SSL 解密是完整的。你可以用试用期完整评估它是否适合自己的工作流。在进入下一节之前补一个时间线参考Charles 在 macOS 10.15Catalina时代与 macOS 13、14 上的表现差异不大核心功能稳定。如果你用的是 Apple Silicon 芯片现在新版本默认支持不需要 Rosetta 转译。3. 真正的核心配置 HTTPS 抓包与手机抓包3.1 打开代理并捕获浏览器请求安装完 Charles 后第一次打开它并不会自动抓包需要先把系统代理点亮。正常安装后Charles 会在 Mac 上自动配置系统代理默认监听 8888 端口。你可以在 Charles 的菜单栏看到Proxy - macOS Proxy选项确保它是勾选状态。勾选之后用 Chrome 或 Safari 访问任何一个 HTTP 网站回到 Charles 主界面就会看到请求列表迅速滚动。每一行代表一个请求点击可以看到完整详情包括 URL、Method、Status、请求头、响应体、Content-Type 等。这个阶段能抓到 HTTP 请求但查看 HTTPS 请求的内容时会发现只显示 CONNECT 字样看不到具体域名和请求参数。原因在于 HTTPS 流量是加密的Charles 默认不会主动解密。要让 Charles 以“中间人”身份读懂加密内容需要完成证书安装和信任操作这是整个 Charles 使用中最容易出问题的一环。3.2 安装并信任 Charles 根证书三步走别跳步很多人遇到的“you may need to configure your browser or application to trust the Charles Root Certificate”提示就是在证书这一步踩了坑。这里先说清楚思路Charles 作为中间人需要向客户端浏览器或手机出示一个它能验证的证书这个过程依赖于一个根证书。Charles 会动态为每个 HTTPS 站点生成一张证书而这张证书由 Charles Root Certificate 签名。如果你的系统或浏览器不信任这个根证书客户端就会报警告或直接中断连接。Mac 上安装 Charles 根证书的正确路径是第一步生成证书。在 Charles 菜单栏点击Help - SSL Proxying - Install Charles Root Certificate。这里会弹出钥匙串访问窗口并自动定位到证书项。第二步修改信任策略。找到列表中名为Charles Proxy CA或类似名称的证书双击打开详情。在“信任”下拉列表中选择“始终信任”然后关闭窗口输入 Mac 密码确认。这一步不能省很多人只点击了“安装”就以为完事了但实际上证书默认不被信任浏览器依然会报错。第三步验证。用 Chrome 访问任意 HTTPS 网站点击地址栏左侧的小锁图标查看证书是否显示“由 Charles 颁发”。同时打开 Charles确认某些 HTTPS 请求不再显示 CONNECT而是能看到完整的域名和参数。注意在 macOS Catalina 及之后的版本中证书信任弹窗出现的次数可能不止一次。如果首次安装后系统没有弹出信任确认去钥匙串访问中重新设置即可不用反复重装证书。这里顺带说明一下新版与旧版系统的差异。macOS 10.15 之后的钥匙串访问界面叫“钥匙串访问Keychain Access”在“登录”钥匙串类别中找证书。有些教程会建议把证书安装到“系统”钥匙串但实测在“登录”钥匙串中设置始终信任也完全可行优先跟随当前系统默认行为即可。另外如果你在做 iOS 真机抓包还需要手机端也安装并信任 Charles 证书这部分在下一小节展开。3.3 手机上抓包证书与代理两步走移动端抓包几乎是 Charles 的核心场景。许多前端联调、测试环境下电脑上的浏览器请求无法复现手机 App 里的真实状态这时候需要把手机流量转发到 Charles。手机抓包需要满足几个前提手机和 Mac 连接同一个局域网手机上 WiFi 代理指向 Mac 的 IP 地址Charles 的 SSL Proxying 配置能覆盖你要访问的域名手机信任了 Charles 根证书。先说代理配置。在 Mac 终端输入ipconfig getifaddr en0查看当前局域网 IP如果你走的是其他网口网卡名称可能不同。然后在手机 WiFi 设置里找到“配置代理”改为“手动”服务器填 Mac 的 IP端口填 8888保存后 Charles 会收到来自手机的连接。再说证书安装。需要用手机浏览器访问http://chls.pro/ssl下载并安装 Charles 证书。iOS 用户在下载完成后还需去设置 - 通用 - 关于本机 - 证书信任设置中开启“针对根证书启用完全信任”。Android 用户则会遇到一个重要分水岭Android 7.0 及以上版本默认不信任用户证书很多 App 即使安装了证书也无法解密流量这是系统安全策略不是 Charles 的问题。针对 Android 7.0 的限制常规解决办法是把证书安装到系统证书目录这需要 Root 权限。如果测试机不能 Root只能选择调试包或修改目标 App 的网络安全配置。很多测试团队会准备一台专属的 Android 测试机专门处理证书问题这是最省事的方案。iPhone 用户相对轻松iOS 14 之后的信任路径基本稳定只要在“证书信任设置”中开启开关多数场景都能顺利解密。但要注意某些 App 启用了证书固定机制SSL Pinning即使系统信任了 Charles 证书App 内部校验时仍会拒绝连接。这种情况需要在 App 内关闭证书校验或结合 Hook 工具处理属于进阶话题这里先不展开。配置完手机代理和证书后在 Charles 弹出的连接确认弹窗上点击 Allow之后手机上的网络请求会实时出现在 Charles 会话列表中。利用底部工具栏的 Filter 输入框可以直接按域名筛选快速定位目标接口。4. Mac 上使用 Charles 高频问题排查4.1 无法连接代理端口冲突与环境变量问题最常见的问题是 Charles 显示连接失败浏览器打不开网页或手机上所有 App 都无法联网。这时候优先检查 8888 端口是否有其他程序占用。在终端执行lsof -i :8888如果输出结果显示被其他 PID 占用要么结束该进程要么在 Charles 中更换代理端口。端口修改位置在Proxy - Proxy Settings - Proxies把 HTTP Proxy 端口改成 8899 之类的可用端口同时记得同步修改手机端的代理端口。另一个隐蔽的坑是系统代理环境变量。Mac 上某些网络代理工具如各类网络调试工具、命令行代理脚本会修改 http_proxy 和 https_proxy 环境变量导致流量被转发到错误地址。在终端检查env | grep -i proxy如果存在系统级代理变量建议先清理掉再启动 Charles避免两个代理互相抢流量。4.2 证书已安装还是提示不受信任前面提过证书信任的问题是高频踩坑点。很多人在钥匙串里看到证书显示小蓝叉或显示“此证书不受信任”第一反应是重装。其实问题未必在证书本身而是“始终信任”策略没有被正确应用。正确做法是打开钥匙串访问搜索 Charles双击证书在信任一栏里确认SSL和X.509 基本策略都变成“始终信任”。如果修改完没生效可以右键证书“删除”然后重新执行一次Install Charles Root Certificate再重新设置信任。另一个容易被忽略的细节是时间同步。如果 Mac 或手机的系统时间不对客户端在证书有效期校验时会认为证书过期或尚未生效直接判定不受信任。遇到证书看着没问题、但浏览器总报错的情况先检查设备时间是否准确。4.3 手机抓包时请求时有时无甚至完全抓不到手机已连接代理但 Charles 没有任何请求流入优先排查以下三个环节。第一手机和 Mac 是否真的在同一个网段。不少公司或公共网络存在 AP 隔离接入点隔离机制即使是同一个 WiFi设备之间也无法通信。表现就是手机配置完代理后所有网络请求全部超时。这种场景下需要把 Mac 用网线直连路由器或改成同一个热点网络否则代理从物理路径上就走不通。第二手机 WiFi 代理是否保存成功。很多手机在输入 IP 和端口后需要回到上一页点保存。部分定制 Android 系统会在保存代理的同时把“自动配置”重新打开导致手动代理配置被覆盖看起来配置了实际却走了直连。第三Charles 有没有弹出连接设备授权。每次有新的手机 IP 接入时Charles 都会弹出一个是否允许连接的提示框。被误点了 Deny 的设备会一直无法使用代理服务需要在Proxy - Access Control Settings中把设备 IP 重新加入允许列表。4.4 浏览器报错 CONNECT 或证书名称错误浏览器访问 HTTPS 网站时如果看到 CONNECT 行但没有具体域名、参数被解密通常是 SSL Proxying 设置没有包含目标域名。Charles 的默认策略不会解密所有域名需要在Proxy - SSL Proxying Settings中勾选 Enable SSL Proxying并在 Location 列表中添加*:443表示所有域名的 443 端口或指定域名加端口。这里顺带提醒一句不要以为勾选了 Enable SSL Proxying 就万事大吉还需要确认弹出的权限提示允许 Charles 添加根证书。如果当前系统没有安装受信任的 Charles 根证书即使启用了 SSL Proxying 也会看到各种证书错误。两者是串联关系缺一个都破不了 HTTPS。另一个常见现象是 Charles 所有的请求都显示为unknown host。这通常说明手机或浏览器的代理已经生效但 Charles 无法解析域名。检查 Mac 的 DNS 设置是否正常或在 Charles 的Proxy - Proxy Settings - DNS中切换 DNS 解析方式。报错/现象优先排查方向参考操作浏览器无法打开网页系统代理被其他工具抢占清理 proxy 环境变量检查系统代理设置HTTPS 请求只显示 CONNECTSSL Proxying 未开启或域名未覆盖添加*:443勾选 Enable SSL Proxying手机连接后无流量AP 隔离、代理未保存、设备未授权确认同网段重设代理授权设备证书提示不受信任信任策略未设置或系统时间错误钥匙串中始终信任校准时间所有请求显示 unknown hostDNS 解析异常检查 Mac DNS 或 Charles DNS 设置5. 实战效率心得让 Charles 越用越顺手5.1 新手建议先做一次环境自查如果你在一台新 Mac 上第一次使用 Charles我建议按以下顺序做一遍环境自查能省掉后面调试过程中的大部分干扰。确认系统里没有常驻代理工具或至少知道它们何时生效。Mac 上常见的网络代理插件、加速器、终端代理脚本都会改变系统代理状态一旦和 Charles 并存流量走向会变得不可控。最简单的办法在正式抓包时暂时退出其他代理相关软件。确认 Charles 的系统代理是开启状态。菜单栏Proxy - macOS Proxy打勾。然后确认Proxy - SSL Proxying Settings中已经勾选 Enable SSL Proxying最好先添加一个*:443作为广度覆盖。新手阶段不建议一开始就把域名限定得太死避免排查问题时漏掉某些请求。安装并信任根证书。这一点前面反复强调做完也别急着关钥匙串顺手再点开证书详情看一眼“始终信任”有没有生效。如果显示的还是“使用系统默认”哪怕重启 Charles 也没用必须手动改。手机抓包时先确保电脑端浏览器抓包已经通了再上手机。很多新手一上来就拿着手机折腾报错后也不确定是电脑端问题还是手机端问题排查成本直线上升。先用电脑抓通再连手机逐步增加变量定位会顺利得多。5.2 我最常用的几个功能开关与写法Charles 的功能不止抓包查看以下几个是我在日常联调和测试中使用频率最高的配合快捷键操作能明显提速。第一个是断点Breakpoints。在请求或响应上右键选择 Breakpoints该请求被再次触发时会自动进入编辑状态可以修改请求头、参数、响应体后再继续。这个功能在模拟异常返回、临时修改字段值进行场景测试时很实用。断点激活后菜单栏Proxy - Breakpoints可以看到当前所有断点列表方便集中管理。第二个是 Map Local。当后端接口还没开发完或者测试环境数据无法完整模拟时把线上接口的响应映射到本地 JSON 文件是最快的联调方式。右键一个请求选择Map Local本机会默认生成一个和响应内容相同的文件你可以随意改写里面的字段之后每次请求这个 URL 都会直接读取本地文件内容。第三个是重写Rewrite。Rewrite 功能可以按规则修改请求或响应的固定字段适合批量替换测试环境 URL、修改头部信息、强制某些参数值。比断点更自动化不用每次手动编辑。第四个是弱网模拟。菜单栏Proxy - Throttle Settings中可以设置上行/下行带宽、延迟时间、丢包率。移动端 App 在弱网环境下的加载表现、超时逻辑很多问题都要靠这个功能来复现。默认配置里预设了 3G、4G、WiFi 等常见档位也可以自定义参数。还有一个容易被忽略的小功能底部 Filter 输入框。大型项目里请求量非常大直接靠眼睛在会话列表中翻找目标接口效率太低。输入接口路径的关键词列表会实时过滤这个动作几乎是我每次打开 Charles 后的固定操作。5.3 关于手机 HTTPS 抓包的三条经验补充如果你主要做小程序、App 或混合应用调试手机端抓包频率很高再补三条经验。第一条iOS 上安装完描述文件后一定要去“证书信任设置”里打开开关。很多 iOS 新手只做到下载并安装描述文件回到 Charles 仍然看到 CONNECT 或证书报错就是漏掉了最后一步。这个开关的位置在“设置 - 通用 - 关于本机 - 证书信任设置”找到 CHARLES PROXY CA启用完全信任。第二条Android 上不要执着于所有 App 都能解密。现在主流 App 普遍启用了证书固定系统层面信任用户证书也不代表 App 会信任。测试时优先处理自己团队开发和测试包第三方的 App 抓不到别硬磕。具体 App 的处理逻辑往往涉及逆向已经不是 Charles 配置能解决的范畴。第三条如果你切换了网络环境比如从公司 WiFi 换到手机热点Charles 的代理授权列表可能不再匹配新 IP需要重新允许一次。这不是故障是机制。遇到手机突然抓不到包先回看Proxy - Access Control Settings里的设备列表把当前 IP 加进去。6. 一些最后想说的话Charles 在 Mac 上的配置说到底是“下载安装、开启代理、信任证书”这三板斧。前三步做得干净利落后面的使用体验会非常顺滑反过来如果在证书信任和代理设置上马马虎虎排查起来会让人非常崩溃。我自己第一次在 Mac 上配 Charles 的时候就在系统代理和证书信任上花了一整个晚上后来想明白整个代理链路由“客户端 - Charles - 服务器”构成每一步负责什么、为什么需要信任证书问题就变得很清晰了。如果你看完这篇文章对某个步骤还有卡点先把整条链路画一遍再对照每一步的验证方法去检查大概率能定位到问题所在。愿你的抓包之路少一些“下一个窗口”多一点“一次通过”。
返回列表