我的公司使用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"
我尝试了下面的命令,我在另一个解决方案git config --global http."<my gitlab server url>.sslCAInfo C:/path/to/cert.pem
中看到,但它给了我同样的错误。命令中使用的证书我从GitLab服务器下载了它,通过点击挂锁图标🔏和查看证书。
每次我从UI推送或拉取时都会发生这种情况。当我使用像Git Bash或PowerShell这样的单独终端时,不会发生此错误。
2条答案
按热度按时间nukf8bse1#
经过大量的咬牙切齿和搜索(并在这个问题上悬赏),我能够自己确定一个解决方案:将加密网络提供商从OpenSSL切换到Secure Channel。
在工具>选项>源代码控制> Git全局设置下
我不知道为什么OpenSSL给了我一个错误;也许有一个更好的解决方案可以与OpenSSL一起使用。但是,在连接到我公司的Azure DevOps存储库时,只需使用Windows SSL实现就可以解决这个问题。
kh212irz2#
很可能您的公司正在为您的内部域名使用自签名的公司根证书。
在windows上,git提供了两种实现来设置安全的https连接。SChannel(安全通道)或OpenSSL。
看起来您的Visual Studio安装默认为SChannel实现。在这种情况下,必须将其他证书安装到Windows证书存储中。
SChannel实现忽略
http.".sslCAInfo
设置。通常,这些证书会使用windows中的策略预先安装在您的系统上。通过切换到Secure Channel安全库,git能够利用Windows的内部方法来设置HTTPS连接,并且此方法将自动信任Windows信任存储中的证书。
在OpenSSL库的情况下,Windows商店不受信任,证书必须单独保存,并通过git config中的
http.".sslCAInfo
配置密钥进行配置。看起来你的Git客户端被配置为使用Windows证书存储(提示在日志中的“schannel”一词中)。
若要使证书可信,必须将其添加到系统级的windows证书存储区或用户的证书存储区中。
或者,您可以使用全局git配置将SSL实现显式设置为OpenSSL:
http.sslBackend
-要使用的SSL后端的名称(例如“OpenSSL”或“Schannel”)。如果cURL不支持在运行时选择SSL后端,则忽略此选项。您也可以在Visual Studio配置中设置加密网络提供程序,具体如下:在工具>选项>源代码控制> Git全局设置下
相关信息: