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