我一直在尝试通过来自企业 GitHub 服务器的 http 代理(在 git 全局配置中设置)从 Ubuntu AWS 实例克隆 git 存储库。
从代理克隆可以工作,但是从实例克隆(通过代理)我收到以下错误:
致命:无法访问“https://githubserver.company.com/repository.git/”:服务器证书验证失败。 CA 文件:/etc/ssl/certs/ca-certificates.crt CRL 文件:无
我已经尝试下载服务器证书,将其添加到我的受信任证书中,并在 git 配置中指定 http.sslCAInfo 或 http.sslCAPath 选项,如许多其他线程中指定的那样。
显然,遇到此问题的其他人至少能够调试该问题,或者通过在 git 配置中暂时禁用 ssl 验证来对安全规则进行一次性例外。 然而,使用
git config --global http.sslVerify false
或任何变体(作为命令标志、环境变量、本地、全局或系统级别等)都没有效果。
这种情况发生在日期/时间不同步的人身上(但 AWS 实例和代理中的时间都是通过同一个 ntp 服务器同步的),或者在 Windows 上的特定上下文中,但我找不到此 git 的任何其他实例在 Linux 机器上像这样忽略配置。
我知道这会产生重大的安全隐患,但无法找到有类似问题的人让我觉得我一定错过了一些东西。
我浏览了几十个类似的帖子,但找不到一个人有我同样的问题。
我通过以下方式获得证书:
openssl s_client -showcerts -connect $hostname:$port -servername $hostname
放入
/usr/local/share/ca-certificates/
作为 .pem 文件
通过将证书添加到/etc/ssl/certs/ca-certificates.crt
sudo update-ca-certificates
.
并在 git 全局配置中添加以下选项:
sslCAInfo = /etc/ssl/certs/ca-certificats.crt
sslCAPath = /etc/ssl/certs/
尝试之前:
git config --global http.sslVerify false
为了确定:您的用户环境中是否设置了 GIT_SSL_NO_VERIFY 来覆盖相应的全局设置 http.sslVerify?
另外,我不确定您是否应该在引用“https://githubserver.company.com/repository.git/”中看到尾部斜杠“/”。您是在获取目录还是存储库本身?
最可能的解释是证书链损坏或缺少信任。
也许 HTTP 代理服务器由于某种原因行为不当,不允许您设置安全连接。是否支持 SSL/TLS 并且您的请求是否通过适当的网络端口运行?我很好奇您是否能够通过代理从同一目标服务器进行(非 git)HTTPS 下载...