NiceLeeのBlog 用爱发电 bilibili~

备忘录 Git CA证书设置

2024-01-25
nIceLee

阅读:


Git设置忽略证书后续。

前言

自己做了个Github镜像,相关域名通过Cloudflare有了一层中转。 先前使用Git+https推拉项目就报证书过期错误,当时临时解决方案是忽略证书检查,心里一直有个疙瘩。

fatal: unable to access 'https://path/to/repo.git/': SSL certificate problem: certificate has expired

我记得这个域名浏览器访问一直没问题,使用Fiddler抓包发现从代理到源地址也是OK,就很困扰。
主要是报错提示并不完整,我一直以为是域名的证书过期,但它实际上没过期。那么,有没有一种可能,是给它签发的CA证书过期了???

结果还真是这么回事。
Cloudflare使用Let’s Encrypt签发的证书。而Let’s Encrypt签发的证书使用DST Root CA X3ISRG Root X1交叉认证(详见此处)。
在一些老旧的设备或程序中,以上二者信任的CA只有DST Root CA X3,且它存的对应证书日期已经到期,这就是我们遇到问题的原因。

解决方案

下载可信的CA根证书

可以参考https://curl.se/docs/caextract.html
以上提取自Mozilla,如果使用这个CA组合,在证书检查的行为上应该是和火狐浏览器行为一致。
下载下来的后缀是.pem,一般来说,直接改成.crt也不是不行。不管用的话再使用openssl转换。

openssl x509 -in cacert.pem -out cacert.crt

信任CA根证书

两个办法,一个直接替换掉旧的CA证书套餐,另一个通过配置指定CA根证书文件位置。

  • 直接替换 找到Git安装目录下的ca-bundle.crt
    例如,Windows下,
    D:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt
    找不到的话,可以再试一试Git附近的bin目录
    
  • 指定位置
    git config --system http.sslCAInfo D:\Work\0_cert\cacert.pem
    
    或者相当于配置文件
    [http]
        sslCAInfo = D:\\Work\\0_cert\\cacert.pem
    

    想要达到自己预期的效果,可以参考git-config,搜索ssl配置的关键词sslCAInfosslCAPathsslCertsslVerify


内容
隐藏