You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu服务器本机git访问GitBucket时出现SSL证书验证失败报错

根本原因

  1. 证书链优先匹配逻辑异常:你当前Apache配置的是Let's Encrypt默认的兼容型证书链,包含交叉签名到已过期DST Root CA X3的中间证书。Ubuntu 20.04默认系统信任库中,如果未主动禁用过期的DST Root CA X3,本地Git底层依赖的SSL库会优先匹配到这条过期根证书链,直接导致验证失败。其他外部客户端要么已从信任库移除过期DST根证书,要么内置了ISRG Root X1根证书并优先匹配有效链,因此访问不受影响。
  2. 访问地址与证书主体不匹配:你本机使用局域网IP访问服务,而Let's Encrypt不会为局域网IP颁发证书,你的证书实际签给对应公网域名。如果外部客户端均使用域名访问,自然不会触发域名不匹配校验,而本机用IP访问时会叠加触发验证失败,你临时使用的http.sslVerify=false参数同时绕过了证书有效期和域名匹配两层校验,所以可以临时生效。
  3. Git自定义信任库配置优先级更高:Git默认会优先读取全局/仓库级配置的http.sslCAInfo指定的CA文件,优先级高于系统信任库。如果你的Git全局配置指向了旧的、未更新的CA文件,即便更新系统信任库也不会生效。

排查步骤

  • 检查Git的SSL配置:执行git config --list --global | grep http.ssl,确认是否存在自定义的http.sslCAInfo、http.sslCAPath配置,如果有可以先删除该配置,或更新对应CA文件。
  • 验证系统信任库的DST根证书状态:执行trust list | grep "DST Root CA X3",如果输出中存在label: DST Root CA X3且无disabled标记,说明该过期根证书仍在系统信任列表中。
  • 用curl直接测试定位具体错误:执行curl -v https://192.168.xxx.xxx/repourl/,根据返回的SSL错误信息可以直接判定是证书过期还是域名不匹配问题。
  • 检查Apache的证书链配置:确认Apache配置的证书链文件类型,Let's Encrypt生成的证书目录下存在两种链:默认的fullchain.pem是兼容老Android的DST交叉签名链,alternate/fullchain.pem是仅到ISRG Root X1的短有效链。

永久解决方案

  1. 禁用系统信任库中的过期DST根证书
    执行命令:
    sudo dpkg-reconfigure ca-certificates
    
    在弹出的配置界面中找到DST_Root_CA_X3.crt,取消其勾选,确认后更新系统信任库即可。
  2. 切换Apache使用短有效证书链
    将Apache配置中的证书链文件替换为Let's Encrypt生成的alternate/fullchain.pem,重启Apache服务后,服务端仅返回到ISRG Root X1的有效链,彻底避免客户端匹配到过期根证书。
  3. 本机切换为域名访问
    在服务器本机的/etc/hosts文件中添加记录127.0.0.1 你的GitBucket服务域名,后续本机访问Git仓库时使用域名而非局域网IP,即可解决证书域名不匹配问题。

内容的提问来源于stack exchange,提问作者codeling

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:06:01