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

我试过把遥控器设置为https://username@github.com/username/ExcelANT.git,但按下输入密码的提示,但输入后没有任何反应。 https://username:<密码>github.com/username/ExcelANT.git和克隆空回购从零开始,但每次它给我同样的错误

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

打开GIT_CURL_VERBOSE=1会给我

* About to connect() to github.com port 443 (#0) * Trying 207.97.227.239... * successfully set certificate verify locations: * CAfile: none CApath: /usr/ssl/certs * SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed * Expire cleared * Closing connection #0 * About to connect() to github.com port 443 (#0) * Trying 207.97.227.239... * successfully set certificate verify locations: * CAfile: none CApath: /usr/ssl/certs * SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed * Expire cleared * Closing connection #0 error: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/username/ExcelANT.git/info/refs

fatal: HTTP request failed

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

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


如果您想修复证书问题,请跳过这个答案。这个答案涉及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是一个文本文件,其中一行包含您的代理服务器用户名/密码,由冒号分隔

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文件中。如果你是偏执狂,建议将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)

有两种解决方案:

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

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

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

<!-- 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。

Ignore SSL certificate verification. WARNING: Disabling SSL certificate verification has security implications. Without verification of the authenticity of SSL/HTTPS connections, a malicious attacker can impersonate a trusted endpoint (such as GitHub or some other remote Git host), and you'll be vulnerable to a Man-in-the-Middle Attack. Be sure you fully understand the security issues and your threat model before using this as a solution. $ 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)

In Firefox, go to the github page (any) click on the github icon on the address bar to display the certificate Click through "more information" -> "display certificate" --> "details" and select each node in the hierarchy beginning with the uppermost one; for each of them click on "Export" and select the PEM format: GTECyberTrustGlobalRoot.pem DigiCertHighAssuranceEVRootCA.pem DigiCertHighAssuranceEVCA-1.pem github.com.pem Save the above files somewhere in your local drive, change the extension to .pem and move them to /usr/ssl/certs in your Cygwin installation (Windows: c:\cygwin\ssl\certs ) (optional) Run c_reshash from the bash.

就是这样。

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


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

出口GIT_SSL_NO_VERIFY = true

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


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


我知道最初的问题列出了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_caifo设置路径。

要解决此问题,请设置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)是这样的:

问题是您没有任何认证机构 系统上已安装的证书。这些证书是不可能的 使用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也不会让你得到很多,因为它只是keg,不会被链接(运行哪个curl将总是输出/usr/bin/curl,这是你的操作系统自带的默认值)。这篇文章也可能有一些价值。

当然,在安装homebrew之前,您需要禁用SSL,因为它是一个git回购。只做curl在SSL验证期间出错时所说的:

$ echo insecure >> ~/.curlrc

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

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

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

跑步之后:

$ brew update
$ brew upgrade

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

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

这样你就万事俱备了。

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

$ git config -l --system

应该会给出一个类似的错误

无法读取配置文件/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。

更新

我最近不得不补充说:

出口CURL_CA_BUNDLE = / usr /地方/分享/ ca-bundle。crt到我的。zshenv点文件,因为我使用zsh。git配置选项工作在大多数情况下,但当点击github通过SSL (rvm获得稳定的例子),我仍然遇到证书问题。@Maverick在他的评论中指出了这一点,但以防有人忽略了这一点,或者认为除了运行git配置之外,他们不一定需要导出这个环境变量——system....命令。谢谢,希望这能有所帮助。

更新

看来卷曲-ca-bundle最近从自制程序中删除了。这里有一个建议。

你会想把一些文件放到:

$ (openssl - -prefix冲泡)/ etc / / certs


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

解决方法:

I've Updated the release of Curl installed on the server. Download the last version on the website Download page of curland follow the installation proceedings Installation proceedings of curl Get back the certificate of the authority which delivers the certificate for the server. Add this certificate to the CAcert file used by curl. On my server it is located in /etc/pki/tls/certs/ca-bundle.crt. Configure git to use this certificate file by editing the .gitconfig file and set the sslcainfo path. sslcainfo= /etc/pki/tls/certs/ca-bundle.crt On the client machine you must get the certificate and configure the .gitconfig file too.

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


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

我需要两样东西:

转到cygwin设置并包含'ca-certificates'包(它在Net下)(如其他地方所示)。 告诉git在哪里可以找到已安装的证书: GIT_SSL_CAINFO = / usr / ssl /证书/ ca-bundle。GIT_CURL_VERBOSE=1 git… (不需要Verbose选项) 或永久存储该选项: Git配置——global http。sslCAinfo /usr/ssl/certs/ca-bundle.crt git……


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

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

ssh -T git@github.com

然后我终于注意到遥控器的另一种url格式。我尝试了上面的其他方法,但都没有效果。 http://git-scm.com/book/ch2-5.html

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

then

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

工作


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

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

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

希望这能有所帮助。


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

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

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

安装ca-certificates


你看时间了吗?

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

您可以通过在终端中输入日期轻松地进行检查。在我的情况下(一台新的树莓派),本地时钟被设置为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的随机入口。删除别名解决了这个问题

etc, etc % systemroot % \ system32 drivers \ \ hosts


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

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

如果你想克隆而不无聊你的全局设置。


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


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

git -c http.sslVerify=false clone https://<username>:<token>@github.com/repo.git

or,

git config --global http.sslVerify false
git clone https://github.com/repo.git

您可以在终端中尝试此命令:

Git配置——global http。sslVerify假


尝试使用命令

git config --global http.sslverify false

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