mac https抓包失败或访问银行网站提示“证书已过期”,主因是钥匙串中存有大量过期证书;需打开钥匙串访问,筛选expired、识别红❌图标证书并精准删除,再对charles等工具证书设为“始终信任”。

Mac上出现HTTPS抓包失败、访问银行或政府网站提示“证书已过期”,大概率不是网站问题,而是钥匙串里存着大量已失效的根证书、中间证书或自签名证书;这些证书一旦过期,系统仍会尝试调用,导致验证链断裂、连接被拒、Charles/Fiddler无法解密流量。
打开钥匙串访问并筛选过期证书
钥匙串访问是macOS唯一能全局管理证书的原生工具,所有证书无论来源(系统自动安装、浏览器导入、开发者手动添加)都集中在此。不从这里入手,清理就是盲操作。
按下Command + 空格唤出聚焦搜索,输入“钥匙串访问”,回车启动应用。
在左侧边栏确认选中【登录】钥匙串;若怀疑是系统级证书异常(如访问银行、政府网站报错),再依次点击“系统”和“系统根证书”切换查看。
在右上角搜索框中输入expired,回车——这是最直接命中过期证书的关键字,比手动翻页高效十倍。部分证书名称自带“expired”字样,该搜索可立即暴露它们。
点击顶部菜单栏“查看”→“显示状态栏”,此时窗口底部会出现状态栏。注意观察右侧图标:红色❌表示证书已过期,黄色⚠️表示证书不受信任或签名异常。这两个图标就是你要删除的核心目标,其他绿色✅图标暂不处理。
批量删除带红❌图标的过期证书
这一步必须严格限定范围:只删明确带红色❌图标的条目。误删绿色✅证书会导致系统功能异常(比如iCloud同步失败、App Store无法登录)。
在证书列表中,按住Command键,逐个点击所有显示红色❌图标的证书——不要用鼠标框选,框选可能误触正常证书。
右键选中项 → 选择“删除”,或直接按键盘Delete键。
弹出确认窗口时,点击“删除”按钮。若证书位于“系统”钥匙串中,系统会弹出管理员密码输入框,必须输入当前Mac的管理员密码才能继续;输错三次将锁定钥匙串访问1分钟。
对Charles Proxy等关键证书设为“始终信任”
很多开发者证书(如Charles Proxy根证书、Apple WWDRCA、本地mkcert生成的CA)本身没过期,但被系统默认设为“不信任”,结果表现和过期证书一样——抓包失败、HTTPS请求被拦截。这类证书不能删,必须修复信任状态。
方法一:在钥匙串访问中,于右上角搜索框输入Charles Proxy或AppleWWDRCA,快速定位到对应证书条目。
双击该证书,打开“显示简介”窗口。
点击左侧“信任”三角箭头展开设置项。
在“使用此证书时”下拉菜单中,选择始终信任。
关闭窗口,系统提示输入密码,验证后证书右下角将由❌变为绿色➕。
方法二:若证书名不明确,可按创建时间排序,筛选近30天内新增的证书,逐个检查“信任”设置项是否被意外改为“从不信任”。
终端命令辅助排查残留证书
有些证书不会出现在图形界面搜索结果中,尤其是通过脚本或命令行工具(如mkcert、openssl)安装的证书。需要用security命令精准定位。
打开“终端”,执行以下命令列出所有过期证书的摘要信息:
security find-certificate -p login | openssl x509 -noout -dates 2>/dev/null | grep -A1 "notAfter" | grep -E "(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{1,2} [0-9]{4}" | while read line; do echo "$line"; done
该命令仅输出过期日期字段,配合当前时间(2026年9月24日)人工比对即可识别明显过期项。
若发现某证书确已过期且无对应图形界面条目,可用如下命令强制删除(请将SHA-1哈希替换为实际值):
security delete-certificate -Z 【证书SHA-1哈希值】 login











