在防火墙后面,使用 chrome,我能够访问 github 存储库,如下所示: https://github.com/Squirrel/Squirrel.Windows
Chrome 使用我们的证书进行此访问。如果我尝试使用以下方式访问相同的 URLGit扩展,我收到此错误:
SSL 证书问题:证书链中的自签名证书
我可以让 GitExtensions 使用我们的证书来允许访问吗?
编辑:更多信息:
在我的计算机上,我看不到 mysysGit,但确实看到了 mingw/curl,因此我假设 Git 正在使用这些。这些在构建证书链时显然不使用 Windows 信任证书。我收到的错误是 SSL 证书问题:证书链中的自签名证书,表示 Git/Github 使用的根证书不在内置证书颁发机构 (CA) 根包中。正如 @Akber Choudhry 指出的那样,Github SSL 服务器提供的证书链的根 CA 证书是 DigiCert 高保证 EV 根 CA我确实在 C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt 中看到了 CA。
为了验证问题出在 Git 而不是 GitExtensions 上,我在命令行上执行了以下步骤:
>>git clone https://github.com/Squirrel/Squirrel.Windows.git
并收到相同的SSL证书问题错误。
看起来 Git 没有使用此证书,因此我尝试像这样配置 Git:
>>git config --system http.sslcainfo "C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt"
但这没有效果。
答案1
在防火墙后面,...github...Chrome 使用我们的证书进行此访问。
根据此描述,我假设“我们的”证书不是 Github 的原始证书,而是您正在使用具有 SSL 检查功能的防火墙,该防火墙会向中间人生成自己的(“我们的”)证书。颁发此证书的防火墙中的 CA(代理 CA)可能已添加到 Windows 信任库中,并且此 Chrome 将信任它。
但是 Git 不使用 Windows 信任存储,因此不知道此代理 CA。因此,您需要将防火墙使用的代理 CA 添加到 Git 的 CA 存储中,而不是为 Github 颁发证书的原始 CA。
答案2
当您使用 chrome 并通过 HTTPS 访问 Github 时,您只是根据浏览器和 Windows 中的内置根证书验证 Github 的证书链。
在底层,Gitextensions 使用 msysgit,它在构建证书链时不会咨询 Windows 信任证书。
从错误来看,Github 使用的根证书似乎不在内置证书颁发机构 (CA) 根包中。这可能只是由于 Gitextensions 捆绑了旧版本的 msysgit 或 curl。
msysgit 确实包含DigiCert High Assurance EV Root CA
在其 CA 包中,并且已经存在多年了。在文件中搜索此字符串bin/curl-ca-bundle.crt
检查你的机器上是否安装了旧版本的 msysgit 或 mingw 工具。如果是,请清理并重新安装。最后,如果需要添加证书,请查阅 msysgit 证书添加步骤。