4 min read

Charles抓HTTPS显示Unknown?一篇搞定解决方案

Charles抓HTTPS显示Unknown?一篇搞定解决方案

Charles抓HTTPS显示Unknown?一篇搞定解决方案

详细步骤指导,让你轻松解决Charles抓包难题

问题核心原因

Charles 作为一个中间人,需要让你电脑(Charles)目标设备(手机/浏览器) 都信任它自己的根证书,才能成功解密 HTTPS 流量。当显示 "Unknown" 时,通常意味着 SSL/TLS 连接的解密失败了。

解决方案(分步指南)

步骤一:在 Charles 中正确设置 SSL 代理

这是最关键的一步,确保 Charles 知道要对哪个域名的流量进行解密。

  • 打开 Charles,进入菜单:Proxy -> SSL Proxying Settings...
  • 勾选 "Enable SSL Proxying"
  • "Locations" 列表中,确保添加了你想要抓取的域名和端口。

推荐方法:

  • 最简单的方法(推荐新手): 添加一个通用规则。点击 "Add",在 "Host" 字段中输入 *,在 "Port" 字段中输入 443,点击 "OK"
  • 更精确的方法(推荐): 针对特定域名添加规则,例如 api.example.com,端口 443

小技巧: 在 Charles 的主界面,右键点击显示为 "Unknown" 的请求,选择 "Enable SSL Proxying",它会自动为你完成上述添加规则的操作。步骤二:在目标设备上安装并信任 Charles 根证书

如果你的电脑浏览器访问 HTTPS 站点正常,但手机 App 的流量还是 "Unknown",那么 99% 的问题出在手机对证书的信任上。

对于手机(iOS / Android):

  • 确保电脑和手机在同一局域网。
  • 在手机上,配置好 HTTP 代理,指向你的电脑 IP 和 Charles 端口(默认为 8888)。
  • 在手机的浏览器中,访问 chls.pro/sslcharlesproxy.com/getssl

【极其重要】安装后,必须去系统设置中"完全信任"该证书!

  • iOS: 进入 设置 > 通用 > 关于本机 > 证书信任设置。找到名为 "Charles Proxy…" 的证书,打开开关以完全信任它。这是 iOS 10.3 之后必须的步骤,否则证书无效。
  • Android: Android 6及以下安装后通常即可。Android 7+ 应用可以选择只信任系统预装的证书,你可能需要将 Charles 证书安装到系统证书库,但这通常需要 Root 权限。

步骤三:在电脑上安装并信任 Charles 根证书

如果你要抓取自己电脑上浏览器(如 Chrome, Safari)的 HTTPS 流量,也需要在电脑上安装证书。

  • 在 Charles 中,进入菜单:Help -> SSL Proxying -> Install Charles Root Certificate
  • 系统会打开钥匙串访问(Mac)或证书管理器(Windows)。
  • 找到名为 "Charles Proxy…" 的证书,并将其设置为"始终信任"。

操作方法:

  • Mac: 在"钥匙串访问"中,找到该证书,双击打开,在"信任"部分,将"使用此证书时"设置为"始终信任"。
  • Windows: 在证书管理器中,将证书导入到"受信任的根证书颁发机构"。

步骤四:处理特殊情况——证书锁定

如果以上步骤都正确无误,但某个特定的 App(如银行类 App、微信等)的流量仍然是 "Unknown",那么这个 App 很可能使用了 "SSL Pinning"(证书锁定)

证书锁定意味着 App 内部只信任它自己预设的证书,而不信任用户安装的 Charles 证书,从而主动阻止了 Charles 的中间人攻击。

解决证书锁定更复杂,可能需要:

  • 越狱(iOS)或 Root(Android)手机。
  • 使用 Frida、Xposed 等高级工具来 Hook App 的 SSL 验证逻辑。
  • 对于测试,可以尝试寻找该 App 的测试版或开发版,它们可能关闭了证书锁定。

快速检查清单

Charles SSL Proxying 已启用,并为目标域名(或 *:443)添加了规则。☐ 手机已正确安装 Charles 根证书(通过 chls.pro/ssl 下载)。☐ 【iOS 必做】在"证书信任设置"中已完全信任 Charles 证书。电脑浏览器抓包时,已在钥匙串/证书管理器中将 Charles 证书设置为"始终信任"。重启了 Charles 和目标 App(有时缓存会导致问题)。建议: 请按照这个流程操作,绝大部分 "Unknown" 问题都能迎刃而解。如果还有问题,请检查你卡在了哪一步,以及你是在抓取什么设备(手机/电脑)和什么应用(浏览器/特定App)的包,这样可以更容易定位问题所在。