【问题标题】:Git - The revocation function was unable to check revocation for the certificateGit - 吊销功能无法检查证书的吊销
【发布时间】:2018-01-15 07:22:52
【问题描述】:

我正在尝试使用 Github Desktop 和 git shell 从 Github 进行克隆,但不断收到此错误:

Cloning into 'C:\Users\John Doe\workspace\MyProject'...
fatal: unable to access 'https://github.com/JohnDoe/MyProject.git/': 
schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - 
The revocation function was unable to check revocation for the certificate.

拉取现有存储库时出现同样的问题。

我已经尝试将~/.ssh/github-ssh.pub 中的 SSH 密钥上传到 Github 设置,但没有任何帮助。

编辑:刚刚检查过,即使我尝试克隆一个不存在的存储库也会发生。

【问题讨论】:

  • 要使用 ssh 密钥,您需要将 URL 从 https://github.com/JohnDoe/MyProject.git 更改为 git@github.com:JohnDoe/MyProject.git

标签: git github


【解决方案1】:

禁用证书验证总是一个坏主意(将http.sslVerify 设置为false)。

我认为这里的问题是,当您安装 git 时,您选择使用 Windows 安全通道 库而不是 OpenSSL图书馆:

正如@CurtJ.Sampson 所指出的(感谢Curt!),您可以改用OpenSSL 库,这将解决您的问题。这可以通过以下命令完成:

git config --global http.sslBackend openssl

或者,您可以重新安装 git,在此过程中指定 OpenSSL 库。

不要忘记打开 git SSL 验证:

git config --global http.sslVerify true

更新:如果您在自己的 git 服务器上使用自签名或公司证书,并且在尝试连接时遇到错误(例如证书链中的自签名证书,或者SSL证书问题:无法获取本地颁发者证书),那么解决方法就是告诉git去哪里找到用于签署该站点证书的 CA。您可以使用以下配置命令执行此操作:

git config --global http.{your site's URL here}.sslcainfo "{path to your cert file}"

例如,如果您在 https://my.gitserver.com/ 有一个本地 git 服务器,并且签署该站点证书的 CAC:\Certs\MyCACert.crt,那么您需要输入:

git config --global http.https://my.gitserver.com/.sslcainfo "C:\Certs\MyCACert.crt"

与将您的 CA 证书添加到 git 捆绑的 ca-bundle.crt 文件相比,这是一个更强大的解决方案,因为该文件将在您下次更新时被覆盖 git .

【讨论】:

  • 您不需要重新安装:您可以git config --global http.sslBackend openssl在该机器上切换您的帐户以使用OpenSSL,或将其设置为schannel以将其切换回来。 git config --list 会告诉你当前的设置;后面的会覆盖前面的。
  • @CurtJSampson 对我来说,Visual Studio 2017 中发生了新错误“自签名证书...”,而原始错误发生在 VsCode 中。我能够在这篇文章之后修复前一个错误:writeabout.net/2017/02/03/… 虽然我使用的是 git 和 Vsts。
  • @FlorianWinter:您可以将自签名证书和公司证书与 OpenSSL 一起使用。您不必使用 SChannel。与使用 OpenSSL 相比,大多数用户在使用 SChannel 时都会遇到问题。
  • @MikeAllen 我不会争论 OpenSSL 与 SChannel(两者都有各自的优势,人们也有选择其中一个的理由),我只想指出建议从 SChannel 切换到 OpenSSL(反之亦然) -versa) 因为解决方案可能会产生误导、隐藏问题或朝着错误的方向迈出一步。
  • @FlorianWinter 我同意,我认为应该可以使任一系统正常工作,并且不必切换到不同的 TLS 实现。
【解决方案2】:

当您在对所有流量执行 MITM 然后阻止吊销检查的公司网络上时,通常也会遇到此错误。 显然,理想的情况是不阻止检查(或至少阻止 url 白名单),但可能需要解决此问题。

一个选项是,如迈克回答的第一部分,using the OpenSSL bindings instead。虽然这可行,但它需要手动维护证书列表,这在极端情况下可能不实用(例如,每天发布新的根证书,尽管这不太可能)。

另一个选项,类似于 Mike 回答的第二部分,是禁用撤销检查。
git-for-windows 的最新版本(2.19 及更高版本)提供了http.schannelCheckRevoke setting

用于强制或禁用 cURL 中的证书吊销检查 当 http.sslBackend 设置为“schannel”时。默认为 true 如果 未设置。只有在 Git 持续出错时才需要禁用它 该消息是关于检查一个撤销状态的 证书。如果 cURL 不支持 在运行时设置相关的 SSL 选项。

...所以您可以简单地禁用检查撤销检查:
git config --global http.schannelCheckRevoke false

请注意,与完全禁用 SSL 不同,这在本质上并不比使用 Mike 对特定存储库的回答更安全:如果您捕获并配置一个空的撤销列表(通常情况下),您实际上禁用了撤销检查。 Disabling revocation checking only becomes a risk in the case of private-key compromise(在链中的某个点),这是罕见且困难的。

另外请注意,在公司 MITM 设置中,正在为您执行吊销检查:没有值得使用的代理会为无效或(已知)受损证书颁发证书。

【讨论】:

  • 因此,这是由于 MITM 检查而发生的。但是为什么使用 OpenSSL 后端不会失败呢?
  • @ctwx - 我不完全确定。我的猜测是 OpenSSL 默认禁用了撤销检查(请注意,该选项是特定于 schannel 的),或者它更能容忍某些错误(例如,只是忽略 404)。这是因为吊销检查本质上是有问题的 - 您无法保证可以(成功)联系发布服务器以获取有效性状态。
【解决方案3】:

我在 Windows 10 上使用 vagrant(安装版本:2.2.16)时遇到此错误,由卡巴斯基防病毒软件引起,当我将站点 vagrantcloud.com 和 cloud-images.ubuntu.com 添加到受信任时得到解决为防病毒解决的问题,以允许扫描加密的连接并将其作为受信任的站点。有关防病毒设置更改的更多信息,请访问https://support.kaspersky.com/KIS/2019/en-US/157530.htm

仅供参考,已知防病毒软件会导致此类错误,您所需要做的就是识别进行下载的站点并将其添加到防病毒程序的受信任地址。就我而言,它是卡巴斯基反病毒软件。可能使用 --debug 运行命令来获取附加站点是个好主意。

【讨论】:

  • 这解决了我的问题。感谢您的信息!
【解决方案4】:

最近在 IntelliJ idea IDE 中遇到了类似的错误,我无法从 git 中提取代码。它抛出了一个错误

无法访问 :schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - 吊销功能无法检查证书的吊销。

一旦我将条目添加到 Windows 凭据管理器(检查控制面板)以获取 git url 和 git 密码,我就可以提取代码。

【讨论】:

  • 仅供参考:使用 Windows 10 系统
猜你喜欢
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-13
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多