SSL证书问题:无法获取本地颁发者证书。
我在Windows 7-客户端计算机的受信任的根证书颁发机构中安装了自签名证书。我可以在Internet Explorer中浏览到HTTPS存储库URL,而不会出现错误消息。
Philip Kelley的博客文章解释说cURL不使用客户端计算机的证书存储。我按照博客文章的建议创建了
curl-ca-bundle.crt
的私有副本,并将Git配置为使用它。我确定Git正在使用我的副本。如果我重命名副本; Git抱怨文件丢失。我粘贴了证书,如博客文章中所述,我仍然收到消息“无法获取本地发行者证书”。
我通过HTTPS克隆GitHub Repository来验证Git仍在工作。
我唯一看到的与博客文章不同的是我的证书是根-没有链可以到达它。我的证书最初来自单击IIS8 IIS管理器链接“创建自签名证书”。也许这会使证书与cURL期望的有所不同。
我如何让Git / cURL接受自签名证书?
#1 楼
如果要完全禁用SSL验证,请打开Git Bash并运行命令。git config --global http.sslVerify false
注意:此解决方案可能使您容易受到中间人的攻击攻击。
,因此请尽快重新启用验证:
git config --global http.sslVerify true
评论
该答案通过允许中间人攻击而破坏了SSL的安全性。其他答案已经说明了如何配置git以信任您需要的特定证书。
–dsh
2015年12月4日15:37
确实,这是一个可怕的答案,您甚至没有告诉他们重新打开SSL。这就是为什么发生安全漏洞的原因。
– Edgar Aroutiounian
16-2-2在23:22
如果您使用的是Gitblit,那么除了sshVerify false之外,没有其他选择。
–萨米尔
16 Mar 11 '16 at 6:28
要为单个git命令禁用TLS / SSL验证,请使用以下命令:git -c http.sslVerify = false clone https://domain.com/path/to/git
– Maxim Suslov
16年6月30日在9:47
下面已经提供了几种解决方案,我已经提出了缺点。因此,由您决定要选择哪种解决方案来解决问题。
–萨米尔
18年3月31日在15:13
#2 楼
问题是默认情况下git使用“ Linux”加密后端。从Windows 2.14的Git开始,您现在可以将Git配置为使用内置的Windows网络层SChannel作为加密后端。 。这意味着您将使用Windows证书存储机制,而无需显式配置curl CA存储机制:https://msdn.microsoft.com/zh-cn/library/windows/desktop/aa380123(v= vs.85).aspx
只需执行:
git config --global http.sslbackend schannel
应该会有所帮助。
使用schannel是通过现在是在Windows上安装git时的标准设置,此外,如果可能的话,建议不要再通过SSH检出存储库,因为https易于配置且不太可能被防火墙阻止,因此失败的可能性较小。
评论
但是请注意,此解决方案会使git config --global http.sslCAInfo
–约翰尼·王(Johnny Wong)
19年2月15日在7:36
#3 楼
我也有这个问题。就我而言,我试图获得一个接收后的Git钩子,以便每次推送时更新服务器上的工作副本。尝试按照您链接到的博客中的说明进行操作。不适用于我,并且按用户覆盖设置似乎也不起作用。我最后要做的是禁用SSL验证(如文章所述) )作为整个Git。不是完美的解决方案,但是直到我找到更好的解决方案,它才会起作用。
我编辑了位于以下位置的Git配置文本文件(使用我最喜欢的行尾中性应用程序,如Notepad ++)。 br />
C:\ Program Files(x86)\ Git \ etc \ gitconfig
在[http]块中,我添加了一个禁用选项sslVerify。完成后看起来像这样:
[http]
sslVerify = false
sslCAinfo = /bin/curl-ca-bundle.crt
达到了目的。
注意:
这将禁用SSL验证,因此不建议将其作为长期解决方案。
您可以禁用每个存储库,但仍然不能使用很好,但是可以本地化设置。
随着LetsEncrypt.org的出现,现在非常简单,自动化并且可以自由地将SSL设置为自签名证书的替代方法,并且无需关闭sslVerify 。
评论
这违反了SSL的目的。
– syaz
2014年9月8日7:00
您可以使用命令“ git config --global http.sslVerify false”禁用SSL验证
– CleanCoder
2014年10月21日在21:21
感谢您指出sslCAinfo配置条目;但我没有赞成这个答案,因为在git系统范围内永久禁用SSL并没有多大意义(您尝试过在系统范围内禁用它,然后进行克隆,然后重新启用它,然后在新克隆的仓库的本地git配置?)。
– 7heo.tk
15 Mar 30 '15 at 0:19
对于一次性命令,无需更改配置文件:git -c http.sslVerify = false clone https:// ...
–点
16年1月13日在20:23
更好的解决方法是:blogs.msdn.microsoft.com/phkelley/2014/01/20/…
– Warren P
16年4月25日在16:55
#4 楼
kiddailey我认为已经很接近了,但是我不会禁用ssl验证,而只是提供本地证书:在Git配置文件中
[http]
sslCAinfo = /bin/curl-ca-bundle.crt
或通过命令行:
git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
评论
在Windows的git上,这是git config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
– Karsten Tinnefeld
16-9-29在13:20
或者对我来说git config --global http.sslCAinfo / c / Program \ Files \ \(x86 \)/ Git / bin / curl-ca-bundle.crt
– Sparrowt
16年11月24日在10:31
对于MacPorts上的用户,这是git config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
– miken32
17年8月14日在22:43
在Git 2.8中,您可以使用git config --list --show-origin来查看http.sslCAinfo配置的位置
–安尼什
18年8月15日在15:22
我在Mac上的证书位置是:〜/ macports / share / curl / curl-ca-bundle.crt
–user3282611
18年8月28日在15:42
#5 楼
我也面临这个问题。最后,通过从此MSDN博客获得指导来解决。Update
实际上,您需要在git的证书文件curl-ca-bundel.cert中添加证书。 Git \ bin目录。
步骤
在浏览器中打开您的github页面,然后单击地址栏中的锁定图标。
在打开的小窗口中弹出窗口导航到“查看证书”链接,它将打开一个弹出窗口。
在其中导航到“证书”选项卡(本例中为第3个)。选择顶级节点,即根证书。然后按底部的“复制证书”按钮并保存文件。
在文件浏览器中,导航至Git \ bin目录,然后在文本编辑器中打开curl-ca-bundle.crt。
打开导出的证书文件(在步骤2中, 3)也在文本编辑器中。
将所有内容从导出的证书复制到curl-ca-bundle.crt的末尾,然后保存。
最后检查状态。请注意,在编辑之前请备份curl-ca-bundle.crt文件,以确保安全。
评论
“导航Git \ bin目录并打开curl-ca-bundle.crt” git \ bin中没有curl-ca-bundle.crt!
–安东K
15年9月18日在18:38
@AntonK(如果不存在),在记事本中创建一个自己,然后使用curl-ca-bundle.crt重命名。其他步骤保持不变。
– Nadeem Jamali
15年9月18日在20:03
@AntonK可能仅称为ca-bundle.crt,位于mingw64 \ ssl \ certs或mingw32 \ ssl \ certs中。
–伊恩·坎普(Ian Kemp)
2015年11月4日在10:46
将此用于Atlassian的SourceTree。捆绑的GIT安装位于%userprofile%\ appdata \ local \ attlassian \ sourcetree \ git_local中。 curl-ca-bundle.crt已经存在,附加了我的base64编码的导出根证书。
– Xanothos
16年6月9日在11:31
#6 楼
使用makecert for Development SSL解决此问题的方法已为我解决。我不知道为什么,但是IIS管理器中由简单的“创建自签名证书”链接创建的证书不能执行此操作。招。在创建和安装自签名CA Root的链接问题中,我遵循了该方法。然后使用该证书为我的服务器颁发服务器身份验证证书。我将它们都安装在IIS中。
我的情况与原始问题中引用的博客文章相同。将根证书复制/粘贴到curl-ca-bundle.crt中后,就满足了git / curl组合的要求。
评论
“我不知道为什么,但是由IIS管理器中的简单'创建自签名证书'链接创建的证书无法解决问题……”-据我所知,它会创建格式错误的证书。创建X.509证书时有很多规则。 “尽力使它工作”不再有效。另请参阅如何与证书颁发机构签署证书签名请求以及如何使用openssl创建自签名证书?
– jww
17年9月1日在3:48
这对我有用,但是我暂时挂断了“将它们都安装在IIS中”部分。为了让他人使用...服务器证书是在IIS中分配的,根CA需要通过Windows证书管理器实用程序(certmgr.msc)导入“受信任的根证书颁发机构”
–菲利普
18年4月1日在17:58
#7 楼
为了避免完全禁用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验证为已关闭。
评论
可能值得注意的是--global选项不是必需的:如果省略--global,则该设置仅适用于该特定的git repo。
–韦斯·特纳
19 Mar 3 '19 at 7:07
#8 楼
我刚刚遇到了同样的问题,但是在Windows上使用sourcetree。对于Windows上的普通GIT,也执行相同的步骤。按照以下步骤,我能够解决此问题。获取服务器证书树
可以使用chrome来完成。
导航到服务器地址。
单击挂锁图标并查看证书。
将所有证书链导出为base64编码文件(PEM)格式。
将证书添加到GIT信任配置文件的信任链中
运行“ git config --list”。
找到“ http.sslcainfo”配置,以显示证书信任文件的位置。
将所有证书复制到信任链文件中,包括“--BEGIN--”和“--END--”。
请确保将整个证书链添加到证书文件中。
这应解决以下问题:签名的证书并使用GIT。
我尝试使用“ http.sslcapath”配置,但这没有用。另外,如果我没有在证书文件中包括整个链,那么这也会失败。如果有人对此有帮助,请告诉我,因为对于新安装,必须重复上述操作。
如果这是系统GIT,则可以使用工具-> options
“ Git”选项卡以使用系统GIT,这也可以解决sourcetree中的问题。
评论
“如果我没有在证书文件中包含整个链,那么这也会失败”-我遇到了这个问题
–阿曼尼·基卢曼加(Amani Kilumanga)
16年11月15日在2:09
就包括整个链而言,我在github证书之上有两个证书。是否在sslcainfo.crt文件中以root-> next cert-> github cert的顺序包含它们?
– Jecoms
16 Dec 6'在20:51在
我只需要添加根证书就可以访问git repo包。
– Jecoms
16 Dec 6'在21:57
对于未来的读者。不知道这是否重要,但是我将“根”(最顶层)证书放在(http.sslcainfo)文件的末尾。然后,当我离开链中的根证书时,将该证书放在(http.sslcainfo)文件的上一个条目上方。
– granadaCoder
19年7月30日在22:55
#9 楼
如果是github存储库(或任何非自签名证书),则在安装Windows上的Git时在下面选择即可解决此问题。评论
您似乎回答了另一个问题。 OP的问题涉及Windows客户端上的自签名证书。
– jww
17年9月1日在3:44
@jww问题标题是git错误消息,即使repo不是自签名SSL也会显示该错误消息!
–贾瓦德·谢赫(Jawad Al Shaikh)
17年3月3日14:49在
这使我通过了错误,但是对于我来说,访问GitHub Enterprise要求生成一些密钥并添加公共/私有密钥。
–ΩmegaMan
18-2-19在23:57
如果自签名证书已由有用的Windows管理员通过组策略放入Windows证书存储中,则此答案也是一个很好的答案。
–JamesD
19年7月31日在9:08
#10 楼
我以前曾遇到过此问题,请使用以下配置解决它。只为它。评论
如果您还配置了git config --global http.sslCAInfo
–约翰尼·王(Johnny Wong)
19年2月15日在7:33
这是对我的问题的正确答案(而不仅仅是“禁用SSL验证” ~~)。不知道您只能为特定主机指定证书的位置。高手!
–RocíoGarcíaLuque
20-2-5在7:57
#11 楼
就我而言,因为我已经安装了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。
希望有帮助!
#12 楼
从此链接下载证书:
https://github.com/bagder/ca-bundle
将其添加到
C:\Program Files\Git\bin
和C:\Program Files\Git\mingw64\bin
然后尝试类似的方法:
git clone https://github.com/heroku/node-js-getting-started.git
#13 楼
使我感到困惑的一件事是路径的格式(在Windows PC上)。我最初是这样的:git config --global http.sslCAInfo C:\certs\cacert.pem
但这失败了,并出现了“无法获取本地发行者证书”错误。
最终起作用的是这个:
git config --global http.sslCAInfo "C:\certs\cacert.pem"
#14 楼
要解决especific错误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
,但是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 楼
错误推送失败
致命:无法访问
SSL证书问题:无法获取本地颁发者证书
原因
提交文件后在本地计算机上,当本地Git连接参数过时(例如,将HTTP更改为HTTPS)时,可能会出现“推送失败”错误。
解决方案
在以下目录中打开
.git
文件夹本地目录在代码编辑器或文本编辑器(VS Code,记事本,文本板)中打开
config
文件。用可从以下网址获取的最新HTTPS或SSH链接替换文件中的HTTP链接:相应的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)
#16 楼
我尝试了这里提到的所有方法,但是都没有运气。最后我发现了我做过的另一种方法
我的系统上为git生成了ssh公钥/私钥repo
将ssh密钥复制到您的git帐户,并在git
打开Git Bash。
粘贴以下文本,替换为您的GitHub电子邮件地址。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将使用提供的电子邮件作为标签来创建新的ssh密钥。
生成公用/专用rsa密钥对。
当系统提示您“输入要保存密钥的文件”时,请按Enter。这将接受默认文件位置。
输入要保存密钥的文件(/c/Users/you/.ssh/id_rsa):[按Enter]
#17 楼
就我而言,我必须对不同的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
参数。#18 楼
为了完整详细地说明上述所有答案的摘要。原因
之所以出现此问题,是因为git无法完成与git服务器的https握手,前提是您要访问的存储库存在。 >解决方案
从github服务器获取证书的步骤
在浏览器中打开您要访问的github
在地址栏中单击锁图标>单击“证书”
转到“证书路径”选项卡>在证书层次结构中选择最顶层的节点>单击“查看证书”
现在单击“详细信息”,然后单击“复制到文件”。 。>单击“下一步”>选择“基于64位编码的X509(.CER)”>将其保存到所需的任何路径。
将证书添加到本地git证书存储区的步骤
现在打开保存在记事本中的证书,并将内容与--Begin Certificate--和--end certificate--
一起复制到查找存储所有证书的路径对于您的git,请在cmd中执行以下命令。
git config --list
检查密钥'http.sslcainfo',对应的值为路径。 br />
现在打开该路径中存在的'ca-bundle.crt'。
注1:否则打开此文件管理员模式更新后,您将无法保存它。 (提示-您可以为此目的使用Notepad ++)
注2:在修改此文件之前,请在其他位置保留备份。
现在复制文件的内容第1步中提到的文件到第4步中的最终文件,就像在ca-bundle.crt中放置其他证书一样。
现在打开一个新终端,现在您应该能够执行与git服务器相关的操作使用https。
#19 楼
我在Azure DevOps(Visual Studio)中遇到了相同的问题。最后,我决定使用SSH协议克隆我的存储库,因为我更喜欢它而不是禁用SSL验证。您只需要生成一个SSH密钥,就可以这样做... SSH文档
ssh-keygen
,然后,将您的公钥导入到您的git主机上(例如Azure Devops,Github,Bitbucket,Gitlab等)。
#20 楼
这可能会帮助一些遇到此错误的人。如果您正在使用VPN,但该VPN已断开连接,则也可能会出现此错误。简单的解决方法是重新连接您的VPN。#21 楼
在运行composer更新/安装之前,请使用以下命令:git config --global http.sslverify false
评论
可能复制configure Git以接受特定https远程服务器的特定自签名服务器证书还检查是否允许您的本地网络将文件推送到github存储库。可能存在一些防火墙或防病毒限制。
如果在使用Bower时遇到此错误,请创建一个内容为{“ strict-ssl”:false}的.bowerrc文件。不用了,谢谢我,谢谢这个家伙:stapp.space/fight-with-2我已经连续5个小时与这个错误作战了!
可能会对某人有所帮助:我正在使用gitlab,如果通过https克隆,则会遇到此错误。但是,如果我使用ssh,那么它就可以正常工作。