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


当前回答

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

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

这让我的情况与原始问题中引用的博客文章相同。一旦根证书被复制/粘贴到curl-ca-bundle中。CRT的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参数。

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

git config --global http.sslVerify false

注意:此解决方案使您容易受到中间人攻击等攻击。 因此,尽快再次开启验证:

git config --global http.sslVerify true

Git配置——global http。sslVerify假

错误

把失败 致命:无法访问 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)