mac清理“已弃用”证书需先在钥匙串访问中搜索deprecated定位,再通过终端命令导出核对后批量删除,或图形界面手动多选删除,最后用security命令验证是否清零。

Mac钥匙串里积压了数百个标着“已弃用”的证书,它们不显示红色❌也不提示过期,却在后台干扰HTTPS抓包、导致Charles/Fiddler反复弹窗、让Xcode签名失败或Office激活异常——这类证书必须手动识别并清除,不能靠系统自动清理。
先确认哪些证书属于“已弃用”类型
“已弃用”不是系统标准状态,而是开发者工具(如mkcert、openssl自签脚本、旧版CocoaPods插件)生成证书时写入的自定义描述字段。它不会触发状态栏图标变化,但会在证书详情的“常规”页中明文标注。
打开“钥匙串访问”,左侧选中【登录】钥匙串;右上角搜索框输入deprecated并回车——这是最高效定位方式,90%以上“已弃用”证书名称或备注含该词。
若搜不到,点击顶部菜单栏“查看”→“列选项”,勾选“备注”和“扩展属性”;回到列表,拖动水平滚动条至右侧,逐行扫视“备注”列内容,找包含“deprecated”“obsolete”“legacy”“do not use”字样的条目。
【注意:不要仅凭证书名含“dev”“test”“local”就删除,很多仍在用的本地CA也带这些词】
批量筛选并安全删除“已弃用”证书
方法一:用终端命令精准提取并删除(推荐,避免误触)
打开终端,执行以下命令,一次性导出所有含“deprecated”字段的证书指纹:
security find-certificate -p login.keychain-db 2>/dev/null | openssl x509 -noout -text 2>/dev/null | grep -A1 -B1 -i "deprecated" | grep "Serial Number" | awk '{print $3}' | xargs -I{} security find-certificate -p -t "{}" login.keychain-db > /tmp/deprecated_certs.pem
该命令不会直接删证书,而是把所有匹配证书的PEM内容存到/tmp/deprecated_certs.pem供你人工核对。打开该文件,确认内容全是你要清的证书,再执行下一步:
security find-certificate -p login.keychain-db 2>/dev/null | openssl x509 -noout -text 2>/dev/null | grep -A1 -B1 -i "deprecated" | grep "SHA-1 Fingerprint" | awk -F': ' '{print $2}' | xargs -I{} security delete-certificate -t "{}" login.keychain-db 2>/dev/null
方法二:图形界面手动多选(适合数量少于50个)
在钥匙串访问中,按住Command键,逐个点击所有“备注”列为deprecated的证书;右键→“删除”;弹窗点“删除”。
【关键前提:删除前务必确认这些证书未被任何正在运行的服务依赖,例如未关闭的mkcert HTTP代理或本地Nginx SSL配置】
验证是否真正清理干净
重新执行第一步的搜索操作:右上角搜deprecated,回车后结果应为空。
打开终端,运行:
security dump-keychain login.keychain-db | grep -i "deprecated" | wc -l
输出数字应为0。如果不是0,说明有证书把关键词藏在“扩展属性”而非“备注”里,需用以下命令补删:
security find-certificate -p login.keychain-db 2>/dev/null | openssl x509 -noout -text 2>/dev/null | grep -i "deprecated" -A5 -B5 | grep "Subject:" | cut -d'=' -f2- | xargs -I{} security find-certificate -p -t "{}" login.keychain-db | openssl x509 -noout -fingerprint -sha1 2>/dev/null | awk -F'=' '{print $2}' | xargs -I{} security delete-certificate -t "{}" login.keychain-db 2>/dev/null











