一、问题背景
在使用 Charles Proxy 抓取 HTTPS 请求时,浏览器访问站点(如 CDN、接口域名)突然出现如下提示:
-
Chrome / Edge 地址栏显示 「不安全」
-
弹窗提示:
您与此网站之间建立的连接不安全
-
HTTPS 请求无法正常抓取或被浏览器拦截
即使:
-
已开启 Charles
-
已配置系统代理
-
HTTPS 之前是可以正常抓包


二、问题根因分析
1️⃣ HTTPS 抓包的本质
Charles 抓取 HTTPS 请求,本质是一个 中间人(MITM)代理:
浏览器 → Charles → 真实服务器
因此:
-
Charles 会动态签发站点证书
-
前提是:Charles Root CA 必须被系统信任
2️⃣ 真正的问题:Charles Root 证书过期
在 macOS 的「钥匙串访问」中,可以看到:
-
Charles Proxy CA -
该证书 存在
-
但:
-
❌ 已过期
-
或 ❌ 仍存在但未被完全信任

-
一旦 Root CA 过期或不被信任:
-
浏览器会直接判定 HTTPS 不安全
-
与具体访问的网站无关
-
Charles 也无法正常解密 HTTPS 流量
三、如何确认 Charles Root CA 是否过期
Step 1:打开钥匙串访问
应用程序 → 实用工具 → 钥匙串访问
Step 2:查看系统根证书
-
左侧选择:系统
-
上方切换到:证书
-
搜索:
Charles
Step 3:检查证书状态
重点查看:
-
是否存在 Charles Proxy CA
-
是否显示:
-
❌ 已过期
-
❌ 未标记为「始终信任」
-
如果已过期,必须更新。
四、正确更新 Charles Root 证书
⚠️ 不建议手动下载证书或从别人电脑拷贝
一定要通过 Charles 自身生成
✅ Step 1:删除旧的 Charles 证书
在「钥匙串访问」中:
-
选中 Charles Proxy CA
-
右键 → 删除
-
输入系统密码确认
如果有多个 Charles Proxy CA,全部删除
✅ Step 2:通过 Charles 重新安装 Root CA
打开 Charles Proxy,依次点击:
Help → SSL Proxying → Install Charles Root Certificate
-
macOS 会弹出证书安装提示
-
自动安装到系统钥匙串
✅ Step 3:将证书设置为「始终信任」
-
回到 钥匙串访问
-
双击 Charles Proxy CA
-
展开 信任
-
设置为:
使用此证书时 → 始终信任
- 关闭窗口,输入系统密码
✅ Step 4:重置 Charles 的站点证书缓存
在 Charles 中:
Help → SSL Proxying → Reset SSL Certificates
然后:
-
退出 Charles
-
重新打开
✅ Step 5:重启浏览器
-
Chrome / Edge:完全退出(⌘Q)再打开
-
Safari 同样建议重启
五、验证是否修复成功
-
打开 Charles
-
确保:
Proxy → SSL Proxying → Enable SSL Proxying -
访问 HTTPS 网站(接口 / CDN / 业务页面)
-
观察:
-
浏览器 🔒 恢复正常
-
Charles 中能看到 HTTPS 请求明文
-
六、常见补充问题
Q1:Chrome 还是提示不安全?
可额外尝试:
chrome://net-internals/#hsts
-
删除对应域名的 HSTS 记录
-
再重启浏览器
Q2:什么时候需要重新更新证书?
-
macOS 大版本升级
-
Charles 升级
-
Root CA 过期
-
钥匙串异常