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

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

我已经尝试将远程设置为https://username@github.com/username/ExcelANT.git ,但是按提示input密码,但是一旦我input密码,就不会执行任何操作。 https://username:<password>github.com/username/ExcelANT.git和从头开始克隆空的回购,但每次它给我同样的错误

错误:SSL证书问题,请validationCA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:访问https://github.com/username/ExcelANT.git/info/refs时证书validation失败

打开GIT_CURL_VERBOSE=1给我

*关于连接()到github.com端口443(#0)
*尝试207.97.227.239 … *成功设置证书validation位置:
* CAfile:无
CApath:/ usr / ssl / certs
* SSL证书问题,请validationCA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书validation失败
*清除过期
*closures连接#0
*关于连接()到github.com端口443(#0)
*尝试207.97.227.239 … *成功设置证书validation位置:
* CAfile:无
CApath:/ usr / ssl / certs
* SSL证书问题,请validationCA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书validation失败
*清除过期
*closures连接#0
错误:SSL证书问题,请validationCA证书是否正确。 细节:
错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:访问https://github.com/username/ExcelANT.git/info/refs时证书validation失败

 fatal: HTTP request failed 

这是我的防火墙,cygwin或什么问题?

我没有在Gitconfiguration中设置HTTP代理,但是它是一个ISA服务器,需要NTLM身份validation,而不是基本的,所以除非有人知道如何强制git使用NTLM,否则我会受到攻击。

如果您想解决证书问题,请随意跳过此答案。 这个答案涉及隧道ssh通过防火墙是恕我直言,一个更好的解决scheme来处理防火墙/代理东西。

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

我们使用一个称为开瓶器的工具。 CygWin(通过cygwin主页中的设置)和Linux使用您最喜爱的打包工具都可以使用。 对于MacOSX,它至less可以从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 

现在你可以testing它通过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:~$ 

(注意:如果你以前从未login到github,ssh会要求将服务器密钥添加到已知的主机文件中,如果你是偏执狂的,build议将RSA指纹validation到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)

有两个解决scheme:

  1. 忽略SSL证书validation。

    警告:禁用SSL证书validation有安全隐患。 如果没有validationSSL / HTTPS连接的真实性,恶意攻击者可以冒充可信端点(如GitHub或其他远程Git主机),并且容易受到中间人攻击(Man-in-the-Middle Attack)的攻击 。 在将其作为解决scheme之前,请确保您完全理解安全问题威胁模型。

     $ env GIT_SSL_NO_VERIFY=true git clone https://github... 
  2. 其实安装根证书。 curl的人从你的Mozilla提取证书 。

    cacert.pem文件是你在找什么。 这个文件包含> 250个CA证书(不知道如何信任这个数字的人工智能)。 你需要下载这个文件,把它分解成单独的证书,把它们放到/ usr / ssl / certs(你的CApath)并build立索引。

    这是如何做到这一点。 用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 CERTvalidation:

 git config --global http.sslVerify false 

这将阻止CURLvalidationHTTPSauthentication。

仅限一个存储库:

 git config http.sslVerify false 

注意: 禁用SSLvalidation有安全隐患 。 当您使用Git通过networking传输数据时,它允许中间人攻击。 在将其用作解决scheme之前,请确保您完全理解安全含义。

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

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

现在更新.gitconfig以将其用于对等validation:

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

注意我正在使用绝对path。 Git在这里没有path扩展,所以你不能使用~没有丑陋的kludge。 或者,您可以跳过configuration文件,并通过环境variablesGIT_SSL_CAINFO来设置path。

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

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

export GIT_SSL_NO_VERIFY=true

之后,将RVM安装程序curl成bash的标准安装程序就可以工作了:)

一个非常简单的解决scheme: 将https://replace为git://

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

我已经在Windows上与TortoiseGit这个问题,这解决了它。

作为最受欢迎的答案(由Alexey Vishentsev)有它:

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

但是,最后的断言是错误的(现在,或者总是,我不知道)。

所有你需要做的就是去cygwin安装程序,并且包含“ca-certificates”包(它在Net下)。 这为我做了诡计。

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

 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/

如果你只想在github.com上使用Cygwin git客户端,那么不用经过下载,解压缩,转换,分割证书文件的麻烦就可以简单得多。 继续如下(我假设Windows XP与Cygwin和Firefox)

  1. 在Firefox中,转到github页面(任何)
  2. 点击地址栏上的github图标来显示证书
  3. 点击“更多信息” – >“显示证书” – >“详细信息”,select从最上面一层开始的层次结构中的每个节点; 为他们每个人点击“导出”,并selectPEM格式:
    • 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。

而已。

当然,这只能安装一个你需要的github证书。 您当然可以在任何其他网站上使用这种方法,而无需安装您不(必须)信任的200个证书。

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

其他发行版本可能也是如此。

在将SSLvalidation设置为false时在Windows上克隆:

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

发布这个如果你不想全局设置,并想克隆。

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

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

该公式通过以下方式将证书包安装到您的共享中:

 share.install 'ca-bundle.crt' 

share方法只是/usr/local/share的别名,而curl-ca-bundle是Mozilla提供的。 这是你看到很多问题被引用。 希望这可以帮助你,因为在Mac OS X上如何处理这个问题并不是很简单brew install curl不会因为它只是桶而被连接 (运行which curl将总是输出/usr/bin/curl ,这是操作系统附带的默认设置)。 这篇文章也可能有一定的价值 。

在安装homebrew之前,你当然需要禁用SSL,因为它是一个git仓库。 只要做一下curl在SSLvalidation过程中出现错误时说的话:

 $ echo insecure >> ~/.curlrc 

一旦你和curl-ca-bundle一起安装了homebrew ,删除.curlrc然后尝试在github上克隆一个repo。 确保没有错误,你会好起来的。

注意:如果您确实使用.curlrc ,请在完成testing.curlrc其从系统中移除。 这个文件可能会导致重大问题,所以用于临时目的和谨慎。 如果您忘记从系统中清除它, brew doctor会投诉)。

注意:如果你更新你的git版本,你将需要重新运行这个命令,因为你的系统设置将被清除(它们相对于基于版本的git二进制文件存储)。

所以跑完之后:

 $ brew update $ brew upgrade 

如果你得到一个新版本的git,那么只需重新运行:

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

你会一切的。

最后如果你有一个新版本的git,运行:

 $ git config -l --system 

应该给你一个错误

fatal: unable to read config file '/usr/local/Cellar/git/1.8.2.2/etc/gitconfig'

这是你的提示,你需要告诉git Mozilla的ca捆绑在哪里。

更新:

.curlrc可能会或可能不会成为您的问题的补救措施。 在任何情况下,无论您是否需要手动下载,只需要在您的机器上安装Mozilla ca-bundle。 这在这里很重要。 一旦你得到了ca包,你很好去。 只需运行git config命令并将git指向ca-bundle。

UPDATE

我最近不得不补充:

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

UPDATE

看起来最近从自制软件中删除了curlca-bundle 。 这里有一个build议 。

你会想把一些文件放到:

$(brew --prefix)/etc/openssl/certs

我使用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 

closuresWindows cmd,然后打开Cygwin Bash:

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

尝试使用.netrc文件,它将通过https进行身份validation。 在你的主目录下创build一个叫.netrc的文件,并把它放在里面:

 machine github.com login myusername password mypass 

看到这个职位了解更多信息:

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

如果你使用基于debian的操作系统,你可以简单地运行

apt-get install ca-certificates

我一直在Solaris Express 11中遇到同样的问题。它花了我一些时间,但是我设法find需要放置证书的位置。 根据/etc/openssl/openssl.cnf,证书的path是/ etc / openssl / certs。 我放置了使用Alexey的上述build议生成的证书。

你可以在命令行上使用openssl来validation是否正在工作:

 openssl s_client -connect github.com:443 

我遇到了同样的问题,在我必须pipe理的协作开发平台上configurationGit。

要解决它:

  • 我已经更新了服务器上安装的Curl的版本。 在网站上下载最新版本curl的下载页面,并按照安装程序curl安装程序

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

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

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

  • 在客户机上,您必须获得证书并configuration.gitconfig文件。

我希望这会帮助你们中的一些人。

通过在Windows cmd中临时禁用GIT / curl sslvalidation来改进RouMao的解决scheme:

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

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

在我有一个rasbery pi

pi @ raspbmc:〜$ git clone http://github.com/andreafabrizi/Dropbox-Uploader .git克隆到'Dropbox-Uploader'…错误:访问SSL SSL证书(path?访问权限? http:// github.com/andreafabrizi/Dropbox-Uploader.git/info/refs fatal:HTTP请求失败

所以id a

 sudo apt-get install ca-certificates 

然后

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

工作

你有没有检查你的时间?

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

您可以通过在terminal中inputdate来轻松检查。 在我的情况下(一个新的树莓派),本地时钟设置为1970年,所以一个简单的ntpdate -u 0.ubuntu.pool.ntp.org固定的一切。 对于一个rPi,我也build议你把下面的脚本放在每日的cron作业中(比如/etc/cron.daily/ntpdate ):

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

我只需要Cygwin和git的证书,所以我做了什么@esquifit张贴。 但是,我不得不手动运行第5步,c_rehash在我的系统上不可用。 我遵循本指南: 改为将CA证书安装到OpenSSL框架中 。

我试了一切,最终我看了hosts文件,那里有一个随机的入口github。 删除别名解决了问题

%SYSTEMROOT%\ SYSTEM32 \ DRIVERS \等\主机

我只是禁用SSL证书authentication,并使用简单的用户名密码login,如下所示 在这里输入图像描述

我知道这是一个死马,但这是我作为一个Linux用户在一个新鲜的,最小的openSUSE 12.3服务器安装:

 zypper in ca-certificates ca-certificates-cacert ca-certificates-mozilla 

之后,我开始做生意了。

我需要两件事情:

  1. 进入cygwin 安装程序,并包含“ ca-certificates ”包(在Net下)(如其他地方所示)。

  2. 告诉git在哪里可以find已安装的证书:

    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 …

我遇到过同样的问题。 证书导入或命令来取消sslvalidation不起作用。 这是networking代理的过期密码。 有代理configuration的条目。 在我的Windows用户configuration文件中存在的.gitconfig文件中。 我刚刚删除了整个条目,并开始工作。

在Mac OSX 10.5系统上,我可以用一个简单的方法来实现这个function。 首先,运行github程序和testing,这对我来说工作正常,certificate我的证书确实没问题。 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”工作得很好!

我最近(2014年7月)有一个类似的问题,在OS X(10.9.4)中发现有一个“DigiCert高保证EV根CA”证书已经过期(尽pipe我还有另一个未到期的证书)。

  1. 打开钥匙串访问
  2. search“DigiCert”的证书
  3. 查看菜单>显示过期的证书

我发现了两个证书,名为“DigiCert High Assurance EV Root CA”,一个在2031年11月到期,2014年7月(前几天)过期。 删除过期的证书解决了我的问题。

希望这可以帮助。

对于那些使用Msys / MinGW GIT,添加这个

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