我被困在防火墙后面,所以必须使用HTTPS来访问我的GitHub存储库。 我在Windows XP上使用cygwin 1.7.7。
我已经尝试将遥控器设置为https://[email protected]/username/ExcelANT.git,但是提示输入密码,但是一旦我输入密码就没有做任何事情。
https://username:github.com/username/ExcelANT.git并从头开始克隆空的repo,但每次它都给我同样的错误
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/username/ExcelANT.git/info/refs
打开GIT_CURL_VERBOSE=1给了我
* About to connect() to github.com port 443 (#0)
* Trying 207.97.227.239... * successfully set certificate verify locations:
* CAfile: none
CApath: /usr/ssl/certs
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
* Expire cleared
* Closing connection #0
* About to connect() to github.com port 443 (#0)
* Trying 207.97.227.239... * successfully set certificate verify locations:
* CAfile: none
CApath: /usr/ssl/certs
* SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
* Expire cleared
* Closing connection #0
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/username/ExcelANT.git/info/refs
1
| fatal: HTTP request failed |
这是我的防火墙,cygwin还是什么问题?
我没有在Git配置中设置HTTP代理,但是它是一个需要NTLM身份验证的ISA服务器,而不是基本身份,所以除非有人知道如何强制git使用NTLM,否则我会被打破。
-
如果我将http.sslVerify设置为false,那么连接是否安全? 这是好用的路径吗? 在我们之间使用pfsense防火墙。 现在,用户配置文件上的.gitconfig文件为空。
问题是您没有在系统上安装任何证书颁发机构证书。并且这些证书不能与cygwin的setup.exe一起安装。
更新:在cygwin中安装Net / ca-certificates包(感谢dirkjot)
有两种解决方案:
实际上安装根证书。 Curl家伙为你提取了Mozilla的证书。
cacert.pem文件正是您要找的。此文件包含> 250个CA证书(不知道如何信任此数量的ppl)。您需要下载此文件,将其拆分为单个证书,将它们放入/ usr / ssl / certs(您的CApath)并对其进行索引。
这是怎么做的。使用cygwin setup.exe安装curl和openssl包
执行:
1 2 3 4
| $ cd /usr/ssl/certs
$ curl http://curl.haxx.se/ca/cacert.pem |
awk '{print >"cert" (1+n)".pem"} /-----END CERTIFICATE-----/ {n++}'
$ c_rehash |
重要提示:要使用c_rehash,您还必须安装openssl-perl。
忽略SSL证书验证。
警告:禁用SSL证书验证具有安全隐患。如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到中间人攻击。在将此作为解决方案之前,请确保完全了解安全问题和威胁模型。
1
| $ env GIT_SSL_NO_VERIFY=true git clone https://github... |
-
您不需要安装curl,只需使用wget:wget -O - http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_a fter=0} /-----END CERTIFICATE-----/ {split_after=1} {print >"cert" n".pem"}'
-
@Deebster,默认情况下安装wget会有效,对我来说不是。
-
我知道这是cygwin,但是如果有人使用Centos到达这里,那么.etm应该去/ etc / pki / tls / certs。
-
或者,您可以从Firefox中提取所有证书(使用插件),然后将它们从DER转换为PEM格式,如下所示:for i in *.der; do openssl.exe x509 -text -inform DER -fingerprint <"$i"> /usr/ssl/certs/"${i%.der}.pem"; done最后运行c_rehash并完成工作
-
不适合我 - 但是,我的路径中没有c_rehash。我试过重启我的shell。我还必须使用mkdir -p / usr / ssl / certs。我想知道我的Cygwin安装是否有所不同或遗漏了什么?此外,设置GIT_SSL_NO_VERIFY = true然后运行克隆操作会导致此错误:fatal: https://code.google.com/.../info/refs not found: did you run git update-server-info on the server?也许它会在重新启动后工作?
-
我不得不export OPENSSL=/c/OpenSSL/bin/openssl.exe让c_rehash找到openssl - 它抱怨从cygwin使用时没有找到C: OpenSSL
-
@glenviewjeff cygwin有自己的带有c_rehash的openssl包,可以和cygwin的setup.exe一起安装。但是我认为info / refs的问题有所不同:尝试使用你传递给git的url
-
我更喜欢将[http] sslVerify = no放在全局.gitconfig中的解决方案。见这里:linux.die.net/man/1/git-config
-
在我的情况下,这不起作用,但是这个解决方案确实有所不同,因为git正在/usr/ssl/certs/ca-bundle.crt中寻找文件,这就是我所说的。
-
这个答案是对的。只需安装cygwin ca-certificates包即可获取缺少的根证书。为什么这个答案得到这么多的答案?
-
我不会添加这么大的根证书包,只会添加该特定存储库的CA或服务器证书。例如,使用openssl s_client --printcerts --connect server:port,您可以获得任何SSL服务器的证书的PEM转储。
-
它对我有用。在运行c_rehash之前,需要yum install openssl-perl(以centos为单位)
-
对于使用Debian / Ubuntu的任何人来说,证书都存储在/etc/ssl/certs/中
-
请勿关闭SSL证书验证。这在整个行业的工具和应用程序代码中经常发生。它会打开一个中间人攻击的人。如果您打算使用SSL,请正确使用它。
-
c_rehash命令一直为我说bad interpreter: permission denied,所以我不能应用这个解决方案: - /
-
$ env GIT_SSL_NO_VERIFY = true git clone github ...这很有效
-
在Win7中...设置GIT_SSL_NO_VERIFY = true
-
只是详细说明上面的注释...在Win7中,我设置了一个环境var ..."set GIT_SSL_NO_VERIFY = true",然后使用bash shell for msysgit来克隆一个repo。
-
非常感谢你,这为我解决了这个问题。此信息(c_rehash)不在任何其他帖子中。
-
答案中的curl步骤对我不起作用 - awk抱怨语法错误。我不得不稍微修改一下:curl http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1 {n++; split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print >> ("cert" n".pem"); close("cert" n".pem")}'。使用awk version 20070501和Mac OS X 10.9.2。
-
git使用libcurl,它使用openssl(至少在我构建的版本中)。如果您构建自己的版本的东西,则libcurl会在其查找CA证书的位置发生更改。配置curl时,请使用--with-ca-path = DIR配置选项,并将其指向openssl放置证书的位置。
-
如果我将http.sslVerify设置为false,那么连接是否安全?这是好用的路径吗?在我们之间使用pfsense防火墙。现在,用户配置文件上的.gitconfig文件为空。
-
解决方案1必须删除!,设置GIT_SSL_NO_VERIFY = true - 那么为什么SSL的目的?
-
与awk分裂可能很复杂;你也可以使用split -p"-----BEGIN CERTIFICATE-----" [filename]
注意:禁用SSL验证具有安全隐患。当您使用Git通过网络传输数据时,它允许中间人攻击。在将此作为解决方案之前,请确保完全了解安全隐患。或者更好的是,安装根证书。
一种方法是禁用SSL CERT验证:
1
| git config --global http.sslVerify false |
这将阻止CURL验证HTTPS认证。
仅适用于一个存储库:
1
| git config http.sslVerify false |
-
如果您不想编辑全局设置(例如所有回购),请排除--global
-
你能不能补充说明这是多么危险?
-
这是一个糟糕的主意。有证据证明应该验证证书。如果您没有将证书验证为可信任,那么任何人都可以生成证书,并且您可能容易受到中间人攻击的影响。
-
不要关闭SSL验证!
-
如果您没有其他选择,请执行此操作。如果你不知道自己在做什么,这是非常危险的
-
对于所有"不要做"的人:当然,这根本不是最安全的方法。但是,完全不使用SSL是更好的选择!因为有些人只运行他们的私人简单git服务器就可以了。当然,对于任何真正的安全性,它都是NO GO设置。最不安全的事情是通过网络发送普通字节。
-
如果想要启用SSL验证,那么有人需要创建一种方法使其工作,而无需手动安装根证书。也许如果他们刚刚与git或其他东西捆绑在一起,那就可以解决这个问题。
-
应该删除这个答案。这导致至少247人做错事。
-
唯一的希望就是点击它。
-
它不会"禁用"SSL,您仍然使用安全连接,但没有验证您实际连接到正确的服务器。
-
宇宙倾向于遵循阻力最小的路径。
-
对于那些拥有自签名证书的私人服务器的人来说,这将有所帮助。这家伙正在提供一个解决方案..不是每个人都会同意,但它可能会解决某些问题。这就是这个网站的意义所在。 StackOverflow充满了意见 - 不是每个人都会同意其他人的想法和决定。说它应该删除是疯了。
-
@TravisWhidden它需要对安全隐患有明确的警告。它现在做了,因为我在一段时间后编辑了它。
-
@halfer为什么编辑? (a)这是一个编辑的说明,它不是原作者的注释,(b)警告人们有点难以伤害,否则人们往往会忽视问题(你只需要看一下upvotes的数量)在这个答案,建议一个不安全的解决方案...)
-
嗨@Bruno。我打赌我们的编辑指南(只要我们有任何一个)会阻止人们进行标记为来自第三方的编辑(所以'编辑来自halfer','编者注','(Ed)'等。都会灰心丧气)。我很确定任何'编辑'附录都不鼓励,想到它 - 它们是要合并到原始帖子中。这已经被MSO,iirc所涵盖。
-
@halfer是否有编辑指南这样说?我更倾向于说这样的说明被明确标记为来自第三方编辑,直接明确初始作者可能不认可它(至少出于对作者的尊重)。至于大胆,更大的警告对于安全问题并不是坏事。对于SO来说这是一个非常可悲的事实,这是目前ssl标签上第四个最受欢迎的答案,但它暗示了一种不安全的解决方案:-(
-
很高兴找到这个答案。我们的服务器上有一个实际的CA颁发的证书,但由于某种原因,命令行git(Android Studio所依赖的)拒绝承认它(它曾经,但现在不再)。 Visual Studio和Netbeans都认可我们的证书很好,但看起来像是在git中打破了。我尝试使用Netbeans推送Android Studio,但这是不行的。这是我能够推动工作的唯一方式。
-
几乎就是上面所说的。有工作需要推动,也许google和摆弄大约一个小时的东西,我无法弄清楚,好吧,工作必须完成,sslverify = false并发送电子邮件给IT,如果他们关心它或不。
-
如果我落后于受信任的防火墙,大公司支持的防火墙,风险是否会有所减轻?
-
@PeterStegnar不,这不是"更好的选择"。充其量它稍微好一些。任何可以拦截和操纵您的HTTP明文字节的人也可以拦截并替换证书,然后在使用冒名顶替者证书解密后读取和操作您的HTTPS密文字节。在没有验证证书的情况下使用SSL / TLS获得的唯一好处是流量内容对被动侦听器是隐藏的,但任何活跃的攻击者只会稍微不方便。
-
如果我将http.sslVerify设置为false,那么连接是否安全?这是好用的路径吗?在我们之间使用pfsense防火墙
-
如果我将http.sslVerify设置为false,那么连接是否安全?这是好用的路径吗?在我们之间使用pfsense防火墙。现在,用户配置文件上的.gitconfig文件为空。
-
但有一点,如果你有内部git服务器并且你知道你在防火墙后运行,也许没有必要验证证书,因为它不会有任何风险。
-
@RicardoSilva那时候,使用ssl的是什么?
我希望Git使用更新的证书包而不替换我整个系统使用的证书包。以下是如何让Git在我的主目录中使用特定文件:
1 2
| mkdir ~/certs
curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem |
现在更新.gitconfig以将其用于对等验证:
1 2
| [http]
sslCAinfo = /home/radium/certs/cacert.pem |
注意我正在使用绝对路径。 Git在这里没有路径扩展,因此如果没有丑陋的kludge就不能使用~。或者,您可以跳过配置文件并通过环境变量GIT_SSL_CAINFO设置路径。
要解决此问题,请设置GIT_CURL_VERBOSE=1。 Git正在使用的CA文件的路径将显示在输出中以"CAfile:"开头的行上。
-
对我来说,这是最好的答案:它适用于unix(实际上是NetBSD),它只影响git而不影响系统上的任何其他内容,并且它不需要root / Administrator访问权限。谢谢!
-
完美,甚至可以做得更好。我用这个文件替换了我的Ubuntu 8.04 LTS上的旧/etc/ssl/certs/ca-certificates.crt,它神奇地工作了!
-
@Eric感谢提及NetBSD因为它意味着我找到了这个答案。 NetBSD有点奇怪。我安装了OpenSSL软件包,但即使这样也不能获得证书,只是一个占位符目录。
-
+200更棒,它也适用于我的Ubuntu盒子。无需在git中禁用证书检查,只需执行此快速修复即可。
-
很好的答案,您可以使用以下命令跳过手动编辑?/ .gitconfig文件:git config --global http.sslCAinfo"$HOME/certs/cacert.pem"
-
@ Michael-O的评论肯定是Hardy 8.04的解决方案。很好,很容易到底哈哈!
-
这个解决方案很棒,简单而有效,适用于红帽
-
!与@AronAhmadia评论 - 这是最好的答案!
-
如果我将http.sslVerify设置为false,那么连接是否安全?这是好用的路径吗?在我们之间使用pfsense防火墙。
如果您想修复证书问题,请随意跳过此答案。这个答案涉及通过防火墙隧道ssh,这是恕我直言,更好的解决方案来处理防火墙/代理的东西。
有一种比使用http访问更好的方法,那就是使用github在ssh.github.com服务器的端口443上提供的ssh服务。
我们使用一种叫做开瓶器的工具。这可以通过CygWin(通过cygwin主页设置)和Linux使用您喜欢的打包工具。对于MacOSX,它至少可以从macports和brew中获得。
命令行如下:
1
| $ corkscrew <proxyhost> <proxyport> <targethost> <targetport> |
proxyhost和proxyport是https代理的坐标。 targethost和targetport是隧道到的主机的位置。 authfile是一个文本文件,其中包含由冒号分隔的代理服务器用户名/密码的1行
例如:
安装使用"普通"ssh协议进行git通信
通过将此添加到~/.ssh/config,此技巧可用于正常的ssh连接。
1 2 3 4 5
| Host github.com
HostName ssh.github.com
Port 443
User git
ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth |
现在你可以通过ssh-ing到gitproxy来测试它
1 2 3 4 5
| pti@pti-laptop:~$ ssh github.com
PTY allocation request failed on channel 0
Hi ptillemans! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
pti@pti-laptop:~$ |
(注意:如果你之前从未登录过github,ssh会要求将服务器密钥添加到已知的hosts文件中。如果你是偏执狂,建议验证RSA指纹到github网站上显示的那个上传了你的密钥)。
当您需要使用其他密钥访问存储库时,此方法略有不同,例如:将您的私人帐户与专业帐户分开。
1 2 3 4 5 6 7 8 9
| #
# account dedicated for the ACME private github account
#
Host acme.github.com
User git
HostName ssh.github.com
Port 443
ProxyCommand corkscrew <proxyhost> <3128> %h %p ~/.ssh/proxy_auth
IdentityFile ~/.ssh/id_dsa_acme |
请享用!
我们多年来一直在Linux,Mac和Windows上使用它。
如果您愿意,可以在此博客文章中阅读更多相关信息
-
我放弃了让它工作,但又看了一遍,并让它工作。将.ssh / config更改为> Host ssh.github.com >User oharab >Hostname ssh.github.com >Port 443 >PreferredAuthentications publickey >IdentityFile ~/.ssh/id_rsa 并使用git clone [email protected]:oharab/log4vba.git进行克隆,立即启动并运行。
-
对不起格式化,我无法让它工作!
-
我只是贬低,因为下面的答案更有帮助,但不幸的是,stackoverflow总是把接受的答案放在首位,即使它只是一个单一环境的答案。
-
在任何情况下,我都更新了答案,因为我发现通过https代理进行SSL隧道传输仍然是比使用HTTPS证书或禁用它们并最终使用性能更低,用户友好且安全性更低的解决方案更好的解决方案。好吧,很多赞成票证明我错了,但无论如何我都坚持自己的观点。
请注意,为了让我能够正常工作(在CentOS 5.6上安装RVM),我必须运行以下命令:
export GIT_SSL_NO_VERIFY=true
之后,将RVM安装程序卷入bash的标准安装程序很有效:)
-
与git config相同的效果--global http.sslverify false
-
这非常危险! SSL证书验证的重点是保护您的代码在通过HTTPS传输时不被篡改!禁用它意味着恶意用户可以在推送和获取时将漏洞和其他令人讨厌的东西插入到代码中!
-
如果我将http.sslVerify设置为false,那么连接是否安全?这是好用的路径吗?在我们之间使用pfsense防火墙
-
@Ravi这种联系在技术上是可行的,是的,但这绝对不是一个好主意。如果您的git源和本地计算机都是内部的并且在您的组织的控制之下,那么它可能是可以通过的,但是根据用户456814的注释,禁用验证会使您受到MITM攻击。
一个非常简单的解决方案:用git://替换https://
使用git://the.repository而不是https://the.repository会起作用。
我在Windows上使用TortoiseGit遇到了这个问题,这解决了它。
-
我猜这是有效的,因为它不验证git://的ssl。如上面的答案中所述,禁用ssl验证存在安全风险。
-
@danijar之所以能起作用,是因为它根本不使用SSL。 git://协议使用SSH,它使用SSH公钥和私钥对进行身份验证和加密,而不是SSL证书。
-
@Cupcake感谢您指出这一点。
-
@Cupcake git://不使用SSH。 请参阅SSH协议和Git协议。
-
@ nyuszika7h哦,你说得对。 我一直git://与[email protected]:user/project.git混淆,这是SCP-ish语法。
-
只是为我节省了大量的谷歌搜索时间......
最流行的答案(Alexey Vishentsev)有:
The problem is that you do not have any of Certification Authority
certificates installed on your system. And these certs cannot be
installed with cygwin's setup.exe.
然而,最后一个断言是错误的(现在,或者一直是,我不知道)。
你所要做的就是去cygwin设置并包括'ca-certificates'包(它在Net下)。这对我有用。
-
cygwin git错误显示CAfile: /etc/ssl/ca-bundle.crt而cygwin ca-certificates包安装/usr/ssl/certs/ca-bundle.crt。因此,必须编辑~/.gitconfig以指定位置:[http]然后sslCAinfo = /usr/ssl/certs/ca-bundle.crt
-
@maxpolk:我会建立一个链接,但效果是一样的。这显然是cygwin git中的一个错误,你考虑过提票吗? sudo ln -s /usr/ssl/certs/ca-bundle.crt /etc/ssl/
-
截至2013-5-23,cygwin git在https上运行良好:如果你碰巧安装了cygwin的ca-certificates。
-
我从这个问题来到这里,这表明可以在这里找到答案。但是,链接的答案和这个答案都不适合我; TortoiseSVN保持输出error: SSL certificate problem, verify that the CA cert is OK.
-
我们到底在哪里安装包管理器中的cygwin安装文件? ca证书是否需要在Git的bin文件夹中?
-
@ user1650978:你应该使用cygwin安装程序(名为setup.exe)并安装这个额外的软件包。就这些。无需复制文件和/或指定目的地。
-
@dirkjot谢谢先生!
我知道最初的问题列出了Cygwin,但这里是CentOS的解决方案:
1
| curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt |
资料来源:http://eric.lubow.org/2011/security/fixing-centos-root-certificate-authority-issues/
-
这对我很有用;不过,你可能应该首先备份原始版本,正如OP建议的那样。当Github更新他们的证书时,如果您使用的是较旧的系统,似乎会发生这种情况。
-
在CentOS 5上,我用yum update openssl修复了它,它也更新了ca-bundle。
-
如果您要遵循此选项,则应在使用之前验证文件的SHA-256哈希值。您可以通过其他方式获取当前文件的sha256sum,而不是您正在设置的卷曲(如已安全设置的其他机器上的浏览器),然后将其与sha256sum /etc/pki/tls/certs/ca-bundle.crt的输出进行比较以确保您得到了正确的文件。
在CentOS 5.x上,一个简单的yum update openssl更新了openssl包,它更新了系统ca-bundle.crt文件并为我修复了问题。
其他分布也是如此。
-
味道好极了!这对我来说是Red Hat linux的旧安装(4.1.2)。谢谢!
要在将SSL验证设置为false时在Windows上进行克隆:
1
| git -c http.sslVerify=false clone http://example.com/e.git |
如果您想要克隆而不需要考虑全局设置。
如果你想要做的只是使用github.com的Cygwin git客户端,那么有一个更简单的方法,无需经历下载,提取,转换,拆分证书文件的麻烦。继续如下(我假设使用Cygwin和Firefox的Windows XP)
在Firefox中,转到github页面(任何)
单击地址栏上的github图标以显示证书
单击"更多信息" - >"显示证书" - >"详细信息",然后从最上面的一个开始选择层次结构中的每个节点;对于他们每个人点击"导出"并选择PEM格式:
-
GTECyber??TrustGlobalRoot.pem
-
DigiCertHighAssuranceEVRootCA.pem
-
DigiCertHighAssuranceEVCA-1.pem
-
github.com.pem
将上述文件保存在本地驱动器的某处,将扩展名更改为.pem并将其移至Cygwin安装中的/ usr / ssl / certs(Windows:c: cygwin ssl certs)
(可选)从bash运行c_reshash。
而已。
当然,这只会安装一个证书层次结构,即github所需的层次结构。您当然可以将此方法与任何其他站点一起使用,而无需安装200个您不一定信任的站点证书。
如果您使用的是Mac OS X,则可以通过homebrew安装ca-cert-bundle:
1 2
| $ brew install curl-ca-bundle
$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt |
该公式通过以下方式将证书捆绑包安装到您的共享:
1
| share.install 'ca-bundle.crt' |
share方法只是/usr/local/share的别名,curl-ca-bundle由Mozilla提供。这就是你在许多问题中被引用的内容。希望这会有所帮助,因为在Mac OS X上如何处理它并不是非常简单。brew install curl不会因为它只是桶而且不会链接(运行which curl将始终输出/usr/bin/curl) ,这是您的操作系统附带的默认值)。这篇文章也可能有一些价值。
您当然需要在安装homebrew之前禁用SSL,因为它是一个git repo。在SSL验证过程中出现错误时,只需执行curl所说的内容:
1
| $ echo insecure >> ~/.curlrc |
一旦homebrew与curl-ca-bundle一起安装,删除.curlrc并尝试在github上克隆一个repo。确保没有错误,你会很高兴。
注意:如果您使用.curlrc,请在测试完成后将其从系统中删除。此文件可能会导致重大问题,因此请将其用于临时目的并谨慎使用。如果您忘记从系统中清除它,brew doctor会抱怨。
注意:如果您更新您的git版本,则需要重新运行此命令,因为系统设置将被清除(它们是根据版本相对于git二进制文件存储的)。
跑完后:
1 2
| $ brew update
$ brew upgrade |
如果您获得了新版本的git,那么只需重新运行:
1
| $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt |
你会全力以赴。
最后,如果你有一个新版本的git,运行:
1
| $ git config -l --system |
应该给你一个错误
fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'
这是你的提示,你需要告诉git Mozilla ca-bundle的位置。
更新:
.curlrc可能会或可能不会解决您的问题。无论如何,无论是否需要手动下载,都只需在机器上安装Mozilla ca-bundle。这就是重要的。一旦你获得了ca-bundle,你就可以去了。只需运行git config命令并将git指向ca-bundle即可。
UPDATE
我最近不得不补充:
export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt到我的.zshenv点文件,因为我正在使用zsh。 git config选项适用于大多数情况,但是当通过SSL(例如rvm get stable)访问github时,我仍遇到证书问题。 @Maverick在他的评论中指出了这一点,但万一有人错过了它或者假设除了运行git config --system....命令之外他们不一定需要导出这个环境变量。谢谢,希望这会有所帮助。
UPDATE
看起来最近从自制软件中删除了curl-ca-bundle。这里有一个建议。
您需要将一些文件放入:
$(brew --prefix)/etc/openssl/certs
-
这对我很有用。谢谢。 (对不起,所以占位符文本说不要使用评论感谢或+1 - 人们怎么知道这是我最喜欢的答案?)。
-
您还可以尝试以下操作:export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt
-
嗨,我遇到了类似的问题(stackoverflow.com/questions/20939105/),当我尝试安装home-brew时会出现同样的问题。在这种情况下我该怎么办?在我的控制台中键入"git config --system http.sslcainfo /usr/local/share/ca-bundle.crt"会返回"错误:无法锁定配置文件/Applications/Xcode.app/Contents/Developer/usr/etc/ gitconfig:没有这样的文件或目录"。谢谢您的帮助!
-
@Mathieu,这很奇怪。好像你的系统指向一个相对于XCode的git版本。从你的终端运行'哪个git'的输出是什么?
我使用apt-cyg(一个类似于apt-get的优秀安装程序)解决了这个问题
轻松下载ca-certificates(包括Git等等):
1
| apt-cyg install ca-certificates |
注意:应首先安装apt-cyg。您可以从Windows执行此操作
命令行:
1 2
| cd c:\cygwin
setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim |
关闭Windows cmd,然后打开Cygwin Bash:
1 2
| wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin |
如果你使用基于debian的操作系统,你可以简单地运行
apt-get install ca-certificates
我一直在为Solaris Express 11遇到同样的问题。我花了一段时间,但我设法找到了需要放置证书的位置。根据/etc/openssl/openssl.cnf,证书的路径是/ etc / openssl / certs。我使用Alexey的上述建议放置了生成的证书。
您可以在命令行上使用openssl验证事情是否正常工作:
1
| openssl s_client -connect github.com:443 |
在我有一个rasbery pi
pi @ raspbmc:?$ git clone http://github.com/andreafabrizi/Dropbox-Uploader .git
克隆到'Dropbox-Uploader'......
错误:访问http:// github.com/andreafabrizi/Dropbox-Uploader.git/info/refs时SSL SSL证书(路径?访问权限?)问题
致命:HTTP请求失败
所以你是一个
1
| sudo apt-get install ca-certificates |
然后
1
| git clone http://github.com/andreafabrizi/Dropbox-Uploader.git |
工作
你检查过你的时间吗?
我绝对拒绝让我的git操作不安全,在尝试了这里提到的所有人之后,让我感到震惊的是,证书无法通过验证的一个可能原因是日期错误(证书到期日期或本地时钟)。
您可以通过在终端中键入date来轻松检查。在我的情况下(一个新的覆盆子Pi),本地时钟设置为1970,所以一个简单的ntpdate -u 0.ubuntu.pool.ntp.org修复了一切。对于rPi,我还建议您将以下脚本放在每日cron作业中(比如说/etc/cron.daily/ntpdate):
1 2
| #!/bin/sh
/usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1 |
通过在Windows cmd中暂时禁用GIT / curl ssl验证来改进RouMao的解决方案:
1 2
| set GIT_SSL_NO_VERIFY=true
git config --global http.proxy http://<your-proxy>:443 |
这个解决方案的好处是它只在当前的cmd窗口中生效。
-
这非常危险! SSL证书验证的重点是保护您的代码在通过HTTPS传输时不被篡改! 禁用它意味着恶意用户可以在推送和获取时将漏洞和其他令人讨厌的东西插入到代码中!
尝试使用.netrc文件,它将通过https进行身份验证。在主目录中创建一个文件调用.netrc并将其放入其中:
1
| machine github.com login myusername password mypass |
有关更多信息,请参阅此帖子:
https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj
-
这是证书验证问题,而不是身份验证问题 - 某些操作系统(包括OP运行的操作系统)没有CA发布github的新证书包含在库存列表中。
在我必须管理的协作开发平台上配置Git时遇到了同样的问题。
解决它:
-
我已经更新了服务器上安装的Curl版本。下载网站上的最新版本curland的下载页面按照安装程序安装程序卷曲
-
获取为服务器提供证书的颁发机构的证书。
-
将此证书添加到curl使用的CAcert文件中。在我的服务器上,它位于/etc/pki/tls/certs/ca-bundle.crt。
-
通过编辑.gitconfig文件配置git以使用此证书文件并设置sslcainfo路径。 sslcainfo= /etc/pki/tls/certs/ca-bundle.crt
-
在客户端计算机上,您必须获取证书并配置.gitconfig文件。
我希望这会对你们有些人有所帮助。
我尝试了一切,最终我查看了hosts文件,github随机输入了一下。删除别名修复了问题
%SYSTEMROOT% SYSTEM32 DRIVERS 等主机
我只是禁用了SSL证书身份验证并使用了简单的用户名密码登录,如下所示
您可以在终端中尝试此命令:
git config --global http.sslVerify false
我只需要Cygwin和git的证书,所以我做了@esquifit发布的内容。但是,我必须手动运行第5步,c_rehash在我的系统上不可用。我遵循了本指南:将CA证书安装到OpenSSL框架中。
从Github生成访问令牌并保存,因为它不会再出现。
1
| git -c http.sslVerify=false clone https://<username>:<token>@github.com/repo.git |
要么,
1 2
| git config --global http.sslVerify false
git clone https://github.com/repo.git |
我需要两件事:
转到cygwin设置并包含"ca-certificates"包(它在Net下)(如其他地方所示)。
告诉git在哪里找到已安装的证书:
GIT_SSL_CAINFO = / usr / ssl / certs / ca-bundle.crt GIT_CURL_VERBOSE = 1 git ...
(不需要详细选项)
或永久存储选项:
git config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
git ...
我遇到过同样的问题。
证书导入或取消设置ssl验证的命令不起作用。
结果是网络代理的过期密码。
有代理配置的条目。在我的Windows用户配置文件中的.gitconfig文件中。
我刚删除了整个条目,它又开始工作了。
在Mac OSX 10.5系统上,我能够通过一种简单的方法实现这一点。首先,运行github程序和测试,这对我来说没问题,表明我的证书确实没问题。
https://help.github.com/articles/generating-ssh-keys
然后我终于注意到另一个用于遥控器的url格式。我尝试了其他人,他们没有工作。
http://git-scm.com/book/ch2-5.html
一个简单的"git push myRemoteName"效果很好!
我最近(2014年7月)有一个类似的问题,在OS X(10.9.4)上发现有一个"DigiCert High Assurance EV Root CA"证书已经过期(虽然我还有另一个未过期的证书)。
打开钥匙串访问
搜索"DigiCert"的证书
查看菜单>显示过期的证书
我找到了两个名为"DigiCert High Assurance EV Root CA"的证书,一个在20131年11月到期,到期的一个在2014年7月(几天前)。删除过期的证书可以解决我的问题。
希望这可以帮助。
对于使用Msys / MinGW GIT的用户,请添加此项
1
| export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt |