java - GIT 客户端如何处理存储库的错误 SSL 设置?
问题描述
对于我在 Java 应用程序上编写的个人宠物项目,该应用程序通过 https 从 GIT 存储库中提取代码并执行一些分析。但是,当我开始针对公司存储库中的代码存储测试它时,我得到了“PKIX 路径构建失败”和“无法找到请求目标的有效认证路径”错误。
快速谷歌搜索表明,问题的主要原因是基础设施中的 SSL 设置不正确,例如自签名证书。
我找到了避免此错误的可能解决方法:
- 手动将主机证书添加到 JRE 可信证书中。
- 在启动期间将证书动态添加到应用程序资源文件中的受信任证书中。
- 在应用程序启动期间完全禁用 SSL 验证,但这会使应用程序容易受到“中间人”攻击。但这不是问题。
当我使用标准 GIT 客户端(也通过 https)使用这个公司存储库时,我从来没有遇到过 SSL 或证书的任何问题。所以问题是——官方 GIT 客户端如何避免链中自签名证书的这个问题?
解决方案
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 的源代码并自己构建它,从而控制使用哪个库。
推荐阅读
- keycloak - Micronaut 钥匙斗篷
- swift - Swift 初始化类和使用参数和方法
- vue.js - Stripe 未注册新日志
- javascript - 通过将属性相乘来更新数组总属性
- javascript - AWS Cognito:更改用户属性或删除用户如何需要密码?
- mapping - MRTK v2 空间映射隐藏多边形的可视化
- rust - 从先前完成的 Stream 的结果中产生一个 Stream
- google-mlkit - 如何使用 MLKit FaceDetector 跟踪图像的人脸
- python - Kivy在wi上返回黑屏
- android - 从中心而不是左上角设置视图的位置