VS 2022:在推送到远程仓库时遇到错误:“Git 发生致命错误,推送失败…”

5
我的公司使用Gitlab,在Visual Studio 2022的Git UI中尝试推送到远程功能分支时,我在输出窗口中遇到以下错误:
“在推送到远程存储库时遇到错误:Git失败,致命错误。 Git失败,致命错误。 无法访问'':schannel:CertGetCertificateChain信任错误CERT_TRUST_IS_UNTRUSTED_ROOT”
我尝试了另一个解决方案中看到的以下命令:“git config --global http.".sslCAInfo C:/path/to/cert.pem",但是它给我同样的错误。命令中使用的证书是通过点击锁图标和“查看证书”从gitlab服务器下载的。
每次我使用UI进行推送或拉取时都会发生这种情况。当我使用单独的终端,如Git Bash或Powershell时,不会出现此错误。
我已经陷入了困境,我搜索了类似的解决方案,但没有帮助到我的问题。

我有同样的问题,但是是在Azure DevOps(dev.azure.com)上。 - undefined
2个回答

2
经过长时间的苦思冥想和搜索(并且为这个问题悬赏),我终于能够自己找到一个解决方法:将加密网络提供程序从OpenSSL切换到Secure Channel。

enter image description here

在“工具”>“选项”>“源控制”>“Git全局设置”下。
我不知道为什么OpenSSL给了我一个错误;也许有一个更好的解决方案可以与OpenSSL一起使用。但是,当连接到我的公司的Azure DevOps存储库时,仅使用Windows的SSL实现就解决了这个问题。

很可能您的公司在内部域名中使用了自签名的企业根证书。而且,使用Windows策略预安装这些受信任的根证书到您的系统也非常常见。通过切换到安全通道安全库,Git能够利用Windows内部的方法来建立HTTPS连接,这种方法会自动信任Windows信任存储中的证书。而对于OpenSSL库来说,Windows存储是不受信任的,证书必须单独保存。 - undefined
1
你的问题实际上是原问题的完全相反。 - undefined
当我将一个仓库克隆到升级为Windows 11的公司机器上时,我也遇到了这个问题。更改为安全通道解决了问题。 - undefined

1
很有可能您的公司在内部域名中使用了自签名的企业根证书。
在Windows上,Git提供了两种实现来设置安全的HTTPS连接。SChannel(安全通道)或OpenSSL。
看起来您的Visual Studio安装默认使用了SChannel实现。在这种情况下,必须将其他证书安装到Windows证书存储中。
SChannel实现会忽略“http.sslCAInfo”设置。
通常情况下,这些证书会通过Windows中的策略预先安装在您的系统上。通过切换到Secure Channel安全库,Git能够利用Windows内部的方法来建立HTTPS连接,并且该方法会自动信任Windows信任存储中的证书。
在OpenSSL库的情况下,Windows存储是不受信任的,证书必须单独保存并通过git配置中的“http.sslCAInfo”配置键进行配置。
看起来您的Git客户端配置为使用Windows证书存储(日志中的提示是“schannel”一词)。
要使证书受信任,您需要将其添加到Windows证书存储中,可以是系统级别或用户的证书存储中。
或者,您可以在全局git配置中明确设置SSL实现为OpenSSL:

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

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

enter image description here

相关内容:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接