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


当前回答

完整详细地总结出以上所有答案。

原因

发生此问题是因为git无法完成与git服务器的https握手,如果您试图访问的存储库是存在的。

解决方案

从github服务器获取证书的步骤

在浏览器中打开要访问的github 点击地址栏上的锁定图标>点击“证书” 进入“证书路径”选项卡>选择证书层次结构中的最顶层节点>单击“查看证书” 现在点击“详细信息”,然后点击“复制到文件”。选择“Base 64 encoded X509 (. cer)”,将其保存到您想要的任何路径。

将证书添加到本地git证书存储的步骤

现在打开您保存在记事本中的证书,并将内容连同开始证书和结束证书一起复制 要找到所有证书存储在git中的路径,在cmd中执行以下命令。 Git配置列表 检查键'http。sslcairfo ',则对应的值为path。

注意:如果你找不到密钥http。检查Git的默认路径:C:\Program Files\Git\mingw64\ssl\certs

现在打开'ca-bundle。阴极射线管存在于那条路径上。

注1:以管理员模式打开此文件,否则更新后将无法保存。(提示-你可以使用notepad++ 目的) 注2:在修改此文件之前,请在其他地方保存备份。

现在,将步骤1中提到的文件内容复制到步骤4中end文件中的文件,就像将其他证书放置在ca-bundle.crt中一样。 现在打开一个新终端,现在您应该能够使用https执行与git服务器相关的操作。

其他回答

在我的例子中,我必须为不同的git存储库使用不同的证书。

遵循以下步骤(如果您拥有存储库的证书,则可以从步骤5中读取)

转到远程存储库的站点。例如:github.com, bitbucket.org, tfs.example… 单击左上方的“锁定”图标,单击“证书”。 转到证书路径选项卡,双击到..根证书 转到详细信息选项卡,并单击复制到文件。 导出/复制证书到任何您想要的地方。例:C: \ certs \ example.cer 在本地存储库文件夹中打开git bash,输入: $ git config http。sslCAInfo“C: \ certs \ example.cer”

现在您可以为每个存储库使用不同的证书。

记住,使用——global参数调用也会改变其他文件夹中git存储库的证书,所以在执行此命令时不应该使用——global参数。

这对我很有用。我打开cmd行并运行以下命令。又拉了一下。

Git配置——global http。sslVerify假

我也有这个问题。在我的例子中,我试图获得一个接收后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。

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

在Git配置文件中

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

或者通过命令行:

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

2021年1月-在VS2019中通过设置菜单> Git >设置> Git全局设置>加密网络提供程序>[安全通道]而不是[OpenSSL]来解决这个问题

Git SSL证书问题无法获得本地颁发者证书(修复)

PS:不需要设置——global或——local http。sslVerify假。我正在克隆一个Azure DevOps回购,它没有使用任何自签名证书。这似乎是VS2019或Git for Windows的一个问题。他们需要修复它!!