尝试在防火墙后通过HTTPS访问GitHub时,SSL证书被拒绝

尝试在防火墙后通过HTTPS访问GitHub时,SSL证书被拒绝,git,ssl,github,cygwin,ssl-certificate,Git,Ssl,Github,Cygwin,Ssl Certificate,我被困在防火墙后面,所以必须使用HTTPS访问我的GitHub存储库。我正在Windows XP上使用cygwin 1.7.7 我已尝试将遥控器设置为https://username@github.com/username/ExcelANT.git,但按提示输入密码,但在输入密码后不会执行任何操作。 https://username:github.com/username/ExcelANT.git并从头开始克隆空回购协议,但每次都会出现相同的错误 错误:SSL证书问题,请验证CA证书是否正常。详

我被困在防火墙后面,所以必须使用HTTPS访问我的GitHub存储库。我正在Windows XP上使用cygwin 1.7.7

我已尝试将遥控器设置为
https://username@github.com/username/ExcelANT.git
,但按提示输入密码,但在输入密码后不会执行任何操作。
https://username:github.com/username/ExcelANT.git
并从头开始克隆空回购协议,但每次都会出现相同的错误

错误:SSL证书问题,请验证CA证书是否正常。详细信息:
错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:访问时证书验证失败

打开
GIT\u CURL\u VERBOSE=1会让我

*即将连接()到github.com端口443(#0)
*正在尝试207.97.227.239…*已成功设置证书验证位置:
*CAfile:无
CApath:/usr/ssl/certs
*SSL证书问题,请验证CA证书是否正常。详细信息:
错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败
*过期已清除
*关闭连接#0
*即将连接()到github.com端口443(#0)
*正在尝试207.97.227.239…*已成功设置证书验证位置:
*CAfile:无
CApath:/usr/ssl/certs
*SSL证书问题,请验证CA证书是否正常。详细信息:
错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:证书验证失败
*过期已清除
*关闭连接#0
错误:SSL证书问题,请验证CA证书是否正常。详细信息:
错误:14090086:SSL例程:SSL3\u获取\u服务器\u证书:访问时证书验证失败

这是我的防火墙问题吗,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>
使用“普通”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
(注意:如果您以前从未登录过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
#
#专用于ACME private github帐户的帐户
#
主机acme.github.com
用户git
主机名ssh.github.com
端口443
ProxyCommand%h%p~/.ssh/proxy\u auth
IdentityFile~/.ssh/id_dsa_acme
享受吧

我们已经在Linux、Mac和Windows上使用它很多年了


如果需要,您可以

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

更新:(谢谢dirkjot)

有两种解决方案:

  • 实际安装根证书

    cacert.pem
    文件就是您要查找的文件。此文件包含>250个CA证书(不知道如何信任此数量的ppl)。您需要下载此文件,将其拆分为各个证书,将它们放入/usr/ssl/certs(您的CApath)并为它们编制索引

    下面是如何做到这一点。使用cygwin setup.exe安装curl和openssl软件包 执行:

    $cd/usr/ssl/certs
    $curlhttp://curl.haxx.se/ca/cacert.pem |
    awk'{print>“cert”(1+n)“.pem”}/----结束证书------/{n++}”
    $c_rehash
    
    重要:为了使用
    c_rehash
    ,您还必须安装
    openssl perl

  • 忽略SSL证书验证

    警告:禁用SSL证书验证会带来安全隐患。如果不验证SSL/HTTPS连接的真实性,恶意攻击者可以模拟受信任的端点(如GitHub或其他远程Git主机),您将容易受到攻击在将其用作解决方案之前,请确保您完全了解安全问题和威胁模型。

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

  • 对于Solaris Express 11,我也遇到了同样的问题。我花了一段时间,但我设法找到了需要放置证书的位置。根据/etc/openssl/openssl.cnf,证书的路径是/etc/openssl/certs。我放置了使用Alexey的上述建议生成的证书

    您可以在命令行上使用openssl验证工作是否正常:

    openssl s_client -connect github.com:443
    

    如果您只想在github.com上使用Cygwin git客户端,那么有一种更简单的方法,无需经历下载、提取、转换和拆分证书文件的麻烦。按照以下步骤进行(我假设Windows XP带有Cygwin和Firefox)

  • 在Firefox中,转到github页面(任意)
  • 单击地址栏上的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
    
    $ env GIT_SSL_NO_VERIFY=true git clone https://github...
    
    openssl s_client -connect github.com:443
    
    curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
    
    mkdir ~/certs
    curl https://curl.haxx.se/ca/cacert.pem -o ~/certs/cacert.pem
    
    [http]
    sslCAinfo = /home/radium/certs/cacert.pem
    
    git config --global http.sslVerify false
    
    git config http.sslVerify false
    
    machine github.com login myusername password mypass
    
    $ brew install curl-ca-bundle
    $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt
    
    share.install 'ca-bundle.crt'
    
    $ echo insecure >> ~/.curlrc
    
    $ brew update
    $ brew upgrade
    
    $ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt
    
    $ git config -l --system
    
    apt-cyg install ca-certificates
    
    cd c:\cygwin
    setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim
    
    wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
    install apt-cyg /bin
    
    set GIT_SSL_NO_VERIFY=true
    git config --global http.proxy http://<your-proxy>:443
    
    ssh -T git@github.com
    
    git@github.com:MyGithubUsername/MyRepoName.git
    
    sudo apt-get install ca-certificates
    
    git clone http://github.com/andreafabrizi/Dropbox-Uploader.git  
    
      export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt 
    
    #!/bin/sh
    /usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1
    
        git -c http.sslVerify=false clone http://example.com/e.git
    
    git -c http.sslVerify=false clone https://<username>:<token>@github.com/repo.git
    
    git config --global http.sslVerify false
    git clone https://github.com/repo.git