macOS Catalina下git/curl提示SSL证书已过期但实际有效如何修复?
问题原因
- 不同软件使用的证书信任体系独立:Google Chrome自带内置的根证书库,可直接识别信任ISRG Root X1根证书,因此可以正常访问站点。
- 你当前使用的macOS Catalina系统自带的
LibreSSL 2.6.5存在证书链校验逻辑缺陷:虽然系统根证书库中已经内置了受信任的ISRG Root X1根证书(该根证书兼容macOS 10.12.1及以上版本,符合你当前系统版本要求),但Let's Encrypt默认返回的证书链包含已过期的DST Root CA X3交叉签名,旧版本LibreSSL在校验时会优先匹配到该过期根证书,直接终止校验并抛出证书过期错误,不会继续遍历查找信任链中的有效根证书。 - 系统默认安装的curl、git都依赖系统内置的LibreSSL库做SSL校验,因此都会触发该报错。
修复方案
方案1:替换新版SSL依赖(推荐长期使用)
通过Homebrew安装更新版本的openssl、curl、git,替换系统自带的旧版本组件:
- 若未安装Homebrew可先完成安装,已安装则直接执行下一步
- 执行安装命令:
brew install openssl curl git
- 编辑终端配置文件(zsh对应
~/.zshrc,bash对应~/.bash_profile),添加以下内容优先加载brew安装的组件:
export PATH="/usr/local/opt/curl/bin:/usr/local/opt/git/bin:$PATH" export SSL_CERT_FILE="$(brew --prefix)/etc/ca-certificates/cacert.pem"
- 执行
source ~/.zshrc(对应bash则执行source ~/.bash_profile)让配置生效,后续执行git、curl命令即可正常校验证书。
方案2:临时关闭SSL校验(仅应急使用)
仅针对单次操作临时关闭校验,不推荐长期使用,存在安全风险:
- git操作:
git -c http.sslVerify=false pull
- curl操作:
curl -k https://gitlab.example.com/development/soa-report-analysis.git
方案3:手动指定根证书校验
单独下载ISRG Root X1根证书到本地,操作时手动指定证书路径:
- git全局配置生效:
git config --global http.sslCAInfo /本地存储路径/isrg-root-x1.pem
- curl单次操作生效:
curl --cacert /本地存储路径/isrg-root-x1.pem https://gitlab.example.com/development/soa-report-analysis.git
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

