无法使用带有自签名证书的Windows上的git解析“无法获取本地颁发者证书”

问题描述 投票:205回答:13

我在Windows上使用git。我安装了msysgit包。我的测试存储库在服务器上有一个自签名证书。我可以使用http访问和使用存储库而不会出现问题。移至https会出现错误“SSL证书问题:无法获取本地颁发者证书”。

我在Windows 7客户端计算机的受信任的根证书颁发机构中安装了自签名证书。我可以浏览到Internet Explorer中的https存储库URL,没有错误消息。

这篇博客http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe-s-store.aspx解释说curl不使用客户端机器的证书存储区。我按照博客文章的建议创建了curl-ca-bundle.crt的私有副本,并配置git来使用它。我确信git正在使用我的副本。如果我重命名副本; git抱怨文件丢失了。

我粘贴在我的证书中,如博客文章中所述,我仍然收到“无法获得本地颁发者证书”的消息。

我通过https克隆了一个GitHub存储库,验证了git仍在工作。

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

我怎样才能获得git / curl来接受自签名证书?

windows git curl ssl-certificate msysgit
13个回答
206
投票

如果要完全禁用SSL验证,请打开Git Bash并运行该命令。

git config --global http.sslVerify false

注意:此解决方案可能会让您受到类似中间人攻击的攻击。因此,请尽快再次启用验证:

git config --global http.sslVerify true

4
投票

我之前遇到过这个问题,并使用以下配置解决它。

[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate

从git 2.3.1开始,您可以在http之后放置https://your.domain,以指示以下证书仅适用于它。


1
投票
  1. 从以下链接下载证书:https://github.com/bagder/ca-bundle
  2. 将它添加到C:\Program Files\Git\binC:\Program Files\Git\mingw64\bin

然后尝试类似:git clone https://github.com/heroku/node-js-getting-started.git


0
投票

让我烦恼的一件事是路径的格式(在我的Windows PC上)。我原来有这个:

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

但是由于“无法获得本地颁发者证书”错误而失败。

最终起作用的是:

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

-5
投票

之前使用此命令运行composer update / install:

git config --global http.sslverify false

89
投票

我也有这个问题。在我的情况下,我试图获得一个post-receive Git钩子,以便在每次推送时更新服务器上的工作副本。试图按照您链接的博客中的说明进行操作。对我来说也没有用,并且在每个用户的基础上覆盖设置似乎也没有用。

我最不得不做的是为Git整体禁用SSL验证(如文章所述)。不是完美的解决方案,但它会起作用,直到我能找到一个更好的解决方案。

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

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

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

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

这就是诀窍。

注意:这会禁用SSL验证,不建议将其作为长期解决方案。


67
投票

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

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

只需执行:

git config --global http.sslbackend schannel

这应该有所帮助。

在安装git for windows时,使用schannel现在是标准设置,如果可能的话,建议不要通过SSH检查存储库,因为https更容易配置,不太可能被防火墙阻止,这意味着失败的可能性更小。


45
投票

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

在Git配置文件中

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

或者通过命令行:

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

39
投票

这个问题的答案Using makecert for Development SSL为我解决了这个问题。

我不知道为什么,但是IIS Manager中简单的“创建自签名证书”链接创建的证书不起作用。我在创建和安装自签名CA Root的链接问题中遵循了该方法;然后使用它为我的服务器颁发服务器身份验证证书。我在IIS中安装了它们。

这使我的情况与原始问题中引用的博客文章相同。将根证书复制/粘贴到curl-ca-bundle.crt后,git / curl组合就会得到满足。


39
投票

我也遇到过这个问题。最后通过获得this MSDN Blog的指导得到了解决。

更新

实际上你需要在git的证书文件curl-ca-bundel.cert中添加证书,该文件位于Git \ bin目录中。

脚步

  1. 在浏览器中打开您的github页面,然后单击地址栏中的锁定图标。
  2. 在打开的小弹出窗口中导航到“查看证书”链接,它将打开一个弹出窗口。
  3. 在其中导航到证书选项卡(在我的情况下为第3个)。选择作为根证书的顶级节点。并按下底部的复制证书按钮并保存文件。
  4. 在文件浏览器中导航Git \ bin目录并在文本编辑器中打开curl-ca-bundle.crt。
  5. 也可以在文本编辑器中打开导出的证书文件(在步骤3中)。
  6. 将导出证书中的所有内容复制到curl-ca-bundle.crt的末尾,然后保存。

最后检查状态。请注意,在编辑之前备份curl-ca-bundle.crt文件以保持安全。


24
投票

为了避免完全禁用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验证关闭时,可能会受到中间人攻击。


18
投票

我刚刚遇到了同样的问题,但在Windows上使用sourcetree同样适用于Windows上的普通GIT。按照以下步骤,我能够解决此问题。

  1. 获取服务器证书树可以使用chrome完成。导航为服务器地址。单击挂锁图标并查看证书。将所有证书链导出为base64编码文件(PEM)格式。
  2. 将证书添加到GIT信任配置文件的信任链中运行“git config --list”。找到“http.sslcainfo”配置,它显示证书信任文件所在的位置。将所有证书复制到信任链文件中,包括“ - -BEGIN- - ”和“ - -END- - ”。
  3. 确保将整个证书链添加到证书文件中

这应该可以解决您使用自签名证书和使用GIT的问题。

我尝试使用“http.sslcapath”配置,但这不起作用。此外,如果我没有在证书文件中包含整个链,那么这也将失败。如果有人指出这些,请告诉我,因为必须重复上述新安装。

如果这是系统GIT,那么您可以使用TOOLS - > options GIt选项卡中的选项来使用系统GIT,然后这也解决了sourcetree中的问题。


7
投票

对于github存储库(或任何非自签名证书),在安装Git-on-windows时选择以下内容,解决了这个问题。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.