我被困在防火墙后面,所以必须使用 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: none CApath: /usr/ssl/certs * SSL 证书问题,验证CA 证书没问题。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 * 过期已清除 * 正在关闭连接 #0 * 即将 connect() 到 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,否则我会被吓到。
问题是您的系统上没有安装任何证书颁发机构证书。并且这些证书不能用 cygwin 的 setup.exe 安装。
更新:Install Net/ca-certificates package in cygwin(感谢 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
。
忽略 SSL 证书验证。警告:禁用 SSL 证书验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以冒充受信任的端点(例如 GitHub 或其他远程 Git 主机),您将容易受到中间人攻击。在将其用作解决方案之前,请确保您完全了解安全问题和威胁模型。 $ env GIT_SSL_NO_VERIFY=true git clone https://github...
注意:禁用 SSL 验证具有安全隐患。当您使用 Git 通过网络传输数据时,它允许中间人攻击。在将其用作解决方案之前,请确保您完全了解安全隐患。或者更好的是,安装根证书。
一种方法是禁用 SSL CERT 验证:
git config --global http.sslVerify false
这将阻止 CURL 验证 HTTPS 认证。
仅适用于一个存储库:
git config http.sslVerify false
我希望 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。
/etc/ssl/certs/ca-certificates.crt
,它神奇地工作了!
git config --global http.sslCAinfo "$HOME/certs/cacert.pem"
如果您想解决证书问题,请随意跳过此答案。这个答案处理通过防火墙的隧道 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 是一个文本文件,其中 1 行包含您的代理服务器用户名/密码,以冒号分隔
例如:
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 将要求将服务器密钥添加到已知主机文件中。如果您偏执,建议您将 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 上使用它。
如果您愿意,您可以read more about it in this blog post
Host ssh.github.com >User oharab >Hostname ssh.github.com >Port 443 >PreferredAuthentications publickey >IdentityFile ~/.ssh/id_rsa
并使用 git clone git@ssh.github.com:oharab/log4vba.git
立即启动并运行它。
请注意,为了让我能够正常工作(在 CentOS 5.6 上安装 RVM),我必须运行以下命令:
export GIT_SSL_NO_VERIFY=true
之后,将 RVM 安装程序卷曲到 bash 中的标准安装过程很有效:)
一个非常简单的解决方案:将 https:// 替换为 git://
使用 git://the.repository 而不是 https://the.repository 并且会起作用。
我在 Windows 上使用 TortoiseGit 遇到了这个问题,这解决了它。
git://
的 ssl。如 this answer above 中所述,禁用 ssl 验证存在安全风险。
git://
协议使用 SSH,它使用 SSH 公钥和私钥对进行身份验证和加密,而不是 SSL 证书。
正如最受欢迎的答案(Alexey Vishentsev)所说:
问题是您的系统上没有安装任何证书颁发机构证书。并且这些证书不能用 cygwin 的 setup.exe 安装。
然而,最后一个断言是错误的(现在,或者一直是,我不知道)。
你所要做的就是去 cygwin setup 并包含包'ca-certificates'(它在Net下)。这对我有用。
CAfile: /etc/ssl/ca-bundle.crt
而 cygwin ca-certificates 软件包安装 /usr/ssl/certs/ca-bundle.crt
。因此,必须编辑 ~/.gitconfig
以指定位置:[http]
然后 sslCAinfo = /usr/ssl/certs/ca-bundle.crt
sudo ln -s /usr/ssl/certs/ca-bundle.crt /etc/ssl/
ca-certificates
。
error: SSL certificate problem, verify that the CA cert is OK.
在将 SSL 验证设置为 false 时在 Windows 上进行克隆:
git -c http.sslVerify=false clone http://example.com/e.git
如果您想在不破坏全局设置的情况下进行克隆。
我知道最初的问题列出了 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/
yum update openssl
修复了它,它也更新了 ca-bundle。
在 CentOS 5.x 上,一个简单的 yum update openssl
更新了 openssl 软件包,它更新了系统 ca-bundle.crt
文件并为我解决了问题。
其他发行版可能也是如此。
如果您只想在 github.com 上使用 Cygwin git 客户端,那么有一种更简单的方法,而无需经历下载、提取、转换、拆分证书文件的麻烦。进行如下操作(我假设 Windows XP 带有 Cygwin 和 Firefox)
在Firefox中,进入github页面(任意)点击地址栏上的github图标显示证书点击“更多信息”->“显示证书”-->“详细信息”并选择层次结构开始的每个节点与最上面的一个;对于每个文件,单击“导出”并选择 PEM 格式: GTECyberTrustGlobalRoot.pem DigiCertHighAssuranceEVRootCA.pem DigiCertHighAssuranceEVCA-1.pem github.com.pem 将上述文件保存在本地驱动器中的某个位置,将扩展名更改为 .pem 并移动它们到 Cygwin 安装中的 /usr/ssl/certs (Windows: c:\cygwin\ssl\certs )(可选)从 bash 运行 c_reshash。
而已。
当然,这只安装了一个证书层次结构,即 github 所需的那个层次结构。您当然可以将此方法用于任何其他站点,而无需安装 200 个您不(不一定)信任的站点的证书。
您可以在终端中尝试此命令:
git config --global http.sslVerify false
如果您使用的是 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-bundle 由 Mozilla
提供。这是您在很多问题中看到的内容。希望这会有所帮助,因为如何在 Mac OS X 上解决这个问题并不是很简单。brew install curl
也不会为您带来太多,因为它是 keg only and will not be linked(运行 which curl
将始终输出 /usr/bin/curl
,这是您的操作系统附带的默认设置)。 This post may also be of some value。
您当然需要在安装 homebrew
之前禁用 SSL,因为它是一个 git 存储库。只需按照 curl 在 SSL 验证期间出错时所说的操作,然后:
$ echo insecure >> ~/.curlrc
将 homebrew
与 curl-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
点文件,因为我正在使用 zsh
。 git config
选项适用于大多数情况,但是当通过 SSL(例如 rvm get stable
)访问 github 时,我仍然遇到证书问题。 @Maverick 在他的评论中指出了这一点,但以防万一有人错过它或假设他们除了运行 git config --system....
命令之外不一定需要导出此环境变量。谢谢,希望这会有所帮助。
更新
看起来 curl-ca-bundle 是 recently removed from homebrew。有一个recommendation here。
您需要将一些文件放入:
$(brew --prefix)/etc/openssl/certs
export CURL_CA_BUNDLE=/usr/local/share/ca-bundle.crt
对于 Solaris Express 11,我也遇到了同样的问题。我花了一段时间,但我设法找到了需要放置证书的位置。根据/etc/openssl/openssl.cnf,证书的路径是/etc/openssl/certs。我放置了使用 Alexey 的上述建议生成的证书。
您可以在命令行上使用 openssl 验证一切是否正常:
openssl s_client -connect github.com:443
我使用 apt-cyg(类似于 apt-get 的出色安装程序)解决了这个问题,以便轻松下载 ca 证书(包括 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
如果您使用基于 debian 的操作系统,您可以简单地运行
apt-get 安装 ca 证书
从 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
在我的树莓派上
pi@raspbmc:~$ git clone http://github.com/andreafabrizi/Dropbox-Uploader .git Cloning into 'Dropbox-Uploader'... 错误:访问时 SSL CA 证书(路径?访问权限?)有问题http://github.com/andreafabrizi/Dropbox-Uploader.git/info/refs 致命:HTTP 请求失败
所以身份证
sudo apt-get install ca-certificates
然后
git clone http://github.com/andreafabrizi/Dropbox-Uploader.git
工作过
尝试使用 .netrc 文件,它将通过 https 进行身份验证。在您的主目录中创建一个文件调用 .netrc
并将其放入其中:
machine github.com login myusername password mypass
有关更多信息,请参阅此帖子:
https://plus.google.com/u/0/104462765626035447305/posts/WbwD4zcm2fj
通过在 Windows cmd 中临时禁用 GIT/curl ssl 验证来改进 RouMao 的解决方案:
set GIT_SSL_NO_VERIFY=true
git config --global http.proxy http://<your-proxy>:443
这个方案的好处是只在当前cmd窗口生效。
你检查过你的时间吗?
我绝对拒绝让我的 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
尝试使用命令
git config --global http.sslverify false
此命令将允许所有来自 http 的证书,这些证书不安全,但如果在专业环境中使用,请谨慎使用。
我在必须管理的协作开发平台上配置 Git 时遇到了同样的问题。
要解决它:
我已经更新了安装在服务器上的 Curl 版本。在网站上下载最新版本 curl的下载页面并按照安装程序进行 curl的安装程序
取回为服务器提供证书的颁发机构的证书。
将此证书添加到 curl 使用的 CAcert 文件中。在我的服务器上,它位于 /etc/pki/tls/certs/ca-bundle.crt。
通过编辑 .gitconfig 文件并设置 sslcainfo 路径,将 git 配置为使用此证书文件。 sslcainfo= /etc/pki/tls/certs/ca-bundle.crt
在客户端计算机上,您还必须获取证书并配置 .gitconfig 文件。
我希望这会对你们中的一些人有所帮助。
我尝试了一切,最终我查看了主机文件,那里有一个 github 的随机条目。删除别名解决了问题
%systemroot%\system32\drivers\etc\hosts
https://i.stack.imgur.com/p9Bbx.png
我只需要 Cygwin 和 git 的证书,所以我做了@esquifit 发布的内容。但是,我必须手动运行第 5 步,c_rehash 在我的系统上不可用。我遵循了本指南:Installing CA Certificates into the OpenSSL framework。
我需要两件事:
转到 cygwin 设置并包含包“ca-certificates”(它在 Net 下)(如其他地方所示)。告诉 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 ...
我遇到过同样的问题。证书导入或取消设置 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”效果很好!
我最近(2014 年 7 月)遇到了类似的问题,并在 OS X(10.9.4)上发现“DigiCert High Assurance EV Root CA”证书已过期(尽管我还有另一个未过期的证书)。
打开 Keychain Access 搜索“DigiCert”的证书 查看菜单 > 显示过期证书
我发现了两个名为“DigiCert High Assurance EV Root CA”的证书,一个在 2031 年 11 月到期,一个在 2014 年 7 月(几天前)到期。删除过期的证书为我解决了这个问题。
希望这可以帮助。
wget -O - http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_a fter=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
ca-certificates
软件包即可获取丢失的根证书。为什么这个答案会引起如此多的关注?