SSL证书拒绝尝试通过HTTPS后面的防火墙访问GitHub

时间:2010-09-23 09:41:47

标签: git ssl github cygwin ssl-certificate

我被困在防火墙后面,所以必须使用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给我

  

*关于connect()到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,否则我会被打破。

30 个答案:

答案 0 :(得分:513)

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

更新:Install Net/ca-certificates package in cygwin(感谢dirkjot)

有两种解决方案:

  1. 实际安装根证书。 Curl guys extracted for you certificates from Mozilla

    cacert.pem文件正是您要找的。此文件包含&gt; 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

  2. 忽略SSL证书验证。

    警告:禁用SSL证书验证会产生安全隐患。 如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以模拟受信任的端点(例如GitHub)或者其他一些远程Git主机),你很容易受到Man-in-the-Middle Attack的攻击。 在将此作为解决方案使用之前,请确保您完全了解安全问题。

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

答案 1 :(得分:417)

注意:禁用SSL验证会产生安全隐患。当您使用Git通过网络传输数据时,它允许中间人攻击。在将此作为解决方案之前,请确保完全了解安全隐患。或者更好的是,安装根证书。

一种方法是禁用SSL CERT验证:

git config --global http.sslVerify false

这将阻止CURL验证HTTPS认证。

仅限一个存储库:

git config http.sslVerify false

答案 2 :(得分:108)

我希望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在这里没有路径扩展,因此如果没有丑陋的kludge就不能使用~。或者,您可以跳过配置文件,并通过环境变量GIT_SSL_CAINFO设置路径。

要解决此问题,请设置GIT_CURL_VERBOSE=1。 Git正在使用的CA文件的路径将显示在输出中以“CAfile:”开头的行中。

答案 3 :(得分:55)

如果您想修复证书问题,请随意跳过此答案。这个答案涉及通过防火墙隧道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是一个文本文件,其中包含您的代理服务器用户名/密码,以冒号

分隔

e.g:

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会要求将服务器密钥添加到已知的hosts文件中。如果你是偏执狂,建议验证RSI指纹到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上使用它。

如果您愿意,可以read more about it in this blog post

答案 4 :(得分:41)

请注意,为了让我能够正常工作(在CentOS 5.6上安装RVM),我必须运行以下命令:

export GIT_SSL_NO_VERIFY=true

之后,将RVM安装程序卷入bash的标准安装过程起了作用:)

答案 5 :(得分:39)

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

使用git://the.repository而不是https://the.repository并且可以使用。

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

答案 6 :(得分:31)

最流行的答案(由Alexey Vishentsev撰写)有:

  

问题是您没有任何证书颁发机构   证书安装在您的系统上。而且这些证书不可能   安装了cygwin的setup.exe。

然而,最后一个断言是错误的(现在,或者一直是,我不知道)。

你所要做的就是去cygwin设置并包含'ca-certificates'包(它在Net下)。这对我有用。

答案 7 :(得分:16)

我知道原始问题列出了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/

答案 8 :(得分:14)

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

其他发行版也是如此。

答案 9 :(得分:14)

要在将SSL验证设置为false时在窗口上克隆:

    git -c http.sslVerify=false clone http://example.com/e.git

如果您想克隆而不使用全局设置。

答案 10 :(得分:13)

如果你想要做的只是在github.com上使用Cygwin git客户端,那么有一个更简单的方法,无需经历下载,提取,转换,拆分证书文件的麻烦。继续如下(我假设使用Cygwin和Firefox的Windows XP)

  1. 在Firefox中,转到github页面(任意)
  2. 点击地址栏上的github图标以显示证书
  3. 点击“更多信息” - &gt; “显示证书” - &gt; “详细信息”并从最上面的一个开始选择层次结构中的每个节点;对于他们每个人点击“导出”并选择PEM格式:
    • GTECyber​​TrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • DigiCertHighAssuranceEVCA-1.pem
    • github.com.pem
  4. 将上述文件保存在本地驱动器的某处,将扩展名更改为.pem并将其移至Cygwin安装中的/ usr / ssl / certs(Windows:c:\ cygwin \ ssl \ certs)
  5. (可选)从bash运行c_reshash。
  6. 就是这样。

    当然,这只会安装一个证书层次结构,即github所需的层次结构。您当然可以将此方法与任何其他站点一起使用,而无需安装200个您不一定信任的站点证书。

答案 11 :(得分:8)

如果您使用的是Mac OS X,则可以通过homebrew安装ca-cert-bundle:

$ brew install curl-ca-bundle
$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

formula通过以下方式将证书捆绑包安装到您的共享:

share.install 'ca-bundle.crt'

share方法只是/usr/local/share的别名,curl-ca-bundleMozilla提供。这就是你在许多问题中被引用的内容。希望这会有所帮助,因为在Mac OS X上如何处理这个问题并不是非常简单。brew install curl不会让你感到太多,因为它是keg only and will not be linked(运行which curl将始终输出{ {1}},这是您的操作系统附带的默认设置)。 This post may also be of some value

在安装/usr/bin/curl之前,您当然需要禁用SSL,因为它是一个git repo。在SSL验证过程中出现错误时,只需执行curl所说的内容:

homebrew

$ echo insecure >> ~/.curlrc 一起安装homebrew后,删除curl-ca-bundle并尝试在github上克隆回购。确保没有错误,你会很高兴。

注意:如果您使用.curlrc,请在测试完成后将其从系统中删除。此文件可能会导致重大问题,因此请将其用于临时目的并谨慎使用。如果您忘记从系统中清除它,.curlrc会抱怨。

注意:如果您更新了git版本,则需要重新运行此命令,因为系统设置将被清除(它们是根据版本相对于git二进制文件存储的)

跑完后:

brew doctor

如果您获得了新版本的git,那么只需重新运行:

$ brew update
$ brew upgrade

你会全力以赴。

最后,如果您有新版本的git,请运行:

$ git config --system http.sslcainfo /usr/local/share/ca-bundle.crt

应该给你一个错误

$ git config -l --system

这是你的提示,你需要告诉git Mozilla ca-bundle的位置。

<强>更新

fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'可能会或可能不会解决您的问题。无论如何,无论是否需要手动下载,都只需在机器上安装Mozilla ca-bundle。这就是重要的。一旦你获得了ca-bundle,你就可以去了。只需运行git config命令并将git指向ca-bundle。

<强>更新

我最近不得不补充:

因为我正在使用.curlrc,所以

export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt到我的.zshenv点文件。 zsh选项适用于大多数情况,但是当通过SSL(例如git config)访问github时,我仍遇到证书问题。 @Maverick在他的评论中指出了这一点,但万一有人错过了它或者假设除了运行rvm get stable命令之外他们不一定需要导出这个环境变量。谢谢,希望这会有所帮助。

<强>更新

看起来curl-ca-bundlerecently removed from homebrew。有recommendation here

您需要将一些文件放入:

git config --system....

答案 12 :(得分:5)

我使用 apt-cyg (类似于apt-get的优秀安装程序)解决了这个问题 轻松下载 ca-certificates (包括Git等等):

apt-cyg install ca-certificates

注意:应首先安装apt-cyg。您可以从Windows执行此操作 命令行:

cd c:\cygwin
setup.exe -q -P wget,tar,qawk,bzip2,subversion,vim

关闭Windows cmd,然后打开Cygwin Bash:

wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin

答案 13 :(得分:4)

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

您可以在命令行上使用openssl验证一切正常:

openssl s_client -connect github.com:443

答案 14 :(得分:4)

如果您使用基于debian的操作系统,则只需运行

即可
  

apt-get install ca-certificates

答案 15 :(得分:4)

在我有一个rasbery pi上

pi @ raspbmc:〜$ git clone http://github.com/andreafabrizi/Dropbox-Uploader .git 克隆到Dropbox-Uploader&#39; ... 错误:访问http:// github.com/andreafabrizi/Dropbox-Uploader.git/info/refs时SSL SSL证书(路径?访问权限?)问题 致命:HTTP请求失败

所以id a

sudo apt-get install ca-certificates

然后

git clone http://github.com/andreafabrizi/Dropbox-Uploader.git  

工作

答案 16 :(得分:3)

尝试使用.netrc文件,它将通过https进行身份验证。在您的主目录中创建一个文件调用.netrc并将其放入其中:

machine github.com login myusername password mypass

有关详细信息,请参阅此帖子:

https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj

答案 17 :(得分:3)

你检查过你的时间吗?

我绝对拒绝让我的git操作不安全,在尝试了这里提到的所有人之后,让我感到震惊的是,证书无法通过验证的一个可能原因是日期错误(证书到期日期或本地时钟)。

您可以在终端中输入date来轻松查看此内容。在我的情况下(一个新的覆盆子Pi),本地时钟设置为1970,所以一个简单的ntpdate -u 0.ubuntu.pool.ntp.org修复了一切。对于rPi,我还建议您将以下脚本放在每日cron作业中(例如/etc/cron.daily/ntpdate):

#!/bin/sh
/usr/sbin/ntpdate -u 0.ubuntu.pool.ntp.org 1> /dev/null 2>&1

答案 18 :(得分:3)

通过暂时禁用Windows cmd中的GIT / curl ssl验证来改进RouMao的解决方案:

set GIT_SSL_NO_VERIFY=true
git config --global http.proxy http://<your-proxy>:443

这个解决方案的好处是它只在当前的cmd窗口中生效。

答案 19 :(得分:2)

您可以在端子中尝试以下命令:

  

git config --global http.sslVerify false

答案 20 :(得分:2)

我遇到了在我必须管理的协作开发平台上配置Git的相同问题。

要解决它:

  • 我已经更新了服务器上安装的Curl版本。下载网站Download page of curl上的最新版本并按照安装程序进行Installation proceedings of curl

  • 取回为服务器提供证书的授权证书。

  • 将此证书添加到curl使用的CAcert文件中。在我的服务器上,它位于/etc/pki/tls/certs/ca-bundle.crt

  • 配置git以通过编辑.gitconfig文件并设置sslcainfo路径来使用此证书文件。 sslcainfo= /etc/pki/tls/certs/ca-bundle.crt

  • 在客户端计算机上,您必须获取证书并配置.gitconfig文件。

我希望这对你们有些人有所帮助。

答案 21 :(得分:1)

我尝试了一切,最终我查看了hosts文件,github随机输入了一下。删除别名修复了问题

%SYSTEMROOT%\ System32 \ drivers下\等\主机

答案 22 :(得分:1)

我只是禁用了SSL证书身份验证并使用了简单的用户名密码登录,如下所示enter image description here

答案 23 :(得分:0)

我需要两件事:

  1. 转到cygwin 设置并添加“ ca-certificates ”包(它在Net下)(如其他地方所示)。

    < / LI>
  2. 告诉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 ...

答案 24 :(得分:0)

从Github生成访问令牌并保存,因为它不会再次出现。

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

答案 25 :(得分:0)

我只需要Cygwin和git的证书,所以我做了@esquifit发布的内容。但是,我必须手动运行第5步,c_rehash在我的系统上不可用。我遵循了这个指南:Installing CA Certificates into the OpenSSL framework而不是。

答案 26 :(得分:-2)

在Mac OSX 10.5系统上,我能够通过一种简单的方法使用它。首先,运行github程序和测试,这对我来说没问题,表明我的证书确实没问题。 https://help.github.com/articles/generating-ssh-keys

ssh -T git@github.com

然后我终于注意到另一个用于遥控器的url格式。我尝试了其他人,他们没有工作。 http://git-scm.com/book/ch2-5.html

git@github.com:MyGithubUsername/MyRepoName.git

一个简单的“git push myRemoteName”效果很好!

答案 27 :(得分:-2)

我最近(2014年7月)遇到了类似的问题,在OS X(10.9.4)上发现有一个“DigiCert High Assurance EV Root CA”证书已过期(尽管我还有另一个未过期的证书)。 / p>

  1. 打开钥匙串访问
  2. 搜索“DigiCert”证书
  3. 查看菜单&gt;显示过期的证书
  4. 我找到了两个名为“DigiCert High Assurance EV Root CA”的证书,一个在20131年11月到期,另一个在2014年7月到期(几天前)。删除过期的证书可以解决我的问题。

    希望这有帮助。

答案 28 :(得分:-2)

对于使用Msys / MinGW GIT的用户,请添加此

  export GIT_SSL_CAINFO=/mingw32/ssl/certs/ca-bundle.crt 

答案 29 :(得分:-2)

我有同样的问题。 证书导入或取消设置ssl验证的命令不起作用。 结果是网络代理的过期密码。 有代理配置的条目。在我的Windows用户配置文件中的.gitconfig文件中。 我刚删除了整个条目,它又开始工作了。