我在Windows上使用Git。我安装了msysGit包。我的测试存储库在服务器上有一个自签名证书。我可以毫无问题地使用HTTP访问和使用存储库。移动到HTTPS会出现以下错误:

SSL证书问题:无法获得本地颁发者证书。

我在Windows 7客户端机器的受信任根证书颁发机构中安装了自签名证书。我可以在Internet Explorer中浏览到HTTPS存储库URL,而不会出现错误消息。

Philip Kelley的这篇博客文章解释了cURL不使用客户端机器的证书存储。我按照博客文章的建议创建了curl-ca-bundle的私有副本。然后配置Git使用它。我确定Git正在使用我的副本。如果我重命名副本;Git抱怨文件丢失。

我粘贴了我的证书,正如博客文章中提到的,我仍然得到“无法获得本地发行人证书”的消息。

我通过HTTPS克隆GitHub仓库来验证Git仍然在工作。

我看到的唯一不同于博客文章的地方是我的证书是根证书——没有链可以到达它。我的证书最初来自点击IIS8 IIS管理器链接“创建自签名证书”。也许这使得证书在某种程度上与cURL所期望的有所不同。

如何让Git/cURL接受自签名证书?


当前回答

我已经通过在${HOME}/中添加以下条目解决了这个问题。gitconfig文件

(远程“起源”)

代理=

在大多数情况下,当你的机器启用代理时,就会发生这种情况,所以上面提到的条目将解决这个问题。

其他回答

解决了我的问题 Git配置——global http。sslBackend schannel

kiddailey我认为非常接近,但是我不会禁用ssl验证,而是只提供本地证书:

在Git配置文件中

[http]
    sslCAinfo = /bin/curl-ca-bundle.crt

或者通过命令行:

git config --global http.sslCAinfo /bin/curl-ca-bundle.crt

有一件事让我很困惑,那就是路径的格式(在我的Windows电脑上)。我最初是这样写的:

git config --global http.sslCAInfo C:\certs\cacert.pem

但是失败了,出现了“无法获得本地发行者证书”错误。

最终起作用的是:

git config --global http.sslCAInfo "C:\\certs\\cacert.pem"

问题是git默认使用“Linux”加密后端。

从Git for Windows 2.14开始,您现在可以配置Git使用内置的Windows网络层channel作为加密后端。这意味着它将使用Windows证书存储机制,您不需要显式地配置curl CA存储机制:https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx

执行:

git config --global http.sslbackend schannel

这应该会有所帮助。

在Windows上安装git时,使用通道是现在的标准设置,如果可能的话,建议不要通过SSH或更多的方式签出存储库,因为https更容易配置,而且不太可能被防火墙阻止,这意味着失败的几率更小。

我也有这个问题。在我的例子中,我试图获得一个接收后Git钩子,以便在每次推送时更新服务器上的工作副本。试着按照你链接的博客里的说明去做。对我来说也不工作,而且在每个用户的基础上重写设置似乎也不工作。

我最终不得不为整个Git禁用SSL验证(正如文章所提到的)。这不是完美的解决方案,但在我找到更好的解决方案之前,它会有用的。

我编辑了Git配置文本文件(使用我最喜欢的行结束中性应用程序,如notepad++),位于:

C:\Program Files (x86)\Git\etc\gitconfig

在[http]块中,我添加了一个选项来禁用sslVerify。当我完成时,它看起来是这样的:

[http]
    sslVerify = false
    sslCAinfo = /bin/curl-ca-bundle.crt

这招奏效了。

注意:

这将禁用SSL验证,不建议作为长期解决方案。 您可以禁用每个存储库,这仍然不是很好,但本地化的设置。 随着LetsEncrypt.org的出现,现在可以相当简单、自动和免费地设置SSL作为自签名证书的替代方案,并且不需要关闭sslVerify。