homebrew、git、pip 的 macos ssl 错误本质是证书信任链未对齐系统钥匙串,需通过重置源、解锁钥匙链、切换系统 git 或更新 certifi 等方式修复,而非禁用校验。

Homebrew 安装或更新时提示 SSL certificate problem
这是 macOS 上最常见的 SSL 错误,本质是系统信任链和 Homebrew 使用的 curl 或 Git 底层不一致导致的。不是证书“过期”或“无效”,而是 Homebrew 没走系统钥匙串(Keychain),而是依赖 OpenSSL 或自带 curl 的证书包,而那个包太旧、没同步 Apple 更新。
实操建议:
- 先运行
brew update看是否报错;如果卡在Fetching https://github.com/Homebrew/brew...并出现SSL certificate problem: unable to get local issuer certificate,说明问题复现 - 不要手动改
curl的--cacert或设CURLOPT_SSL_VERIFYPEER=0—— 这等于关掉校验,不安全,且 Homebrew 1.8+ 会直接拒绝 - 优先执行:
brew tap-new homebrew/core && brew tap-pin homebrew/core(重置核心源),再brew update;多数情况能绕过临时证书缓存问题 - 若仍失败,运行:
sudo security unlock-keychain login.keychain-db(确保钥匙串已解锁),再brew update—— 很多时候只是钥匙串锁着,Homebrew 无法读取系统根证书
MacOS 14+(Sequoia)下 git clone 报 SSL certificate error
新系统升级后,Apple 改了钥匙串默认策略,Git 默认用系统 libcurl,但某些 Homebrew 安装的 Git(比如通过 brew install git)可能静态链接了旧版 OpenSSL,导致它完全无视钥匙串里的证书。
实操建议:
- 检查 Git 来源:
which git;如果是/opt/homebrew/bin/git,大概率是问题根源 - 临时切回系统 Git:
export PATH="/usr/bin:$PATH",再试git clone https://github.com/xxx - 长期解法:卸载 Homebrew 版 Git:
brew uninstall git,然后用 Xcode Command Line Tools 自带的 Git(它走系统钥匙串);或者保留 Homebrew Git,但强制它用系统 curl:brew reinstall curl --with-openssl→ 不推荐,容易引发依赖冲突 - 验证是否生效:
git config --global http.sslBackend "secure-transport"(macOS 原生方案),比 OpenSSL 更兼容钥匙串更新
Python pip 在 macOS 上报 CERTIFICATE_VERIFY_FAILED
这不是 pip 本身的问题,而是 Python(尤其非系统 Python,如 pyenv、brew 安装的 Python)没把 macOS 钥匙串证书注入到它的证书信任库中。常见于 pip install 或 requests.get() 报错。
实操建议:
- 别用
pip install --trusted-host pypi.org绕过 —— 这只是掩耳盗铃,所有 HTTPS 请求都失效 - 对 pyenv 管理的 Python:
pyenv rehash+python -m pip install --upgrade certifi;certifi 包会尝试同步系统证书,但有时失败 - 更可靠做法:让 Python 显式使用钥匙串证书路径:
export SSL_CERT_FILE="$(python -c 'import certifi; print(certifi.where())')"→ 不行;正确路径是:export SSL_CERT_FILE="/etc/ssl/cert.pem"?错。macOS 正确路径是:security find-certificate -p /System/Library/Keychains/SystemRootCertificates.keychain | sudo tee /etc/ssl/cert.pem > /dev/null,再export SSL_CERT_FILE="/etc/ssl/cert.pem" - 但最省事的是:
pip install --upgrade pip(新版 pip 会自动探测钥匙串),配合brew install ca-certificates(提供备用证书集)
为什么重装 Homebrew 有时能“修好”SSL 错误?
因为重装过程会重新生成 ~/.brew 下的证书缓存、重置 Git 配置、并触发一次完整的证书链探测逻辑。但它治标不治本——背后还是钥匙串权限、OpenSSL 版本、curl 后端三者没对齐。
真正要稳住,得盯住三点:
- 钥匙串是否解锁:
security list-keychains输出里有login.keychain-db且未被锁住 - Homebrew 是否用了系统 curl:
brew config | grep curl,理想输出是curl: /usr/bin/curl,而不是/opt/homebrew/opt/curl/bin/curl - Git 是否配置了正确的 SSL 后端:
git config --get http.sslBackend,应为secure-transport(macOS 原生)或空(表示跟随系统)
这些点一旦错位,SSL 错误就会在不同命令间“跳着出现”——前一秒 brew install 成功,后一秒 pip install 失败,让人以为是随机问题。其实全是证书路径没对齐。










