我在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接受自签名证书?
在我的例子中,因为我已经为windows 7安装了ConEmu终端,它在C:\Program Files\Git\mingw64\ssl\certs.的安装过程中创建了ca-bundle
因此,我必须在终端上运行以下命令才能使其工作:
$ git config --global http.sslbackend schannel
$ git config --global http.sslcainfo /mingw64/ssl/certs/ca-bundle.crt
因此,我的C:\Program Files\Git\etc\gitconfig包含以下内容:
[http]
sslBackend = schannel
sslCAinfo = /mingw64/ssl/certs/ca-bundle.crt
另外,在安装Git时,我选择了与这里提到的相同的选项。
希望有帮助!
修复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
完整详细地总结出以上所有答案。
原因
发生此问题是因为git无法完成与git服务器的https握手,如果您试图访问的存储库是存在的。
解决方案
从github服务器获取证书的步骤
在浏览器中打开要访问的github
点击地址栏上的锁定图标>点击“证书”
进入“证书路径”选项卡>选择证书层次结构中的最顶层节点>单击“查看证书”
现在点击“详细信息”,然后点击“复制到文件”。选择“Base 64 encoded X509 (. cer)”,将其保存到您想要的任何路径。
将证书添加到本地git证书存储的步骤
现在打开您保存在记事本中的证书,并将内容连同开始证书和结束证书一起复制
要找到所有证书存储在git中的路径,在cmd中执行以下命令。
Git配置列表
检查键'http。sslcairfo ',则对应的值为path。
注意:如果你找不到密钥http。检查Git的默认路径:C:\Program Files\Git\mingw64\ssl\certs
现在打开'ca-bundle。阴极射线管存在于那条路径上。
注1:以管理员模式打开此文件,否则更新后将无法保存。(提示-你可以使用notepad++
目的)
注2:在修改此文件之前,请在其他地方保存备份。
现在,将步骤1中提到的文件内容复制到步骤4中end文件中的文件,就像将其他证书放置在ca-bundle.crt中一样。
现在打开一个新终端,现在您应该能够使用https执行与git服务器相关的操作。