Git似乎可以识别来自.gitconfig的http.sslcainfo属性,但是在执行时会忽略它?SEC_E_UNTRUSTED_ROOT


10

总而言之,我有一个有效的证书链(可通过OpenSSL测试),但我无法以某种方式告诉Git加载这些证书。

我得到了同样的 “不信任的根证书颁发机构”的错误(SEC_E_UNTRUSTED_ROOT)独立是否我的git配置指向现有的或伪造的证书链文件。

有关详细信息,请检查随附的屏幕截图。在此处输入图片说明

.gitconfig用于伪造文件的设置:

sslCAInfo = C:/tmp/foobar.crt

或者,对于与OpenSSL兼容的真实文件:

sslCAInfo = C:/tmp/ca-bundle.crt

控制台成绩单:

C:\tmp>openssl version
OpenSSL 0.9.8h 28 May 2008

C:\tmp>git --version
git version 2.12.2.windows.2

C:\tmp>git config --list
http.sslverify=true
http.sslcainfo=C:/tmp/ca-bundle.crt

C:\tmp>dir
24.04.2017 13:45 10.875 ca-bundle.crt

c:\tmp>openssl s_client -state -connect https://mygithost:443 -CAfile .\ca-bundle.crt

Verify return code: 0 (ok)

C:\tmp git clone https://mygithost/bitbucket/scm/my.git
Cloning into ...
fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted.

C:\tmp> git -c http.sslverify=false clone https://mygithost/bitbucket/scm/my.git
Cloning into ...
Resoliving deltas: 100%, done.

C:\tmp>git config --list
http.sslverify=true
http.sslcainfo=C:/tmp/foobar.crt

C:\tmp\xxx\git pull
fatal: unable to access ... : schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted.

您的git配置中有错别字:tml而不是tmp
Tensibai

我发现奇怪的是git不会在fakepath中引发错误。您应该验证其他配置级别(全局,用户和存储库)可能在某个地方存在回退
Tensibai

@Tensibai请提供说明或文档链接,但不确定如何打印所有内容。例如git config --global --list不起作用。
彼得·穆里什金

Git config --get-all应该显示系统,全局和本地的所有结果配置(无法验证我是否在通话中,这只是一个猜测,解决方法可能是set SSL_CERT_FILE=C:\tmp\ca-bundle.crt告诉openssl在哪里找到捆绑包
Tensibai

C:\git config --get-all-- => error: wrong number of arguments
Peter Muryshkin '17

Answers:


2

全新安装后,今天才受到此攻击,因此,我如何克服它:

从您的日志中(重点是我的):

致命:无法访问...:schannel:下一个InitializeSecurityContext失败:

git配置为使用schannel(Windows本机实现),但是schannel使用Windows certs捆绑包,而不是cainfo捆绑包。

要切换到openssl以使用自定义捆绑文件,请使用以下命令:

git config --system http.sslbackend openssl

现在git将遵守在http.sslcainfo中传递的CA捆绑软件。

另外,由于我的错误是密码套件问题,您可能对以下链接感兴趣:


1

我一年前也有类似经历,所以我希望我记得-

您应该在crt文件中拥有所有证书链。验证您拥有位桶证书和根证书(包括根证书)之间的所有中间证书。

您可以在此处查看以pem格式附加它们的正确格式(我相信这是crt的情况)。

当我遇到该问题时,我的证书是由Comodo签名的,大多数系统提供的默认ca-bundle中均未包含其证书和中间件。

希望有帮助!

编辑:现在我注意到它与假的也发生-尝试检查系统默认的已知证书(每个系统都有这样的证书)。在Windows上,您可以转到Windows证书mmc管理单元

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.