笔者在使用一个很久未用的ubuntu虚拟机使用https协议git clone远程仓库时,发现克隆失败,开始以为是git版本过低了,更新了一下发现仍然无法clone,然后就换用SSH克隆仓库,竟然成功了,这让我很疑惑,打算找一找https克隆时出现了什么问题。以下内容记录了我是一步步排查解决问题的。
一、问题现象
执行 git clone https://github.com/octocat/hello-world.git 命令后,终端输出如下错误:
Cloning into 'hello-world'...
fatal: unable to access 'https://github.com/octocat/hello-world.git/': Failed to connect to github.com port 443 after 21036 ms: Connection refused
同时,在拉取项目子模块时,也出现类似的 GnuTLS recv error 等连接失败的提示。
二、排查与定位问题的过程
1. 初步检查网络连通性
首先想到的是网络问题,执行 ping github.com,发现能够成功收到回复,说明网络基础连通性是正常的,不是域名解析或网络链路的问题。
2. 检查 Git 代理配置
Git 可能单独设置了代理,导致 HTTPS 连接异常。执行以下命令查看并清除代理:
# 查看 Git 全局 HTTP 代理
git config --global --get http.proxy
# 查看 Git 全局 HTTPS 代理
git config --global --get https.proxy
# 如果有输出(如代理地址),清除代理配置
git config --global --unset http.proxy
git config --global --unset https.proxy
执行后发现没有代理配置输出,说明不是 Git 代理的问题。
3. 检查系统级代理环境变量
系统的 http_proxy/https_proxy 环境变量可能影响 Git 连接。执行以下命令查看并清除:
# 查看环境变量
echo $http_proxy
echo $https_proxy
# 如果有输出(如代理地址),临时清除(仅当前终端有效)
unset http_proxy
unset https_proxy
同样没有代理地址输出,排除系统代理的影响。
4. 测试临时关闭 SSL 证书验证
尝试临时关闭 Git 的 SSL 证书验证(仅用于测试,不建议长期开启),执行:
# 临时关闭 SSL 证书验证
git config --global http.sslVerify false
# 再次尝试拉取测试仓库
git clone https://github.com/octocat/hello-world.git
这次克隆成功了,说明问题与 SSL 证书验证有关。
三、解决问题
1. 彻底重新安装和更新证书相关组件
由于 SSL 证书验证出现问题,我们需要彻底重新安装和更新系统的证书相关组件。在 Ubuntu 系统下,执行以下命令:
sudo apt-get remove --purge ca-certificates
sudo apt-get install ca-certificates
sudo update-ca-certificates --fresh
sudo apt update
--purge 选项会彻底移除 ca-certificates 及其配置文件,然后重新安装,--fresh 选项强制更新证书缓存。
2. 恢复 Git 的 SSL 证书验证
修复完成后,重新开启 Git 的 SSL 证书验证,确保连接的安全性:
git config --global http.sslVerify true
3. 验证解决效果
再次执行 git clone https://github.com/octocat/hello-world.git,这次成功克隆了仓库,说明问题已经解决。
总结
当遇到 Git clone 因 SSL 证书验证失败而连接失败时,可按照“检查网络与代理 → 临时关闭证书验证定位问题 → 彻底重装更新证书组件”的流程来排查和解决。这套“清除旧证书 → 重装 → 强制刷新”的方法,能有效解决大多数 Linux 系统的证书信任链问题,保障 Git 等工具的 HTTPS 连接安全性与稳定性。
2266

被折叠的 条评论
为什么被折叠?



