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


当前回答

错误

把失败 致命:无法访问 SSL证书问题:无法获得本地颁发者证书

原因

在本地机器上提交文件后,当本地Git连接参数过期时(例如HTTP更改为HTTPS),就会出现“push fail”错误。

解决方案

Open the .git folder in the root of the local directory Open the config file in a code editor or text editor (VS Code, Notepad, Textpad) Replace HTTP links inside the file with the latest HTTPS or SSH link available from the web page of the appropriate Git repo (clone button) Examples: url = http://git.[host]/[group/project/repo_name] (actual path) replace it with either url = ssh://git@git.[host]:/[group/project/repo_name] (new path SSH) url = https://git.[host]/[group/project/repo_name] (new path HTTPS)

其他回答

当我试图“克隆”项目时,我得到了这个错误。一个解决办法是只使用网页上的“下载压缩文件”,这对我来说,实现了我想做的事情。

下载并安装本地证书。它可能在你的公司网站上发布。例如,*。cer文件。

右键单击它并选择安装证书。将出现“证书导入向导”。选择本地机器。按Next,确认。 选择“将所有证书放入以下存储区”,按“浏览”并选择“受信任的根证书颁发机构”,“确定”,“完成”。

此外,您还可以检查其他应用程序是否可以获取、拉取或推送数据。例如,在Android Studio或IDEA中,你应该在设置中选择这个复选框:使用凭证帮助。

我刚刚遇到了同样的问题,但是在windows上使用sourcetree,在windows上使用正常GIT的步骤也是一样的。按照以下步骤,我能够解决这个问题。

Obtain the server certificate tree This can be done using chrome. Navigate to be server address. Click on the padlock icon and view the certificates. Export all of the certificate chain as base64 encoded files (PEM) format. Add the certificates to the trust chain of your GIT trust config file Run "git config --list". find the "http.sslcainfo" configuration this shows where the certificate trust file is located. Copy all the certificates into the trust chain file including the "- -BEGIN- -" and the "- -END- -". Make sure you add the entire certificate Chain to the certificates file

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

我尝试使用“http。”Sslcapath”配置,但这没有工作。此外,如果我没有包括证书文件中的整个链,那么这也会失败。如果有人对这些有指示,请让我知道,因为以上必须重复新的安装。

如果这是系统GIT,那么您可以使用TOOLS ->选项中的选项 GIt选项卡来使用系统GIt,这就解决了源树中的问题。

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

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

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

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