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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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并从头开始克隆空仓库,但每次它都给我同样的错误

错误:SSL证书问题,验证CA证书是否正常。细节: 错误:14090086: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:无 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,否则我会被打破。

答案

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

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

我们使用一种叫做开瓶器的工具。这可以通过CygWin(通过cygwin主页设置)和Linux使用您喜欢的打包工具。对于MacOSX,它至少可以从macports和brew中获得。

命令行如下:

$ corkscrew <proxyhost> <proxyport> <targethost> <targetport> <authfile>

proxyhost和proxyport是https代理的坐标。 targethost和targetport是隧道到的主机的位置。 authfile是一个文本文件,其中包含由冒号分隔的代理服务器用户名/密码的1行

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上使用它。

如果你想要你可以read more about it in this blog post

另一答案

要在将SSL验证设置为false时在Windows上进行克隆:

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

如果您想要克隆而不需要考虑全局设置。

另一答案

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

  1. 在Firefox中,转到github页面(任何)
  2. 单击地址栏上的github图标以显示证书
  3. 单击“更多信息” - >“显示证书” - >“详细信息”,然后从最上面的一个开始选择层次结构中的每个节点;对于他们每个人点击“导出”并选择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。

而已。

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

另一答案

如果您使用的是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将始终输出/usr/bin/curl,这是您的操作系统附带的默认值)。 This post may also be of some value

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

$ 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即可。

UPDATE

我最近不得不补充:

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

UPDATE

它看起来像curl-ca-bundlerecently removed from homebrew。有一个recommendation here

您需要将一些文件放入:

$(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

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

wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
install apt-cyg /bin
另一答案

在我有的覆盆子pi

pi @ raspbmc:〜$ git clone http://github.com/andreafabrizi/Dropbox-Uploader .git克隆到'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  

工作

另一答案

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

apt-get install ca-certificates

另一答案

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

您可以在命令行上使用openssl验证事情是否正常工作:

openssl s_client -connect github.com:443
另一答案

尝试使用.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轻松查看。在我的情况下(一个新的覆盆子Pi),本地时钟设置为1970年,所以一个

以上是关于SSL证书拒绝尝试通过HTTPS后面的防火墙访问GitHub的主要内容,如果未能解决你的问题,请参考以下文章

如何单独为子域名启用 SSL,即使用 HTTPS 访问

firewalld拦截,导致安装ssl证书后https无法访问

iis 申请SSL通道 无法访问

Moqui 连接在 Nginx 后面的 HTTPS 上被拒绝

在java中怎么验证ssl证书的有效性

用jmeter通过ssl验证访问https