如何获取Git中http.sslCAInfo默认值及解决HTTPS远程证书问题
解决Git多远程仓库SSL证书冲突问题
你遇到的这个场景确实很常见——同时连接一个信任CA颁发证书的远程仓库和一个自签证书的远程仓库,全局配置http.sslCAInfo会顾此失彼。下面我给你几个可行的解决方案:
一、获取Git默认的http.sslCAInfo值
Git的默认CA证书路径依赖于操作系统,你可以通过以下命令查看当前生效的配置:
- 查看系统级的默认CA路径(全局生效):
git config --system --get http.sslCAInfo - 查看当前仓库或全局的配置来源及值:
git config --show-origin http.sslCAInfo
如果没有输出,说明Git在使用系统自带的CA证书存储:
- Linux:通常是
/etc/ssl/certs/ca-certificates.crt - macOS:可能是
/usr/local/etc/openssl/cert.pem或系统钥匙串 - Windows:使用系统证书存储(Git会自动调用系统API获取)
二、最优解决方案:针对单个远程仓库配置SSL证书
不要全局设置http.sslCAInfo,而是为使用自签证书的远程单独配置证书路径,这样全局仍然使用默认的CA证书,两个远程都能正常访问:
# 替换<remote-name>为你的自签证书远程仓库名称,比如origin2 # /path/to/self-signed.crt替换为你的自签证书文件路径 git config remote.<remote-name>.sslCAInfo /path/to/self-signed.crt
这个方法的好处是精准控制单个远程的证书,不会影响其他仓库的连接。
三、合并默认CA与自签证书
如果你偏好全局配置,可以将自签证书追加到默认的CA证书文件中(或者复制一份默认文件后合并):
- 先找到默认的CA证书文件路径(参考第一部分的命令)
- 复制默认文件到自己的目录(避免修改系统文件):
cp /path/to/default/ca.crt ~/.git-ca-bundle.crt - 将自签证书追加到这个文件:
cat /path/to/self-signed.crt >> ~/.git-ca-bundle.crt - 全局设置Git使用这个合并后的证书文件:
git config --global http.sslCAInfo ~/.git-ca-bundle.crt
这样Git会同时信任系统默认CA和你的自签证书,两个远程仓库都能正常连接。
四、不推荐:关闭单个远程的SSL验证
如果是内部可信环境,且暂时无法配置证书,可以临时关闭自签证书远程的SSL验证(注意:这会跳过证书检查,有安全风险):
git config remote.<remote-name>.sslVerify false
内容的提问来源于stack exchange,提问作者Aimery




