如何配置Git信任来自Windows证书存储的证书?

113

目前我在我的用户目录下的.gitconfig文件中有以下条目。

...
[http]
    sslCAInfo=C:\\Users\\julian.lettner\\.ssh\\git-test.pem
...

这将设置在与 git 服务器交互时使用的证书(我公司的 git 服务器所需)。

但现在我无法克隆其他仓库(例如 GitHub 上的公共仓库),因为客户端总是使用配置的证书,而这些证书会被其他服务器拒绝。

如何规避这个认证问题?我能否配置 Git 使用 Windows 证书存储来进行身份验证?


相关内容:如何让git接受自签名证书? - Stevoisiak
相关内容:https://dev59.com/q2Qn5IYBdhLWcg3wGD1s - Jay M
1
您的证书不会被其他服务器拒绝。问题在于客户端(git)无法验证服务器的证书。 - Nicolas Lykke Iversen
关于此问题在Azure DevOps上的相关问题。 - Rajesh Swarnkar
2个回答

342

从Git for Windows 2.14开始,现在可以配置Git使用SChannel,这是Windows内置的网络层。这意味着它将使用Windows证书存储机制,您不需要明确配置curl CA存储机制。

来自Git for Windows 2.14 发布说明:

现在可以通过设置http.sslBackend配置变量为"openssl""schannel"在Git的HTTPS传输中切换安全通道和OpenSSL; 这也是安装程序使用的方法(而不是复制libcurl-4.dll文件)。

您可以选择在Git for Windows 2.14安装期间使用新的SChannel机制。您也可以通过运行以下命令更新现有安装以使用SChannel:

git config --global http.sslBackend schannel

配置完成后,Git将使用Windows证书存储,并且不需要(实际上应该忽略)http.sslCAInfo配置设置。


20
看起来这应该是正确的方法,但我收到了这个错误:fatal: unable to access '...': schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate.但这可能是证书本身存在问题。 - Bluehorn
6
最新版本的git 2.17.1.2内置了libcurl,仍会读取http.sslCAInfo文件并在其包含错误时引发ssl验证问题。更多详情请参见https://developercommunity.visualstudio.com/content/problem/267483/git-stops-trusting-private-certificates-via-schann-1.html。 - JamesD
3
已完成。需要以管理员权限运行。 - rwms
3
@FranklinYu Git for Windows是git的一个分支 - 你指向的文档不是Git for Windows的官方文档;你指向的是git本身的文档。你可能会在Git for Windows的官方文档https://gitforwindows.org/中找到这个信息(但它可能确实缺少官方文档)。我很抱歉这让人感到困惑。 - Edward Thomson
2
有没有人知道是否有办法将此配置扩展到随 Git for Windows 一起提供的 curl?我希望它可以基于系统 CA 存储库扩展信任。 - rfay
显示剩余12条评论

10

使用:

git config  --local ...

指定每个仓库的设置。本地设置存储在.git目录中。

git可以存储设置的三个位置概述:

  • --local:仓库特定设置,<repo_dir>/.git/config
  • --global:用户特定设置,~/.gitconfig
  • --system:系统默认设置,/etc/gitconfig

更具体的设置会覆盖更一般的设置,例如本地设置会覆盖全局和系统设置。


8
Git for Windows是否真的无法接受已在操作系统中配置的可信根证书? - Fabian Schmied
4
我尚未找到让git使用根证书的方法。你可以通过git config --global http.sslVerify false设置或GIT_SSL_NO_VERIFY=true环境变量关闭证书验证。 - Andomar
@Andomar 十年过去了,同样的问题仍然存在于任何Windows版本中,但并非在每个实例中都会出现。唯一共同点是发生问题的系统用户没有机器管理员权限,但不清楚这是否是实际原因。 - Swift - Friday Pie

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