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/3777075/

相关文章:

git - 如何在差异期间使用 git filter.gitignore.clean 过滤两个分支

git - 从 PowerShell 调用 git 命令

Android Studio 版本控制不断将构建目录添加到提交中

学校的Github配置

Java MTLS 主题和发行者顺序

git - 使用 GitHub 进行项目管理

github - 如何从 GitHub Api 获取用户的编程语言?

linux - 目录 "/etc/ss/certs"包含什么?

asp.net - 消息 "28000: no pg_hba.conf entry for host\"xx.xxx.xxx.xxxx\", user\"用户”,数据库\"databasename\",SSL 关闭”

android - 如何将示例 ApiDemo 导入 Android Studio 1.5.1