当前位置: 首页 > 知识库问答 >
问题:

Git-吊销功能无法检查证书的吊销

薛楷
2023-03-14

我试图使用Github桌面和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密钥。ssh/github-ssh。发布到Github设置,但它没有任何帮助。

编辑:刚刚选中,即使我尝试克隆一个不存在的存储库,也会发生这种情况。


共有3个答案

终翔
2023-03-14

我在windows 10上使用vagrant(安装版本:2.2.16)时出现此错误,这是由卡巴斯基反病毒软件引起的,在添加网站vagrantcloud时得到解决。com和云图像。ubuntu。com位于受信任的防病毒地址中,以允许扫描加密连接并将其作为受信任的站点。有关防病毒设置更改的详细信息,请访问https://support.kaspersky.com/KIS/2019/en-US/157530.htm

仅供参考,已知防病毒软件会导致此类错误,您需要做的只是识别下载的站点,并将其添加到防病毒程序的受信任地址。在我的情况下,这是卡巴斯基反病毒。可以使用--debug运行命令来获取adjact站点。

萧焱
2023-03-14

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

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

正如@CurtJ所指出的那样。桑普森(谢谢你,科特!),您可以改为使用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服务器,并且签署站点证书的CA位于C:\Certs\MyCACert.crt中,那么您需要输入:

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

与将CA证书添加到git捆绑的CA捆绑包相比,这是一个更健壮的解决方案。crt文件,因为下次更新git时该文件将被覆盖。

晏炳
2023-03-14

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

一种选择是,如Mike回答的第一部分所述,使用OpenSSL绑定。虽然这是可行的,但它需要手动维护证书列表,这在极端情况下可能不实用(例如,每天发布新的根证书,尽管这不太可能)。

另一个选项,类似于Mike答案的第二部分,是禁用撤销检查
git for windows的最新版本2.19及以上版本提供了一个http。schannelCheckRevoke设置:

用于在http时强制或禁用cURL中的证书吊销检查。sslBackend设置为“schannel”。如果未设置,则默认为true。只有当Git始终出错并且消息是关于检查证书的吊销状态时,才需要禁用此选项。如果cURL不支持在运行时设置相关的SSL选项,则忽略此选项。

... 因此,您只需首先禁用吊销检查:
git config——全局http。schannelCheckRevoke错误

请注意,与完全禁用SSL不同,对于特定存储库,这并不比使用Mike的答案本质上更不安全:如果捕获并配置一个空的吊销列表(通常情况下),则实际上禁用了吊销检查。禁用撤销检查只会在私钥泄露的情况下(在链中的某个点)成为风险,这是罕见且困难的。

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

 类似资料:
  • 提前谢谢你

  • 问题内容: 我目前正在使用SSL编写网络TCP服务器。在生产中,我们最终将要求客户使用证书进行身份验证。 为了在紧急情况下吊销证书,我们还想建立一个CRL。 我的问题是:Java是否开箱即用地检查CRL(如果提供了证书),还是需要手动实施此类检查? 为了进行测试,我准备了带有CRL设置的证书,但是Java似乎没有尝试对其进行验证(我将其放入本地Web服务器中并且无法访问)。 我仅找到 _com.s

  • 如果这种理解是正确的,那么我希望x509Chain对象能够通过吊销检查,即使检查是在上面文件的2014年3/1/之后的最新吊销列表存在的情况下进行的。不幸的是,结果是验证失败,因为它认为证书已被吊销。 在这种情况下,我是否必须做进一步的测试以查看撤销日期并覆盖结果并忽略它?我是不是做了什么蠢事?我是不是误会了撤销?

  • 问题内容: 我在各地搜索过Google,并在其他社区中询问过,并且继续前进到讨论该规范的Oracle文档。但是,该文档更多地涵盖了方法的命名以及整个体系结构,实际上并未提出讨论如何实际编写一些代码来检查x509证书是否被撤销的方法。 也许这只是我头上的办法?但是如果有人可以帮助我,我肯定会感激不尽,我已经将头撞在墙上的墙上已经有大约一周的时间了。 问题答案: 每个CA都会发布已撤销的证书列表。此列

  • 当他们注销时,问题就出现了。我读过,最好的方法是在Redis上将JWT列入黑名单,以存储被撤销的密钥。然而,由于JWT永远不会过期,因此该记录永远无法从Redis中删除,并且可以开始分块我的大量内存。 我应该担心这一点,还是Redis在这方面的记忆效率高?有没有更好的方法撤销JWT而不过期?

  • 我正在尝试为部署在Kubernetes集群中的应用程序启用基于TLS的相互身份验证。 希望将对应用程序的访问限制为只有那些具有受信任客户端证书的用户。 基于某些情况/条件,我还希望吊销特定用户的证书,以便该用户不再能够使用其证书访问应用程序。 我尝试在kuberentes ingress controller(基于nginx)中设置Mutual TLS,方法是添加以下注释。 是包含用于颁发客户端证