SSL证书被拒绝,试图通过HTTPS在防火墙后面访问GitHub
我被卡在防火墙后面,所以必须使用HTTPS访问我的GitHub存储库。 我在Windows XP上使用cygwin 1.7.7。
我已经尝试将远程设置为https://username@github.com/username/ExcelANT.git
,但推送提示输入密码,但是一旦我输入密码就不会执行任何操作。 https://username:<password>github.com/username/ExcelANT.git
并从头开始复制空的回购,但每次它给我同样的错误
错误:SSL证书问题,请验证CA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:访问https://github.com/username/ExcelANT.git/info/refs时证书验证失败
打开GIT_CURL_VERBOSE=1
给我
*关于连接()到github.com端口443(#0)
*尝试207.97.227.239 ... *成功设置证书验证位置:
* CAfile:无
CApath:/ usr / ssl / certs
* SSL证书问题,请验证CA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
*清除过期
*关闭连接#0
*关于连接()到github.com端口443(#0)
*尝试207.97.227.239 ... *成功设置证书验证位置:
* CAfile:无
CApath:/ usr / ssl / certs
* SSL证书问题,请验证CA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
*清除过期
*关闭连接#0
错误:SSL证书问题,请验证CA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:访问https://github.com/username/ExcelANT.git/info/refs时证书验证失败
fatal: HTTP request failed
这是我的防火墙,cygwin或什么问题?
我没有在Git配置中设置HTTP代理,但是它是一个需要NTLM身份验证的ISA服务器,不是基本的,所以除非有人知道如何强制git使用NTLM,否则我会受到攻击。
如果您想解决证书问题,请随意跳过此答案。 这个答案涉及隧道ssh通过防火墙是恕我直言,更好的解决方案来处理防火墙/代理服务器。
有一种比使用http访问更好的方法,那就是使用ssh.github.com服务器端口443上的github提供的ssh服务。
我们使用一种称为开瓶器的工具。 CygWin(通过cygwin主页中的设置)和Linux都可以使用您最喜爱的打包工具。 对于MacOSX,它至少可以从macports和brew中获得。
命令行如下:
$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>
proxyhost和proxyport是https代理的坐标。 targethost和targetport是要隧道连接的主机的位置。 authfile是一行文本文件,其中包含用冒号分隔的代理服务器用户名/密码
例如:
abc:very_secret
安装使用“正常”ssh协议进行git通信
通过添加到~/.ssh/config
这个技巧可以用于普通的ssh连接。
Host github.com
HostName ssh.github.com
Port 443
User git
ProxyCommand corkscrew <proxyhost> <proxyport> %h %p ~/.ssh/proxy_auth
现在你可以通过ssh-ing来测试它是否适用于gitproxy
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会要求将服务器密钥添加到已知的主机文件中,如果你是偏执狂的,建议将RSA指纹验证到github站点上显示的指纹上传了你的钥匙)。
当您需要使用另一个密钥访问存储库时,此方法的一个轻微变体就是这种情况,例如将您的私人账户与专业账户分开。
#
# 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上使用了这个多年。
如果你愿意,你可以在这篇博客文章中阅读更多关于它的内容
问题是您的系统上没有安装任何证书颁发机构证书。 这些证书不能与cygwin的setup.exe一起安装。
更新:在cygwin中安装Net / ca-certificates包(谢谢dirkjot)
有两种解决方案:
忽略SSL证书验证。
警告:禁用SSL证书验证存在安全隐患。 如果没有验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充可信端点(例如GitHub或其他远程Git主机),并且您将很容易受到中间人攻击(Man-in-the-Middle Attack)的攻击。 在将此作为解决方案之前,请确保您完全理解安全问题和威胁模型。
$ env GIT_SSL_NO_VERIFY=true git clone https://github...
其实安装根证书。 卷毛人为你从Mozilla中提取证书。
cacert.pem
文件是你正在寻找的。 这个文件包含> 250个CA证书(不知道如何信任这个数字的PPL)。 您需要下载此文件,将其分解为单独的证书,将它们放到/ usr / ssl / certs(您的CApath)并将它们编入索引。
这是如何做到这一点。 用cygwin setup.exe安装curl和openssl包执行:
$ 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 CERT验证:
git config --global http.sslVerify false
这将阻止CURL验证HTTPS认证。
仅针对一个存储库:
git config http.sslVerify false
注意: 禁用SSL验证有安全隐患 。 当您使用Git通过网络传输数据时,它允许中间人攻击。 在将此作为解决方案之前,请确保您完全理解安全含义。
链接地址: http://www.djcxy.com/p/22063.html上一篇: SSL certificate rejected trying to access GitHub over HTTPS behind firewall
下一篇: How to use .netrc file on windows to save user and password