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和克隆空回购从零开始,但每次它给我同样的错误

error: SSL证书问题,验证CA cert is OK。细节:< br > 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: none
CApath: /usr/ssl/certs < br > * SSL证书问题,请检查CA证书是否正确。细节:< br > 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
* Expire cleared
.过期清除 *关闭连接#0
*即将连接()到github.com端口443 (#0)
*尝试207.97.227.239…*成功设置证书验证位置:
.使用实例 * CAfile: none
CApath: /usr/ssl/certs < br > * SSL证书问题,请检查CA证书是否正确。细节:< br > 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
* Expire cleared
.过期清除 *关闭连接#0
错误:SSL证书有问题,请检查CA证书是否正确。细节:< br > SSL例程:SSL3_GET_SERVER_CERTIFICATE:在访问https://github.com/username/ExcelANT.git/info/refs

时,证书验证失败
fatal: HTTP request failed

这是我的防火墙有问题吗,cygwin还是什么?

我没有在Git配置中设置HTTP代理,但是它是一个ISA服务器,需要NTLM身份验证,不是基本的,所以除非有人知道如何强制Git使用NTLM,否则我就完了。

658041 次浏览

如果您想修复证书问题,请跳过这个答案。这个答案涉及ssh通过防火墙的隧道,这是一个更好的解决方案来处理防火墙/代理的事情。

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

我们使用一种叫做开瓶器的工具。这对于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会要求将服务器密钥添加到已知的hosts文件中。如果你是偏执狂,建议将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)

有两种解决方案:

  1. 实际安装根证书。Curl从Mozilla中为您提取证书

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

以下是如何做到这一点。使用cygwin setup.exe安装curl和openssl包 执行:< / p >
<!-- language: lang-bash -->


$ 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

  1. 忽略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)

  1. 在Firefox中,转到github页面(任意)
  2. 点击地址栏上的github图标即可显示证书
  3. 点击“更多信息”->“显示证书”->“详细信息”,选择层次结构中从最上面的开始的每个节点;点击“导出”,选择PEM格式:
    • GTECyberTrustGlobalRoot.pem
    • DigiCertHighAssuranceEVRootCA.pem
    • digicerthighassuranceevca - 1. - pem
    • github.com.pem
    • 李< / ul > < / >
    • 将上述文件保存在本地驱动器的某个地方,将扩展名更改为。pem,并将它们移动到Cygwin安装中的/usr/ssl/certs (Windows: c:\ Cygwin \ssl\certs)
    • (可选)在bash中运行c_reshash。

就是这样。

当然,这只安装一个证书层次结构,你需要的github。当然,您可以将此方法用于任何其他站点,而不需要安装200个您(不一定)信任的站点。

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

export GIT_SSL_NO_VERIFY=true

在那之后,将RVM安装程序卷曲到bash的标准安装过程工作得很好:)

我只需要Cygwin和git的证书,所以我做了@esquifit张贴的东西。然而,我不得不手动运行第5步,c_rehash在我的系统上不可用。我遵循了下面的指南:在OpenSSL框架中安装CA证书

我知道最初的问题列出了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/

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

mkdir ~/certs
curl https://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。Git正在使用的CA文件的路径将显示在以"CAfile:"开头的行中。在输出中。

编辑从http更改为https。

注意:禁用SSL验证存在安全问题。当您使用Git通过网络传输数据时,它允许中间人攻击。在使用此解决方案之前,请确保您完全理解安全影响。或者更好的方法是安装根证书。

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

git config --global http.sslVerify false

这将阻止CURL验证HTTPS认证。

仅针对一个存储库:

git config http.sslVerify false

尝试使用.netrc文件,它将通过https进行身份验证。在你的主目录中创建一个名为.netrc的文件,并把它放在里面:

machine github.com login myusername password mypass

更多信息请看这篇文章:

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

最流行的答案(Alexey Vishentsev)是这样的:

问题是您没有任何认证机构 系统上已安装的证书。这些证书是不可能的

.exe安装在cygwin的setup.exe中

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

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

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

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

如果你在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 repo。只做curl在SSL验证期间出错时所说的:

$ echo insecure >> ~/.curlrc

一旦你安装了homebrewcurl-ca-bundle,删除.curlrc并尝试在github上克隆一个repo。确保没有错误,你就可以开始了。

注意:如果你确实使用了.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-bundle在哪里的提示。

更新:

.curlrc可能是也可能不是你的问题的补救措施。在任何情况下,只要在您的机器上安装Mozilla ca-bundle,不管是否需要手动下载它。这才是最重要的。一旦你得到了ca-bundle,你就可以开始了。只需运行git config命令并将git指向ca-bundle。

更新

我最近不得不补充说:

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

更新

看起来curl-ca-bundle最近从自制啤酒中移除。有一个建议在这里

你会想把一些文件放到:

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

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

解决方法:

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

  • 获取为服务器传递证书的授权机构的证书。

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

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

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

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

我使用apt-cyg(一个类似于apt-get的伟大安装程序)来修复这个问题 轻松下载ca证书(包括Git和更多):

apt-cyg install ca-certificates

请注意: apt-cyg应该首先安装。你可以在Windows上这样做 命令行:< / p >

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

我需要两样东西:

  1. 转到cygwin setup并包含'ca-certificates'包(它在Net下)(如其他地方所示)。

  2. 告诉git在哪里找到已安装的证书:

    GIT_SSL_CAINFO = / usr / ssl /证书/ ca-bundle.crt GIT_CURL_VERBOSE=1 git…

    (不需要Verbose选项)

    或永久存储该选项:

    git配置——global http。sslCAinfo /usr/ssl/certs/ca-bundle.crt

    git…< / p >

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

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

我有这个问题在Windows与TortoiseGit和这解决了它。

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

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

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

我也有同样的问题。 证书导入或取消ssl验证的命令不起作用。 原来是过期的网络代理密码。 代理配置条目。在我的Windows用户配置文件中的.gitconfig文件中。 我只是删除了整个条目,它又开始工作了
在Mac OSX 10.5系统上,我可以用一个简单的方法让它工作。首先,运行github程序和测试,这对我来说工作正常,显示我的证书实际上是好的。 https://help.github.com/articles/generating-ssh-keys < / p >
ssh -T git@github.com
然后我终于注意到遥控器的另一种url格式。我尝试了上面的其他方法,但都没有效果。 http://git-scm.com/book/ch2-5.html < / p >
git@github.com:MyGithubUsername/MyRepoName.git

一个简单的“git push myRemoteName”工作得很好!

我有一份粗糙的PI

pi@raspbmc:~$ git克隆http: //github.com/andreafabrizi/Dropbox-Uploader .git 克隆到'Dropbox-Uploader'… 错误:SSL CA证书(路径?),同时访问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

工作

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

  1. 开放钥匙串访问
  2. 搜寻“数码证书”证书
  3. 查看菜单>显示过期证书

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

希望这能有所帮助。

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

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

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

安装ca-certificates

你看时间了吗?

我绝对拒绝让我的git操作不安全,在尝试了人们在这里提到的一切之后,我突然意识到,证书无法通过验证的一个可能原因是日期错误(要么是证书到期日期,要么是当地的时钟)。

你可以通过在终端中输入date轻松检查。在我的情况下(一个新的树莓派),本地时钟被设置为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

我尝试了所有的方法,最终我在主机文件中看到了github的随机入口。删除别名解决了这个问题

司机% systemroot % \ system32系统\ \等\主机

设置SSL验证为false时在windows上克隆:

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

如果你想克隆没有无聊你的全局设置。

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

从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

你可以在终端中尝试这个命令:

Git配置——global http。sslVerify假

尝试使用命令

git config --global http.sslverify false

该命令将允许来自http的所有不安全的证书,如果在专业环境中使用,请谨慎使用。