git Troubleshooting

Git SSL certificate problem 解决方法

Git clone/pull 报 SSL certificate problem: unable to get local issuer certificate 时,用 GIT_CURL_VERBOSE=1 打印真实证书链,确认是否走了公司代理,把代理 CA 加入 http.sslCAInfo 或系统信任,避免直接关闭 sslVerify。

不要直接关闭 sslVerify。优先修复系统 CA、企业代理 CA 或 Git 代理配置。

适用环境Git / HTTPS / 代理网络
风险等级
最后验证2026-06-29
建议权限普通用户

Scenario

这篇文章解决什么问题

适用于 git clone/pull 报 SSL certificate problem: unable to get local issuer certificate 的场景。排查核心是确认证书错误来源(系统 CA、企业代理、系统时间),而不是直接关闭 sslVerify。

Symptoms

典型现象

  • git clone/pull 报 SSL certificate problem: unable to get local issuer certificate。
  • 浏览器能访问同一 URL,但 git 命令行报证书错误。
  • 公司网络环境下频繁出现,通常是中间人代理注入了自己的 CA 证书。
  • 系统时间不正确也会导致证书有效期校验失败。

Before Debugging

排查前先确认

  • 先区分 HTTPS、SSH、代理、证书和账号权限问题。
  • 查看配置来源,确认 system/global/local 哪一级覆盖了当前仓库。
  • 保留 verbose 输出,但不要泄露 token、私钥和 Cookie。

Root Causes

常见根因分层

协议和认证链路选错

HTTPS 走 CA/代理/token,SSH 走密钥/ssh config/agent。两套链路的排查命令和配置项不同。

  • git remote -v 看协议
  • HTTPS 用 GIT_CURL_VERBOSE
  • SSH 用 ssh -vvv

代理或证书配置污染

全局代理、公司 CA、本地抓包代理、过期证书都会让 Git 报 SSL 或连接失败。

  • git config --show-origin 查来源
  • 确认系统时间
  • 配置企业 CA 而非关闭校验

密钥没有被真正使用

密钥文件存在不代表 SSH 提交了它。Host 匹配、IdentitiesOnly、ssh-agent 都可能改变最终行为。

  • ssh -G 查看最终配置
  • ssh -T 验证平台账号
  • 确认 authorized_keys 权限

Diagnosis Path

分步诊断流程

1. 固定现场,避免追着变化状态跑

先记录故障时间、影响入口、完整错误和最近一次变更。Git SSL certificate problem 解决方法 这类问题经常在重启、重试或缓存刷新后短暂消失,没有现场信息会很难复盘。

  • 截图或保存完整错误文本
  • 记录请求域名/IP/端口/namespace/服务名
  • 标出最近发布、配置、证书、镜像或依赖变更
1. 固定现场,避免追着变化状态跑
git config --global --get http.proxy
git config --global --get https.proxy

2. 在故障发生的同一位置复现

很多误判来自测试位置不同:本机通不代表服务器通,容器内通不代表宿主机通,集群外通也不代表 Pod 内通。复现命令要尽量贴近真实流量路径。

  • 从报错服务所在机器执行测试
  • 必要时加 Host、SNI、namespace 或代理参数
  • 把成功路径和失败路径的输出并排比较
2. 在故障发生的同一位置复现
git config --global --get https.proxy
git config --global http.sslCAInfo /path/to/ca.pem
GIT_CURL_VERBOSE=1 git ls-remote https://github.com/git/git

3. 读取服务端证据,而不是只看客户端提示

客户端报错通常是结果摘要。真正能区分根因的是服务端日志、内核日志、事件、进程状态或数据库状态。

  • 开启 GIT_CURL_VERBOSE 看真实证书错误。
  • 确认是否走了公司代理或本地代理。
  • 把代理 CA 加入系统或 Git CA 配置。
3. 读取服务端证据,而不是只看客户端提示
git config --global http.sslCAInfo /path/to/ca.pem
GIT_CURL_VERBOSE=1 git ls-remote https://github.com/git/git

4. 做最小修复并立即回归验证

每次只改一个变量,修复后用同一条复现命令回测,并观察日志是否停止增长。这样可以避免多个临时改动互相掩盖。

  • 把代理 CA 加入系统或 Git CA 配置。
  • 检查系统时间是否正确。
  • 仅临时排查时才使用 sslVerify=false。
4. 做最小修复并立即回归验证
git config --global http.sslCAInfo /path/to/ca.pem
GIT_CURL_VERBOSE=1 git ls-remote https://github.com/git/git

Commands

排查命令与使用意图

命令 1

用于确认 Git/SSH 的最终配置和认证链路。注意输出中可能包含仓库地址、用户名或代理信息,分享前应脱敏。

命令 1
git config --global --get http.proxy

命令 2

用于确认 Git/SSH 的最终配置和认证链路。注意输出中可能包含仓库地址、用户名或代理信息,分享前应脱敏。

命令 2
git config --global --get https.proxy

命令 3

用于确认 Git/SSH 的最终配置和认证链路。注意输出中可能包含仓库地址、用户名或代理信息,分享前应脱敏。

命令 3
git config --global http.sslCAInfo /path/to/ca.pem

命令 4

用于确认 Git/SSH 的最终配置和认证链路。注意输出中可能包含仓库地址、用户名或代理信息,分享前应脱敏。

命令 4
GIT_CURL_VERBOSE=1 git ls-remote https://github.com/git/git

Risk Notes

容易踩坑的地方

  • git config --global http.sslVerify false 会永久关闭证书校验,容易被中间人攻击,不要作为解决方案。
  • 公司代理 CA 需要同时加入系统和 Git 的信任链(http.sslCAInfo),只加一个可能不生效。
  • Windows 上 Git 使用 schannel(系统证书库)或 OpenSSL(Git 自带 CA),两者信任链不同。

Verification

修复后怎么确认

  • 原始故障现象已经消失,且使用同一入口重新测试 Git SSL certificate problem 能稳定成功。
  • 服务端日志不再出现同类错误,监控中的错误率、重启次数、连接数或延迟回到正常区间。
  • 如果做过临时绕过,已经记录恢复计划,例如还原宽松策略、补监控、补限制或提交正式配置。

Prevention

后续预防

  • 公司网络环境下,把企业 CA 证书加入系统信任库,而不是关闭 sslVerify。
  • 用 GIT_CURL_VERBOSE=1 git ls-remote 确认真实证书链和代理行为。
  • 定期检查系统时间是否正确,NTP 同步失败会导致各种证书校验问题。

常见问题

可以永久关闭 sslVerify 吗?

不建议。关闭后会失去 HTTPS 证书校验,容易被中间人攻击。

Long-tail SEO

你可能正在搜索这些报错

下面这些错误原文、场景词和中英文搜索词,都是排查同类问题时常见的入口。

  • git ssl certificate problem unable to get local issuer certificate
  • git clone SSL certificate problem
  • git 代理证书错误
  • git schannel certificate problem
  • git http.sslVerify false 风险
  • GIT_CURL_VERBOSE SSL certificate problem
  • 公司代理 CA Git 证书
  • git unable to access SSL certificate problem