VS 2022:“推送到远程存储库时遇到错误:Git 失败并出现致命错误......”

lin*_*ame 7 git ssl-certificate visual-studio gitlab

我的公司使用 GitLab,当我尝试使用 Visual Studio 2022 中的 Git UI 推送到远程功能分支时,我在“输出”窗口中收到以下错误:

Git failed with a fatal error.
unable to access '<my gitlab server url>': 
  schannel: CertGetCertificateChain trust error CERT_TRUST_IS_UNTRUSTED_ROOT"
Run Code Online (Sandbox Code Playgroud)

我尝试了在另一个解决方案中看到的以下命令,git config --global http."<my gitlab server url>.sslCAInfo C:/path/to/cert.pem但它给了我同样的错误。命令中使用的证书是我通过单击挂锁图标和来从 GitLab 服务器下载的View Certificate

每次我从用户界面推送或拉取时都会发生这种情况。当我使用单独的终端(例如 Git Bash 或 PowerShell)时,不会发生该错误。

Myr*_*rys 8

经过一番咬牙切齿和搜索(并对这个问题悬赏)后,我自己找到了一个解决方法:将加密网络提供商从 OpenSSL 切换到安全通道。

在此输入图像描述

在“工具”>“选项”>“源代码管理”>“Git 全局设置”下

我不知道为什么 OpenSSL 给我一个错误;也许有更好的解决方案可以与 OpenSSL 配合使用。但在连接到我公司的 Azure DevOps 存储库时,仅使用 Windows SSL 实现就解决了这个问题。


jes*_*ing 4

您的公司可能正在为您的内部域名使用自签名的公司根证书。

在 Windows 上,git 提供了 2 种实现来设置安全的 https 连接。SChannel(安全通道)或 OpenSSL。

看起来您的 Visual Studio 安装默认为 SChannel 实现。在这种情况下,必须将其他证书安装到 Windows 证书存储中。

SChannel 实现忽略该http.".sslCAInfo设置。

这些证书通常使用 Windows 中的策略预安装在您的系统上。通过切换到 Secure Channel 安全库,git 能够利用 Windows 的内部方法来设置 HTTPS 连接,并且该方法将自动信任 Windows 信任存储中的证书。

对于 OpenSSL 库,Windows 存储不受信任,必须单独保存证书并通过http.".sslCAInfogit 配置中的配置密钥进行配置。

您的 Git 客户端似乎已配置为使用 Windows 证书存储(提示位于日志中的“schannel”一词中)。

要使证书受信任,您必须将其添加到系统级别的 Windows 证书存储区或用户的证书存储区中。

或者,您可以使用全局 git 配置将 SSL 实现显式设置为 OpenSSL:

http.sslBackend- 要使用的 SSL 后端的名称(例如“openssl”或“schannel”)。如果 cURL 不支持在运行时选择 SSL 后端,则忽略此选项。

您还可以在 Visual Studio 配置中的以下位置设置加密网络提供程序:在“工具”>“选项”>“源代码管理”>“Git 全局设置”下

在此输入图像描述

有关的: