我在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接受自签名证书?
答案 0 :(得分:188)
如果要完全禁用SSL验证,请打开Git Bash并运行命令。
git config --global http.sslVerify false
注意:此解决方案可能会让您受到类似中间人攻击的攻击。 因此,请尽快再次启用验证:
git config --global http.sslVerify true
答案 1 :(得分: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验证,不建议将其作为长期解决方案。
答案 2 :(得分:44)
kiddailey 我认为非常接近,但我不会禁用ssl验证,而只是提供本地证书:
在Git配置文件中
[http]
sslCAinfo = /bin/curl-ca-bundle.crt
或通过命令行:
git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
答案 3 :(得分:39)
这个问题的答案Using makecert for Development SSL为我解决了这个问题。
我不知道为什么,但是IIS Manager中简单的“创建自签名证书”链接创建的证书不起作用。我在创建和安装自签名CA Root的链接问题中遵循了该方法;然后使用它为我的服务器颁发服务器身份验证证书。我在IIS中安装了它们。
这使我的情况与原始问题中引用的博客文章相同。将根证书复制/粘贴到curl-ca-bundle.crt后,git / curl组合就会得到满足。
答案 4 :(得分:37)
我也遇到过这个问题。最后通过this MSDN Blog的指导得到解决。
<强>更新强>
实际上你需要在git的证书文件curl-ca-bundel.cert中添加证书,该文件位于Git \ bin目录中。
<强>步骤强>
最后检查状态。 请注意,在编辑之前备份curl-ca-bundle.crt文件以保持安全。
答案 5 :(得分:35)
问题是默认情况下git使用“ Linux”加密后端。
从Windows 2.14的Git开始,您现在可以将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
那应该有帮助。
到目前为止,在Windows上安装git时,使用schannel是标准设置,此外,建议不要再通过SSH检出存储库,因为https易于配置且不太可能被防火墙阻止,因此机会更少失败。
答案 6 :(得分:21)
为避免完全禁用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验证关闭时,可能会受到中间人攻击。
答案 7 :(得分:17)
我刚刚遇到了同样的问题,但在Windows上使用sourcetree同样适用于Windows上的普通GIT。按照以下步骤,我能够解决这个问题。
这可以解决您使用自签名证书和使用GIT的问题。
我尝试使用“http.sslcapath”配置,但这不起作用。此外,如果我没有在证书文件中包含整个链,那么这也将失败。如果有人对此有指示,请告诉我,因为必须重复以上新安装。
如果这是系统GIT,那么您可以使用TOOLS中的选项 - &gt;选项 使用系统GIT的GIt选项卡,然后这也解决了sourcetree中的问题。
答案 8 :(得分:6)
答案 9 :(得分:5)
2021 年 1 月 - 通过设置 Menu > Git > Settings > Git Global Settings > Cryptographic Network Provider > [Secure Channel] 而不是 [OpenSSL] 在 VS2019 中解决了这个问题
Git SSL certificate problem unable to get local issuer certificate (fix)
PS:不需要设置--global 或--local http.sslVerify false。我正在克隆一个没有使用任何自签名证书的 Azure DevOps 存储库。这似乎是 VS2019 或 Windows 版 Git 的问题。他们需要修复它!!
答案 10 :(得分:4)
就我而言,由于我已经为Windows 7安装了ConEmu Terminal,因此它在安装期间在ca-bundle
上创建了C:\Program Files\Git\mingw64\ssl\certs
。
因此,我必须在终端上运行以下命令才能使其正常工作:
$ 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时,我选择了与here相同的选项。
希望有帮助!
答案 11 :(得分:4)
禁用您的 ssl 验证(默认启用)。
检查您的 .gitconfig
文件。通常可在目录 ~/.gitcongh
中找到。
添加或覆盖下一行:
[http]
sslverify = false
执行以下命令。
git config --global http.sslverify false
如果您不想全局启用配置属性,请踩到您的存储库路径,然后执行。
git config http.sslverify false
答案 12 :(得分:4)
之前我遇到过这个问题,并使用以下配置解决它。
[http "https://your.domain"]
sslCAInfo=/path/to/your/domain/priviate-certificate
从git 2.3.1开始,你可以在http之后放置https://your.domain
来表示以下证书仅适用于它。
答案 13 :(得分:2)
git config --global http.sslbackend secure-transport
(更新到 Big Sюr 后必须这样做)
答案 14 :(得分:1)
要修复特定错误SSL certificate problem: unable to get local issuer certificate in git
我对“让我们加密证书”存在相同的问题。
我们只需要一个带有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
但是git pull说:
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
答案 15 :(得分:1)
C:\Program Files\Git\bin
和C:\Program Files\Git\mingw64\bin
然后尝试类似:git clone https://github.com/heroku/node-js-getting-started.git
答案 16 :(得分:0)
困扰我的一件事是路径的格式(在Windows PC上)。我原来有这个:
index.html
但是由于“无法获取本地发行者证书”错误而失败。
这终于奏效了:
git config --global http.sslCAInfo C:\certs\cacert.pem
答案 17 :(得分:0)
推送失败
致命:无法访问
SSL证书问题:无法获取本地发行者证书
在本地计算机上提交文件后,如果本地Git连接参数过时(例如,将HTTP更改为HTTPS),则可能会发生“推送失败”错误。
.git
文件夹config
文件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)
答案 18 :(得分:0)
我尝试了这里提到的所有方法,但是都没有运气。 终于,我找到了一种不同的方法
我的系统上为git repo生成的ssh公钥/私钥
将ssh密钥复制到您的git帐户,并在git中使用ssh而不是https 克隆。检查以下步骤以生成ssh密钥
打开Git Bash。
粘贴以下文本,替换为您的GitHub电子邮件地址。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将使用提供的电子邮件作为标签来创建新的ssh密钥。
生成公用/专用rsa密钥对。 当提示您“输入要在其中保存密钥的文件”时,请按Enter。这将接受默认文件位置。
输入要保存密钥的文件(/c/Users/you/.ssh/id_rsa):[按Enter]
答案 19 :(得分:0)
对于我来说,我必须对不同的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
参数。
答案 20 :(得分:0)
要完全详细地说明上述所有答案的摘要。
发生此问题的原因是,如果存在您要访问的存储库,则git无法完成与git服务器的https握手。
从github服务器获取证书的步骤
将证书添加到本地git证书存储区的步骤
现在打开在记事本中保存的证书,并复制内容---Begin Certificate--和--end certificate-
要查找所有为git存储的证书的路径,请在cmd中执行以下命令。
git config --list
检查键“ http.sslcainfo”,对应的值为路径。
现在打开该路径中存在的“ ca-bundle.crt”。
注意1:打开此文件管理员模式,否则更新后将无法保存它。 (提示-您可以为此使用Notepad ++ 目的)
注意2:在修改此文件之前,请在其他位置保留备份。
答案 21 :(得分:0)
我在Azure DevOps(Visual Studio)中遇到了相同的问题。最终,我决定使用 SSH 协议克隆我的存储库,因为我更喜欢它而不是禁用SSL验证。
您只需要生成SSH密钥即可,您可以这样做... SSH documentation
ssh-keygen
然后,将您的公钥导入到您的git主机上(例如Azure Devops,Github,Bitbucket,Gitlab等)
答案 22 :(得分:0)
这可能会帮助一些遇到此错误的人。如果您正在使用VPN,但该VPN已断开连接,则也可能会出现此错误。简单的解决方法是重新连接您的VPN。
答案 23 :(得分:0)
我在使用 Visual Studio 时发生了这个错误。当您在 Visual Studio 选项窗口中将加密网络提供程序设置设置为 OpenSSL 时,会发生这种情况。当我将设置更改为 Secure Channel 时,它为我解决了这个问题。这个设置肯定是我升级VS的时候设置的。
答案 24 :(得分:0)
解决了我的问题 git config --global http.sslBackend schannel
答案 25 :(得分:0)
git config --global http.sslVerify false
答案 26 :(得分:-5)
以前使用此命令运行composer update / install:
git config --global http.sslverify false