git - 在HTTPS防火墙后面试图访问GitHub

  显示原文与译文双语对照的内容

我被困在防火墙之后,所以必须使用HTTPS访问我的GitHub知识库。 我在使用cygwin 1.7.7 Windows xp。

我尝试将遥控器设置为 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 给我

* 即将 connect() 到 github.com 端口 443 ( #0 )
* 正在尝试 207.97.227.239.。* 成功地设置了证书验证位置:
* CAfile: 无
CApath:/usr/ssl/certs
* SSL证书问题,请验证CA证书是否正确。 详细信息:
错误:14090086: ssl例程:ssl3_get_server_certificate: 证书验证失败
* 过期已经清除
* 关闭连接 #0
* 即将 connect() 到 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,我是 scuppered 。

时间:

如果你想修复证书问题,可以跳过这个答案。 这个回答通过防火墙来处理隧道 ssh,这无疑是一个更好的解决防火墙/代理问题的解决方案。

比使用http访问和有一个更好的办法是使用ssh服务提供的github 443 ssh.github.com 服务器端口上。

我们使用一个叫做corkscrew的工具。 这对于 CygWin ( 通过CygWin主页的安装程序) 和Linux都可以使用你喜欢的打包工具。 对于微软来说,它至少可以从macports和brew中获得。

命令行如下所示:


$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>

proxyhost和proxyport是https代理的坐标。 targetHost和TargetPort是主机到隧道的位置。 authfile是一个文本文件,含有 1行,其中包含你的代理服务器用户名/密码,由冒号分隔

例如

 
abc:very_secret

 

为git通信使用"普通"ssh协议的安装

通过将这个添加到 ~/.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来测试它的工作


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将要求将服务器密钥添加到已知主机文件中) 。 如果你是偏执者,建议你验证你上传密钥的github站点上的RSA指纹。

这种方法的一个细微变化是当你需要使用另一个密钥访问一个仓库时,比如 将你的私人账户与你的专业账户分开。


# 
# 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

enjoy!

我们已经在 Linux,mac和 Windows 上使用多年了。

如果你想要你可以博客阅读更多关于它

问题是你的系统上没有安装任何证书颁发机构证书。 这些证书不能与 setup.exe.的一起安装

更新:安装cygwin净/ca-certificates包(感谢 dirkjot )

有两种解决方案:

  1. 忽略ssl证书验证:

    
    $ env GIT_SSL_NO_VERIFY=true git clone https://github...
    
    

    注意编辑 : 禁用SSL验证有的安全含义。 没有真实性的验证ssl/https连接,恶意攻击者可以模拟一个端点( 例如GitHub或者其他远程Git主机) 信任,你将容易受到 Man-in-the-Middle攻击。 在使用这里解决方案之前,请确保你完全理解了安全问题。

  2. 实际上安装根证书。Curl家伙从 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
    
    

最简单的方法是禁用SSL证书验证:


git config --global http.sslVerify false

这将防止CURL验证HTTPS认证。

仅用于一个存储库:


git config http.sslVerify false

注意:禁用ssl验证具有安全性的影响。 当你使用Git通过网络传输数据时,它允许中间人攻击。 在使用这里解决方案作为解决方案之前,请确保你完全理解了安全问题。

我希望Git使用更新的证书包而不替换我整个系统使用的。 下面是如何让Git在我的主目录中使用一个特定的文件:


mkdir ~/certs
curl http://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem

现在更新 .gitconfig 以用于对等验证:


[http]
sslCAinfo =/home/radium/certs/cacert.pem

注意我正在使用绝对路径。 Git在这里没有路径扩展,所以你不能在没有丑陋的碎片的情况下使用 ~ 。 或者,你可以跳过配置文件并通过环境变量 GIT_SSL_CAINFO 设置路径。

要解决这里问题,请设置 GIT_CURL_VERBOSE=1 。 "cafile:"文件Git的路径将在以开头的行中显示。

注意为了让我得到这个工作( RVM安装在 CentOS 5.6上),我不得不运行以下命令:

export GIT_SSL_NO_VERIFY=true

在这之后,将RVM安装程序的标准安装过程用于bash的标准安装过程:

作为最流行的答案( 按 Alexey Vishentsev ) 拥有它:

问题是你的系统上没有安装任何证书颁发机构证书。 这些证书不能与 setup.exe.的一起安装

但是,最后一个断言是假( 现在,或者一直以来,我不知道) 。

你所要做的就是进入cygwin安装程序并包括软件包'ca-certificates'( 它在网络下) 。 这对我来说是个陷阱。

一个非常简单的解决方案: https://换成 git://

使用 git://the.repository 而不是 https://the.repository,并将工作。

我在 Windows 上遇到了这个问题,这解决了它。

我知道最初的问题列出了 Cygwin,但这里是CentOS的解决方案:


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/

如果你想做的只是使用Cygwin客户端和 github.com,,那么你就不用费力下载,提取,转换cert拆分证书文件了。 按照如下步骤进行( 我假设 Windows XP带有Cygwin和 Firefox )

  1. 在 Firefox 中,转到github页面( 任何)
  2. 单击地址栏上的github icon 显示证书
  3. 单击"更多信息"->"显示证书"-->"详情"并选择层次结构中的每个节点,以最上面的一个开始;对于每个节点,单击"导出"并选择PEM格式:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com.pem
  4. 将上文件保存到本地驱动器的某处,将扩展更改为. pem,并将它的移动到Cygwin安装中的/usr/ssl/certs ( Windows: c:cygwinsslcerts )
  5. ( 可选) 从bash运行 c_reshash 。

完成。

当然,这只安装了一个证书层次结构,你需要的是 github 。 你当然可以将这里方法与其他任何站点一起使用,而无需安装你不信任的站点 200证书。

在 CentOS 5. x, 上,一个简单的yum update openssl 更新了openssl软件包,更新了系统 ca-bundle.crt 文件并修复了问题。

其他发行版可能也是一样的。

...