首页 > 解决方案 > GIT 客户端如何处理存储库的错误 SSL 设置?

问题描述

对于我在 Java 应用程序上编写的个人宠物项目,该应用程序通过 https 从 GIT 存储库中提取代码并执行一些分析。但是,当我开始针对公司存储库中的代码存储测试它时,我得到了“PKIX 路径构建失败”和“无法找到请求目标的有效认证路径”错误。

快速谷歌搜索表明,问题的主要原因是基础设施中的 SSL 设置不正确,例如自签名证书。

我找到了避免此错误的可能解决方法:

  1. 手动将主机证书添加到 JRE 可信证书中。
  2. 在启动期间将证书动态添加到应用程序资源文件中的受信任证书中。
  3. 在应用程序启动期间完全禁用 SSL 验证,但这会使应用程序容易受到“中间人”攻击。但这不是问题。

当我使用标准 GIT 客户端(也通过 https)使用这个公司存储库时,我从来没有遇到过 SSL 或证书的任何问题。所以问题是——官方 GIT 客户端如何避免链中自签名证书的这个问题?

标签: javagitsslhttps

解决方案


Git 本身不会对此做任何事情。

Git 在与其他 Git 提供者交谈时使用帮助程序(外部程序和库)。这些程序和库负责所有这些。因此,如果您使用git fetch或- 请git push注意git pull使用git fetch- 并且将它们与以 开头的 URL 一起使用https://,Git 将使用系统提供的 HTTPS 库,1通常称为“libcurl”或仅称为curl. 如果你使用ssh://URL,Git 使用系统提供的ssh.

Pro Git Book包括一章关于 Git 内部的章节,其中一节专门介绍环境变量。使用 libcurl 时,这些变量特别有用:

  • GIT_CURL_VERBOSE打印出与打印相同的东西curl -v
  • GIT_SSL_NO_VERIFY关闭 SSL 证书验证。因此,默认必须进行验证,这(当然)会出现自签名证书的问题。

当我使用标准 GIT 客户端(也通过 https)使用这个公司存储库时,我从来没有遇到过 SSL 或证书的任何问题。

这很有趣和好奇;也许用 set 调用 GitGIT_CURL_VERBOSE会显示这里发生了什么,或者可能不会。或者,用于构建特定 Git 的 libcurl 可能使用了一些您的 Java 库不使用的 CA 文件。


1这方面的细节将取决于您的 Git 二进制文件是如何构建的。如果您愿意,您可以获取 Git 的源代码并自己构建它,从而控制使用哪个库。


推荐阅读