Linux Git:无法访问远程:设置证书验证位置时出错

6

我正在运行OpenSUSE Leap 42.1,使用的是Git 2.6.6。直到今天为止,我一直可以从远程GitHub存储库进行推送/拉取/提取操作而没有任何问题。

但是,今天我遇到了这个错误消息:

fatal: unable to access 'https://github.com/myName/myProject.git/': error setting certificate verify locations:
  CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: none

无论何时我执行推/拉/获取操作,都会出现这个问题。我的第一个想法是检查所提供的文件路径,但/etc/ssl/certs中并不存在名为ca-certificates.crt的文件。
所以...我不太确定该怎么做。也不知道为什么突然之间就停止工作了,可能是操作系统或git更新破坏了它?无论如何,希望能指点方向。
谢谢。

也许是Github改变了什么。git -c http.sslVerify=false fetch可行吗? - Asenar
是的,那确实有效。但我不想完全禁用 SSL。 - craigmiller160
似乎是关于 Github 和其自签名证书的问题。尝试在互联网或 SO 上搜索相关信息。 - Asenar
尝试按照 https://dev59.com/11sW5IYBdhLWcg3w2qRM 中提到的重新安装git。 - Sunny Tambi
3个回答

7

显然,有时证书文件会更改,因此您需要保留多个而不仅仅是一个!此外,我建议尝试保持安全连接而不是关闭它:

git config --system http.sslVerify false

或者更糟糕的是:

git config --global http.sslVerify false

这是一种非常糟糕的做法,应该尽量避免。

首先,查找那个捆绑证书文件。在Windows中,它位于git安装目录下,类似于:

D:\Program Files\Git\mingw64\ssl\certs\ca-bundle.crt

在Linux中,您可以尝试类似于以下内容(尽管我没有尝试过):

$ curl-config --ca
**/etc/ssl/certs/ca-certificates.crt**

或许还有另一个位置:
**/etc/ca-certificates/extracted/ca-bundle.trust.crt**

无论你是在哪里或使用什么操作系统,一旦获取了捆绑认证文件,你就需要告诉git使用该证书进行配置。你可以通过多种方式修改git.config文件,但其中一种直接的方法是:

git config --system http.sslcainfo /bin/curl-ca-bundle.crt

希望这有所帮助。如需更多信息,请参阅此讨论。如果有帮助,请告诉我。


1

检查是否在其他位置有一个ssl文件。我在Windows 10安装中遇到了同样的问题,通过创建一个usr目录并将ssl目录的内容复制到usr目录中解决了该问题。


0

Regardless where it maybe or the OS you are using once you get that bundle certification file, you then need to tell git to configure using that cert. You can modify the git.config file several why but one straight way is:

git config --system http.sslcainfo /bin/curl-ca-bundle.crt

使用 Git 2.34(2021 年第四季度)即可实现:

git config --system http.sslcainfo %(prefix)/bin/curl-ca-bundle.crt

路径名扩展(例如“~username/”)学会了一种指定相对于Git安装位置(例如其$sharedir,即$(prefix)/share)的方法,使用“%(prefix)”。

请查看提交记录 7ed37eb(2021年7月26日),作者为Junio C Hamano(gitster
请查看提交记录 e394a16提交记录 a03b097提交记录 644e6b2提交记录 789f6f2提交记录 b7d11a0(2021年7月24日),作者为Johannes Schindelin(dscho
(由Junio C Hamano -- gitster --提交记录 aab0eea中合并,于2021年8月24日)

interpolate_path():允许相对于运行时前缀指定路径

签名作者:Johannes Schindelin

自从Git学会在运行时检测其安装位置以来,就存在一个稍微尴尬的问题,即不可能指定相对于该位置的路径。例如,如果使用自定义SSL证书交付了Git的版本,则无法以可移植的方式指定http.sslCAInfo。在Windows版的Git中,多年来通过将以斜杠开头的路径解释为相对于运行时前缀而“解决”了这个问题。然而,这是不正确的:这样的路径在Windows上是合法的,并且它们被解释为与当前目录相同驱动器中的绝对路径。经过长时间的讨论、更长时间的思考和更多的讨论之后,我们最终决定引入支持魔术序列%(prefix)/。如果一个路径以此开头,其余部分将被解释为相对于检测到的(运行时)前缀。如果没有运行时前缀支持的构建Git,Git将简单地插入编译的前缀。如果用户想要指定以魔术序列开头的路径,他们可以在魔术序列前加上./,这样路径就不会扩展了。

config现在在其手册页面中包含以下内容:

如果路径以%(prefix)/开头,则其余部分将被解释为相对于Git的“运行时前缀”的路径,即相对于Git本身安装的位置。

例如,%(prefix)/bin/指的是Git可执行文件所在的目录。

如果Git没有编译运行时前缀支持,则将替换编译的前缀。

如果需要指定不应扩展的文字路径,则需要在其前面加上./,例如:./%(prefix)/bin


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接