mac网页提示“证书已过期”但网站正常,主因是代理软件(如charles)根证书未被钥匙串正确设为“始终信任”或存在过期残留证书;需在钥匙串访问中搜索定位代理证书并设为始终信任,同时删除所有带红色❌的过期证书,最后执行sudo killall -hup trustd刷新信任缓存。
mac 上网页提示“证书已过期”,但实际网站正常,且你正在使用 charles、mitmproxy 或 fiddler 等代理软件——这大概率不是网站问题,而是代理证书未被系统正确信任或已失效。关键不在浏览器,而在钥匙串和系统信任链。
确认是否为代理证书引发的问题
先快速验证是不是代理在“背锅”:
- 临时关闭代理软件(如退出 Charles、停用 mitmproxy),刷新网页——若警告消失,基本锁定是代理证书问题
- 打开 Safari 或 Chrome,访问 http://chls.pro/ssl(Charles 官方测试页)或 http://mitm.it(mitmproxy 测试页),看能否正常下载并安装根证书
- 检查当前网络设置:系统设置 → 网络 → 你的 Wi-Fi/以太网 → 详细信息 → 代理,确认 HTTP/HTTPS 代理是否仍指向 127.0.0.1:8888 或类似端口(即使代理软件已关,系统代理设置可能残留)
检查并修复代理根证书的信任状态
代理软件需将自签名根证书注入系统钥匙串,并设为“始终信任”,否则 macOS 会拒绝验证其签发的 HTTPS 流量证书。
- 打开“钥匙串访问”,在右上角搜索框输入 Charles Proxy、mitmproxy 或 Proxy,定位到对应根证书条目
- 双击该证书 → 展开左侧“信任”→ 在“使用此证书时”下拉菜单中选择 始终信任
- 关闭窗口,输入管理员密码确认;成功后证书右下角应显示绿色➕,而非红色❌或黄色⚠️
- 若找不到该证书,说明未安装或已被误删——需重新从代理软件中导出并手动安装(Charles:Help → SSL Proxying → Install Charles Root Certificate;mitmproxy:访问 mitm.it 下载对应系统版本)
清理残留的过期或冲突代理证书
多次重装代理后,钥匙串里可能堆积多个同名但过期/损坏的证书副本,导致信任策略混乱。
- 在“钥匙串访问”中切换至【系统】钥匙串,搜索 expired 或 过期,筛选出所有带红色❌图标的证书
- 特别关注名称含 Charles、mitm、localhost、mkcert 的条目,按住 Command 键多选后删除
- 再切换回【登录】钥匙串,重复上述操作;注意:只删明确带❌或⚠️的,不碰 Apple Root CA、ISRG X1 等系统根证书
- 删完后,在终端执行 sudo killall -HUP trustd,强制刷新证书信任缓存
排除其他干扰因素
有些情况看似是代理问题,实则由关联配置触发:
- 检查 Safari 设置:设置 → 隐私 → 取消勾选“阻止跨站点跟踪”和“防止指纹识别”,这两项有时会干扰代理证书链验证
- Chrome 用户注意:Chrome 不读取钥匙串信任设置,必须手动在地址栏输入 chrome://settings/certificates → “授权机构”标签页中导入并启用对应根证书
- 如果使用公司网络或安全软件(如 Cisco AnyConnect、Zscaler),它们也可能注入自己的中间人证书——需联系 IT 确认是否允许本地代理共存










