MacOS软件在线更新失败因SSL证书信任链未对齐系统钥匙串,需启用DST/ISRG根证书为始终信任、解锁login.keychain-db、将系统根证书合并至certifi路径,并优先使用系统原生Git/curl。
macos中软件在线更新失败,如果报错含 ssl certificate、certificate_verify_failed、unable to get local issuer certificate 等关键词,基本可确定是系统证书信任链未对齐——不是网络问题,也不是软件本身损坏,而是 macos 钥匙串里的根证书没被包管理器或更新程序正确读取或信任。
检查并启用系统钥匙串的根证书信任
很多更新失败(如 Homebrew update、App Store 更新、Xcode 命令行工具升级)卡在 HTTPS 连接阶段,根源在于“系统”钥匙串中关键根证书未启用:
- 打开“钥匙串访问” → 左侧选中“系统”钥匙串 → 顶部菜单栏点“钥匙串访问”→“偏好设置”→“证书”标签
- 确保勾选“自动更新信任设置”和“在证书使用不受信任时发出警告”
- 在搜索栏输入 DST Root CA X3 或 ISRG Root X1(Let’s Encrypt 使用),双击结果 → “显示简介” → 展开“信任” → 将“使用此证书时”设为“始终信任”
- 终端执行:sudo security trust-settings-export /tmp/trust.plist && sudo security trust-settings-import /tmp/trust.plist,强制刷新系统级信任策略
确保钥匙串已解锁且可被进程访问
即使证书有效,若当前用户钥匙串(尤其是 login.keychain-db)处于锁定状态,Homebrew、Git、pip 等工具就无法读取其中的凭证或信任配置:
- 终端运行:security unlock-keychain login.keychain-db(会提示输入登录密码)
- 验证是否成功:security find-certificate -p /Users/你的用户名/Library/Keychains/login.keychain-db | head -5,应能输出证书 PEM 内容
- 如经常锁住,可在“钥匙串访问”中右键 login 钥匙串 → “更改设置” → 取消勾选“退出时锁定钥匙串”
修复 pip 和 Python 的证书路径
非系统 Python(如 pyenv、Homebrew 安装的 Python)自带 OpenSSL,不自动读取 macOS 钥匙串。pip 报错多源于此:
- 确认当前 certifi 路径:python -c "import certifi; print(certifi.where())"
- 将系统根证书追加进去:sudo security find-certificate -p /System/Library/Keychains/SystemRootCertificates.keychain >> $(python -c "import certifi; print(certifi.where())")
- 验证生效:pip install --upgrade pip 不再报 SSL 错误即成功
绕过临时干扰,优先用系统原生组件
某些第三方工具(如 Homebrew 安装的 Git、curl)静态链接旧版 OpenSSL,会彻底忽略钥匙串更新:
- 检查 Git 来源:which git;若路径含 /opt/homebrew/bin/git,说明它可能不走系统信任链
- 临时切回系统 Git:export PATH="/usr/bin:$PATH",再试 git pull 或 App Store 相关操作
- 长期建议卸载 brew 版 Git:brew uninstall git,依赖 Xcode Command Line Tools 自带版本(它默认用 secure-transport 后端,与钥匙串深度集成)


















