SSL certificate rejected trying to access GitHub over HTTPS behind firewall
我被困在防火墙后面,所以必须使用HTTPS来访问我的GitHub存储库。 我在Windows XP上使用cygwin 1.7.7。
我已经尝试将遥控器设置为
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
打开
* 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,否则我会被打破。
问题是您没有在系统上安装任何证书颁发机构证书。并且这些证书不能与cygwin的setup.exe一起安装。
更新:在cygwin中安装Net / ca-certificates包(感谢dirkjot)
有两种解决方案:
实际上安装根证书。 Curl家伙为你提取了Mozilla的证书。
这是怎么做的。使用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 |
重要提示:要使用
忽略SSL证书验证。
警告:禁用SSL证书验证具有安全隐患。如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到中间人攻击。在将此作为解决方案之前,请确保完全了解安全问题和威胁模型。
1 | $ env GIT_SSL_NO_VERIFY=true git clone https://github... |
注意:禁用SSL验证具有安全隐患。当您使用Git通过网络传输数据时,它允许中间人攻击。在将此作为解决方案之前,请确保完全了解安全隐患。或者更好的是,安装根证书。
一种方法是禁用SSL CERT验证:
1 | git config --global http.sslVerify false |
这将阻止CURL验证HTTPS认证。
仅适用于一个存储库:
1 | git config http.sslVerify false |
我希望Git使用更新的证书包而不替换我整个系统使用的证书包。以下是如何让Git在我的主目录中使用特定文件:
1 2 | mkdir ~/certs curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem |
现在更新
1 2 | [http] sslCAinfo = /home/radium/certs/cacert.pem |
注意我正在使用绝对路径。 Git在这里没有路径扩展,因此如果没有丑陋的kludge就不能使用
要解决此问题,请设置
如果您想修复证书问题,请随意跳过此答案。这个答案涉及通过防火墙隧道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行
例如:
1 | abc:very_secret |
安装使用"普通"ssh协议进行git通信
通过将此添加到
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上使用它。
如果您愿意,可以在此博客文章中阅读更多相关信息
请注意,为了让我能够正常工作(在CentOS 5.6上安装RVM),我必须运行以下命令:
之后,将RVM安装程序卷入bash的标准安装程序很有效:)
一个非常简单的解决方案:用git://替换https://
使用git://the.repository而不是https://the.repository会起作用。
我在Windows上使用TortoiseGit遇到了这个问题,这解决了它。
最流行的答案(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,但这里是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/
在CentOS 5.x上,一个简单的
其他分布也是如此。
要在将SSL验证设置为false时在Windows上进行克隆:
1 | git -c http.sslVerify=false clone http://example.com/e.git |
如果您想要克隆而不需要考虑全局设置。
如果你想要做的只是使用github.com的Cygwin git客户端,那么有一个更简单的方法,无需经历下载,提取,转换,拆分证书文件的麻烦。继续如下(我假设使用Cygwin和Firefox的Windows XP)
- GTECyber??TrustGlobalRoot.pem
- DigiCertHighAssuranceEVRootCA.pem
- DigiCertHighAssuranceEVCA-1.pem
- github.com.pem
而已。
当然,这只会安装一个证书层次结构,即github所需的层次结构。您当然可以将此方法与任何其他站点一起使用,而无需安装200个您不一定信任的站点证书。
如果您使用的是Mac OS X,则可以通过
1 2 | $ brew install curl-ca-bundle $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt |
该公式通过以下方式将证书捆绑包安装到您的共享:
1 | share.install 'ca-bundle.crt' |
您当然需要在安装
1 | $ echo insecure >> ~/.curlrc |
一旦
注意:如果您使用
注意:如果您更新您的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 |
应该给你一个错误
这是你的提示,你需要告诉git Mozilla ca-bundle的位置。
更新:
UPDATE
我最近不得不补充:
UPDATE
看起来最近从自制软件中删除了curl-ca-bundle。这里有一个建议。
您需要将一些文件放入:
我使用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操作不安全,在尝试了这里提到的所有人之后,让我感到震惊的是,证书无法通过验证的一个可能原因是日期错误(证书到期日期或本地时钟)。
您可以通过在终端中键入
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窗口中生效。
尝试使用.netrc文件,它将通过https进行身份验证。在主目录中创建一个文件调用
1 | machine github.com login myusername password mypass |
有关更多信息,请参阅此帖子:
https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj
在我必须管理的协作开发平台上配置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
1 | ssh -T [email protected] |
然后我终于注意到另一个用于遥控器的url格式。我尝试了其他人,他们没有工作。
http://git-scm.com/book/ch2-5.html
1 | [email protected]:MyGithubUsername/MyRepoName.git |
一个简单的"git push myRemoteName"效果很好!
我最近(2014年7月)有一个类似的问题,在OS X(10.9.4)上发现有一个"DigiCert High Assurance EV Root CA"证书已经过期(虽然我还有另一个未过期的证书)。
我找到了两个名为"DigiCert High Assurance EV Root CA"的证书,一个在20131年11月到期,到期的一个在2014年7月(几天前)。删除过期的证书可以解决我的问题。
希望这可以帮助。
对于使用Msys / MinGW GIT的用户,请添加此项
1 | export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt |