无法解决“无法获得本地发行人证书”;在自签名证书的Windows上使用git

我在Windows上使用Git。我安装了msysGit包。我的测试存储库在服务器上有一个自签名证书。我可以毫无问题地使用HTTP访问和使用存储库。移动到HTTPS会出现以下错误:

SSL证书问题:无法获得本地颁发者证书。

我在Windows 7客户端机器的受信任根证书颁发机构中安装了自签名证书。我可以在Internet Explorer中浏览到HTTPS存储库URL,而不会出现错误消息。

本文作者是Philip Kelley解释了cURL不使用客户端机器的证书存储。我按照博客文章的建议创建了一个curl-ca-bundle.crt的私有副本,并配置Git来使用它。我确定Git正在使用我的副本。如果我重命名副本;Git抱怨文件丢失。

我粘贴了我的证书,正如博客文章中提到的,我仍然得到“无法获得本地发行人证书”的消息。

我通过HTTPS克隆GitHub仓库来验证Git仍然在工作。

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

如何让Git/cURL接受自签名证书?

943200 次浏览

回答为开发SSL使用makecert为我解决了这个问题。

我不知道为什么,但是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

这招奏效了。

# EYZ0

  • 这将禁用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

我也遇到过这个问题。最终得到了这个MSDN博客的指导。

更新

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

步骤

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

最后检查状态。# EYZ0

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

git config --global http.sslVerify false
< p > # EYZ0。 因此,尽快再次打开验证:

git config --global http.sslVerify true

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

  1. 获取服务器证书树 这可以使用chrome完成。 导航到服务器地址。 单击挂锁图标并查看证书。 将所有的证书链导出为PEM (base64 encoded files)格式
  2. 将证书添加到GIT信任配置文件的信任链中 执行“git config——list”命令。 找到“http.”sslcairfo”配置,显示证书信任文件的位置。 将所有证书拷贝到信任链文件中,包括- - begin - -和- - end - - .
  3. . txt
  4. 请确保将整个证书链添加到证书文件中

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

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

如果这是系统GIT,那么您可以使用TOOLS ->选项中的选项

. GIt选项卡来使用系统GIt,这也解决了源树中的问题

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

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

git config --global http.sslverify false
  1. 证书下载链接: 李# EYZ0 < / >
  2. 添加到 C:\Program Files\Git\binC:\Program Files\Git\mingw64\bin

然后试试这样的代码:git clone https://github.com/heroku/node-js-getting-started.git

github存储库(或任何非自签名的证书)的情况下,在安装Git-on-windows时选择下面的选项,解决了这个问题。

enter image description here

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

< p > <代码> (http“https://your.domain”) sslCAInfo = /道路/ /你/域/ priviate-certificate < /代码> < / p >

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

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

有一件事让我很困惑,那就是路径的格式(在我的Windows电脑上)。我最初是这样写的:

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

但是失败了,出现了“无法获得本地发行者证书”错误。

最终起作用的是:

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

在我的例子中,因为我已经为windows7安装了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时,我选择了与前面提到的在这里相同的选项。

希望有帮助!

要修复特定的错误SSL证书问题:无法在git中获得本地颁发者证书

我在Let's Encrypt证书时也遇到了同样的问题。

一个网站与https我们只需要:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

但少不要脸的人说:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

要修复它,我们还需要添加:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem

错误

< br > < p >将失败 致命:无法访问
SSL证书问题:无法获得本地颁发者证书

原因

在本地机器上提交文件后,“推送失败”;错误可能发生在本地Git连接参数过期时(例如HTTP更改为HTTPS)。

解决方案

  1. 在本地目录的根目录中打开.git文件夹
  2. 在代码编辑器或文本编辑器中打开config文件(VS code,记事本,Textpad)
  3. 替换HTTP链接文件中的最新的HTTPSSSH链接可从相应的Git回购(克隆按钮)的网页中获得
    例子:
    url = http://git.[host]/[group/project/repo_name]     (actual path)
    
    用任何一个替换它
    url = ssh://git@git.[host]:/[group/project/repo_name] (new path SSH)
    url = https://git.[host]/[group/project/repo_name]    (new path HTTPS)
    

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

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

  1. 访问远程存储库的站点。例如:github.com, bitbucket.org, tfs.example…

  2. 单击左上角的图标,然后单击证书

  3. 转到证书路径选项卡,双击.. 根证书

  4. 进入细节页签,单击复制到文件

  5. 导出/复制证书到任何你想要的地方。例:C: \ certs \ example.cer

  6. 在本地存储库文件夹中打开git bash,并键入:

    # EYZ0

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

记住,使用--global参数进行调用也会更改其他文件夹中git存储库的证书,因此在执行此命令时使用你不应该使用参数--global

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

原因

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

解决方案

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

  1. 在浏览器中打开要访问的github
  2. 在地址栏按锁定图标>点击“证书”
  3. 转到“认证路径”标签>选择证书层次结构中最顶端的节点>点击“查看证书”
  4. 现在点击“详细信息”,然后点击“复制到文件”。“比;点击“下一步”>选择'Base 64 encoded X509 (.CER)' >将其保存到您想要的任何路径。

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

  1. 现在打开你在记事本中保存的证书,并复制内容和——开始证书——和——结束证书——

  2. 要找到所有证书存储在git中的路径,在cmd中执行以下命令。

    Git配置列表

  3. 检查密钥'http。sslcairfo ',则对应的值为path。

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

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

注1:打开此文件的管理员模式,否则更新后将无法保存。(提示-你可以使用notepad++ 目的)< / p >

注2:在修改此文件之前,请在其他地方保存备份。

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

我在Azure DevOps (Visual Studio)上也遇到过同样的问题。最后,我决定使用SSH协议克隆我的回购,因为我更喜欢它而不是禁用SSL验证。

你只需要生成一个SSH密钥,你可以这样做…# EYZ0

ssh-keygen

然后,在yout git主机上导入公钥(如Azure Devops, Github, Bitbucket, Gitlab等)。

这可能会帮助一些遇到这种错误的人。如果您正在跨VPN工作,并且它断开连接,您也可以得到此错误。简单的解决方法是重新连接VPN。

2021年1月-在VS2019中通过设置菜单和gt来解决这个问题;Git祝辞设置在Git全局设置>密码网络提供商;[安全通道]代替[OpenSSL]

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

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

git config --global http.sslbackend secure-transport

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

我在使用visual studio时出现了这个错误。当您在Visual Studio选项窗口中将加密网络提供程序设置设置为OpenSSL时,就会发生这种情况。当我将设置更改为安全通道时,它为我解决了这个问题。这个设置一定是在我升级我的VS时为我设置的。

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

Git配置——global http。sslVerify假

我已经通过在${HOME}/中添加以下条目解决了这个问题。gitconfig文件

(远程“origin")

代理=

在大多数情况下,当你的机器启用代理时,就会发生这种情况,所以上面提到的条目将解决这个问题。

在使用Windows时,问题在于git默认使用&;linux &;加密后端。从Git for Windows 2.14开始,您可以配置Git使用内置的Windows网络层channel作为加密后端。要做到这一点,只需在GIT客户端运行以下命令:

git config --global http.sslbackend schannel

这意味着它将使用Windows证书存储机制,您不需要显式地配置curl CA存储(http.sslCAInfo)机制。

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

Git配置——global http。sslVerify假

您可能遇到了DNS问题,而不是证书问题,因此在禁用Git shell中的SSL验证之前,您应该排除DNS问题。诸如此类的案例已经在https-issues-possibly-related-to-dns这样的问答论坛上被提及。如果您在Windows上使用WSL作为终端,那么您可以尝试运行sudo echo nameserver 8.8.8.8 > /etc/resolv.conf,然后发出git命令,看看是否有区别。这似乎不是一个永久的DNS修复(只持续您的终端会话的生命周期),但它可以帮助您确定这是一个DNS问题,而不是证书问题。你也可以在配置网络以使用公共DNS时,请参阅此文档。同样,这只是为了帮助您确定是否需要调整DNS设置以帮助解决证书问题。

我试着跟随,它工作✅

git config --global http.sslVerify false

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

  1. 右键单击它并选择Install Certificate。将出现“证书导入向导”。选择# EYZ1。按Next,确认。

  2. 选择Place all certificates in the following store,按Browse,然后选择Trusted Root Certification AuthoritiesOKFinish

enter image description here

此外,您还可以检查其他应用程序是否可以获取、拉取或推送数据。例如,在Android StudioIDEA中,你应该在Settings中选择这个复选框:Use credential helper