我在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接受自签名证书?


当前回答

在我的例子中,因为我已经为windows 7安装了ConEmu终端,它在C:\Program Files\Git\mingw64\ssl\certs.的安装过程中创建了ca-bundle

因此,我必须在终端上运行以下命令才能使其工作:

$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt

因此,我的C:\Program Files\Git\etc\gitconfig包含以下内容:

[http]
    sslBackend = schannel
    sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt

另外,在安装Git时,我选择了与这里提到的相同的选项。

希望有帮助!

其他回答

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

问题是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更容易配置,而且不太可能被防火墙阻止,这意味着失败的几率更小。

使用makecert用于开发SSL的答案为我修复了这个问题。

我不知道为什么,但是IIS管理器中简单的“创建自签名证书”链接创建的证书并没有做到这一点。我遵循了创建和安装自签名CA根的链接问题中的方法;然后使用它为我的服务器颁发服务器身份验证证书。我在IIS中安装了它们。

这让我的情况与原始问题中引用的博客文章相同。一旦根证书被复制/粘贴到curl-ca-bundle中。CRT的git/curl组合是满意的。

为了避免完全禁用ssl验证或复制/破解git使用的捆绑的CA证书文件,您可以将主机的证书链导出到一个文件中,并让git使用它:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

如果这不起作用,您可以只对主机禁用ssl验证:

git config --global http.https://the.host.com/.sslVerify false

注意:当ssl验证关闭时,可能受到中间人攻击。

git config --global http.sslbackend secure-transport

(必须在更新到Big sssr后这样做)