我在Windows上使用Git。我安装了msysGit包。我的测试存储库在服务器上有一个自签名证书。我可以毫无问题地使用HTTP访问和使用存储库。移动到HTTPS会出现以下错误:

SSL证书问题:无法获得本地颁发者证书。

我在Windows 7客户端机器的受信任根证书颁发机构中安装了自签名证书。我可以在Internet Explorer中浏览到HTTPS存储库URL,而不会出现错误消息。

Philip Kelley的这篇博客文章解释了cURL不使用客户端机器的证书存储。我按照博客文章的建议创建了curl-ca-bundle的私有副本。然后配置Git使用它。我确定Git正在使用我的副本。如果我重命名副本;Git抱怨文件丢失。

我粘贴了我的证书,正如博客文章中提到的,我仍然得到“无法获得本地发行人证书”的消息。

我通过HTTPS克隆GitHub仓库来验证Git仍然在工作。

我看到的唯一不同于博客文章的地方是我的证书是根证书——没有链可以到达它。我的证书最初来自点击IIS8 IIS管理器链接“创建自签名证书”。也许这使得证书在某种程度上与cURL所期望的有所不同。

如何让Git/cURL接受自签名证书?


当前回答

You might have a DNS issue and not a certificate issue, so before you disable SSL verification in your Git shell you should rule out a DNS problem. Cases such as these have been mentioned in Q&A forums such as https-issues-possibly-related-to-dns. If you are using WSL on Windows as your terminal, then you can try running sudo echo nameserver 8.8.8.8 > /etc/resolv.conf and then issue the git commands to see if that makes a difference. This does not seem to be a permanent DNS fix (lasting only the lifetime of your terminal session), but it could help you determine whether it is a DNS issue and not a certificate issue. You could also check this document on configuring your network to use a public DNS. Again, this is only to help you determine if your DNS settings might need adjusting in order to help resolve the certificate issues.

其他回答

我已经通过在${HOME}/中添加以下条目解决了这个问题。gitconfig文件

(远程“起源”)

代理=

在大多数情况下,当你的机器启用代理时,就会发生这种情况,所以上面提到的条目将解决这个问题。

为了避免完全禁用ssl验证或复制/破解git使用的捆绑的CA证书文件,您可以将主机的证书链导出到一个文件中,并让git使用它:

git config --global http.https://the.host.com/.sslCAInfo c:/users/me/the.host.com.cer

如果这不起作用,您可以只对主机禁用ssl验证:

git config --global http.https://the.host.com/.sslVerify false

注意:当ssl验证关闭时,可能受到中间人攻击。

如果要完全禁用SSL验证,则打开Git Bash并运行该命令。

git config --global http.sslVerify false

注意:此解决方案使您容易受到中间人攻击等攻击。 因此,尽快再次开启验证:

git config --global http.sslVerify true

错误

把失败 致命:无法访问 SSL证书问题:无法获得本地颁发者证书

原因

在本地机器上提交文件后,当本地Git连接参数过期时(例如HTTP更改为HTTPS),就会出现“push fail”错误。

解决方案

Open the .git folder in the root of the local directory Open the config file in a code editor or text editor (VS Code, Notepad, Textpad) Replace HTTP links inside the file with the latest HTTPS or SSH link available from the web page of the appropriate Git repo (clone button) Examples: url = http://git.[host]/[group/project/repo_name] (actual path) replace it with either url = ssh://git@git.[host]:/[group/project/repo_name] (new path SSH) url = https://git.[host]/[group/project/repo_name] (new path HTTPS)

修复SSL证书的特定错误问题:无法在git中获取本地颁发者证书

我在Let's Encrypt证书时也遇到了同样的问题。

一个网站与https我们只需要:

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

但少不要脸的人说:

fatal: unable to access 'https://example.com/git/demo.git/': SSL certificate problem: unable to get local issuer certificate

要修复它,我们还需要添加:

SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem