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/ssl或charlesproxy.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)的包,这样可以更容易定位问题所在。