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

标签 git ssl github cygwin ssl-certificate

我受困于防火墙,因此必须使用 HTTPS 访问我的 GitHub 存储库。我在 Windows XP 上使用 cygwin 1.7.7。

我试过将 Remote 设置为 https://username@github.com/username/ExcelANT.git ,但推送密码提示,但在我输入密码后什么也没做。 https://username:<password>github.com/username/ExcelANT.git并从头开始克隆空的 repo,但每次它都会给我同样的错误

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

开启 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 代理,但是它是一个需要 NTLM 身份验证的 ISA 服务器,而不是基本的,所以除非有人知道如何强制 git 使用 NTLM,否则我很沮丧。

最佳答案

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

更新:Install Net/ca-certificates package in cygwin (感谢 dirkjot)

有两种解决方法:

  1. 实际安装根证书。 Curl guys extracted for you certificates from Mozilla .

cacert.pem 文件就是您要查找的内容。此文件包含 > 250 个 CA 证书(不知道如何信任这个数量的人)。您需要下载此文件,将其拆分为单独的证书,将它们放入/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

  1. 忽略 SSL 证书验证。

    警告:禁用 SSL 证书验证会产生安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以冒充受信任的端点(例如 GitHub或其他一些远程 Git 主机),你将容易受到 Man-in-the-Middle Attack 的攻击. 在将其用作解决方案之前,请确保您完全了解安全问题您的威胁模型。

     $ env GIT_SSL_NO_VERIFY=true git clone https://github...
    

关于git - SSL 证书拒绝尝试通过防火墙后的 HTTPS 访问 GitHub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4652532/

相关文章:

c# - StreamReader.ReadLine() 在与 POP3 一起使用时总是失败

git - 如何让 Panic Coda 使用 Github 进行源代码控制?

file - Github,文件太大已删除。

git - 个人账号可以在GitHub上建多少个公共(public)仓库?

git - 在 pull 请求时重命名分支

php - 安全地发送表单数据而不是使用 post

公共(public)功能分支的 git 工作流程

Git:为发布选择更改的子集

git - 如何使用git从两台不同的机器进行提交

ruby-on-rails - 防止子域上的 SSL