Ubuntu AWS实例中git http.sslVerify=false不生效的SSL验证问题
我来帮你排查这个棘手的问题——你已经尝试了常规的证书配置和SSL验证禁用,但都没效果,大概率是代理的SSL拦截或者Git配置优先级的问题,试试下面这些针对性的方案:
1. 确认代理是否在做SSL拦截(最可能的原因)
很多企业代理会做SSL流量拦截,也就是代理会自己重新签发目标服务器的证书,这时候你添加企业GitHub服务器的证书根本没用,因为实例实际通信的是代理的证书。
用这个命令验证通过代理访问时拿到的证书:
openssl s_client -showcerts -connect githubserver.company.com:443 -proxy http://your-proxy-ip:your-proxy-port
查看输出里的证书信息,如果显示的是代理公司的CA(而不是GitHub服务器的),那你需要把代理的CA证书添加到系统信任列表:
- 从代理管理员那里获取代理的根CA证书(或者从上面的openssl输出里复制证书部分,保存为
proxy-ca.pem) - 将证书放到
/usr/local/share/ca-certificates/目录,执行sudo update-ca-certificates - 然后重新配置Git的
http.sslCAInfo指向系统证书文件:git config --global http.sslCAInfo /etc/ssl/certs/ca-certificates.crt
2. 检查Git配置的优先级,避免被覆盖
Git的配置有系统级(/etc/gitconfig)、全局级(~/.gitconfig)、本地仓库级(.git/config)三个层级,优先级是本地>全局>系统,可能你设置的全局配置被其他层级覆盖了。
查看所有生效的Git配置:
git config --list --show-origin
搜索http.sslVerify和http.sslCAInfo,看看有没有其他配置项覆盖了你的设置。比如如果系统级配置里http.sslVerify=true,那你全局设置的false就不会生效,这时候可以直接修改系统配置,或者在克隆时用命令行参数强制覆盖。
3. 克隆时直接指定代理和SSL参数(绕过配置冲突)
如果不确定配置哪里出问题,可以在克隆命令里直接指定所有必要参数,避免配置层级冲突:
# 使用代理+指定正确的CA证书 git clone https://githubserver.company.com/repository.git \ --config http.proxy=http://your-proxy-ip:your-proxy-port \ --config http.sslCAInfo=/etc/ssl/certs/ca-certificates.crt # 临时禁用SSL验证(仅测试用,不建议长期使用) git clone https://githubserver.company.com/repository.git \ --config http.proxy=http://your-proxy-ip:your-proxy-port \ --config http.sslVerify=false
4. 检查环境变量的影响
Git会优先读取环境变量的配置,比如HTTPS_PROXY、HTTP_PROXY、GIT_SSL_NO_VERIFY、GIT_SSL_CAINFO,可能这些环境变量和你的Git配置冲突了:
- 先查看当前环境变量:
echo $HTTPS_PROXY $HTTP_PROXY $GIT_SSL_NO_VERIFY $GIT_SSL_CAINFO
- 如果
HTTPS_PROXY没设置,先手动设置代理:
export HTTPS_PROXY=http://your-proxy-ip:your-proxy-port export HTTP_PROXY=http://your-proxy-ip:your-proxy-port
- 临时禁用SSL验证可以设置环境变量:
export GIT_SSL_NO_VERIFY=true
然后再尝试克隆。
5. 验证系统证书是否生效
有时候添加证书后update-ca-certificates没成功,或者证书权限有问题:
- 检查证书文件权限:
ls -l /usr/local/share/ca-certificates/your-cert.pem
确保权限是644(所有用户可读),如果不是就修改:sudo chmod 644 /usr/local/share/ca-certificates/your-cert.pem
- 重新执行
sudo update-ca-certificates,看输出里有没有提示“1 added”之类的成功信息 - 用curl测试系统证书是否能验证:
curl -v --proxy http://your-proxy-ip:your-proxy-port https://githubserver.company.com
如果curl能正常访问,那Git应该也能正常工作;如果curl也报错,那问题在系统证书或代理配置,先解决curl的问题再看Git。
内容的提问来源于stack exchange,提问作者Xandro




