我在 Windows 上使用 Git。我安装了 msysGit 包。我的测试存储库在服务器上有一个自签名证书。我可以毫无问题地使用 HTTP 访问和使用存储库。移动到 HTTPS 会出现错误:
SSL 证书问题:无法获取本地颁发者证书。
我在我的 Windows 7 客户端计算机的受信任的根证书颁发机构中安装了自签名证书。我可以在 Internet Explorer 中浏览到 HTTPS 存储库 URL,而没有错误消息。
This blog post by Philip Kelley 解释说 cURL 不使用客户端计算机的证书存储。我按照博文的建议创建了 curl-ca-bundle.crt
的私有副本并配置 Git 以使用它。我确信 Git 正在使用我的副本。如果我重命名副本; Git 抱怨文件丢失。
我粘贴了我的证书,如博客文章中所述,我仍然收到“无法获取本地颁发者证书”的消息。
我通过 HTTPS 克隆 GitHub 存储库来验证 Git 仍在工作。
我看到的唯一与博客文章不同的是我的证书是根 - 没有链可以到达它。我的证书最初来自单击 IIS8 IIS 管理器链接“创建自签名证书”。也许这使得证书在某种程度上与 cURL 所期望的不同。
如何让 Git/cURL 接受自签名证书?
{ "strict-ssl": false }
的 .bowerrc 文件。不要感谢我,感谢这个人:stapp.space/fight-with-2我已经为这个错误奋斗了将近 5 个小时,直!
问题是 git 默认使用“Linux”加密后端。
从 Git for Windows 2.14 开始,您现在可以将 Git 配置为使用 SChannel,即内置的 Windows 网络层作为加密后端。这意味着它将使用 Windows 证书存储机制,您无需显式配置 curl CA 存储机制:https://msdn.microsoft.com/en-us/library/windows/desktop/aa380123(v=vs.85).aspx
只需执行:
git config --global http.sslbackend schannel
那应该有帮助。
在为 Windows 安装 git 时,现在使用 schannel 是标准设置,此外,如果可能,建议不要再通过 SSH 签出存储库,因为 https 更容易配置并且不太可能被防火墙阻止,这意味着失败的机会更小。
如果要完全禁用 SSL 验证,请打开 Git Bash 并运行命令。
git config --global http.sslVerify false
注意:此解决方案使您容易受到中间人攻击等攻击。因此尽快再次开启验证:
git config --global http.sslVerify true
git -c http.sslVerify=false clone https://domain.com/path/to/git
git config --local http.sslVerify false
。这样,只有一个存储库是不安全的
我也有这个问题。就我而言,我试图获得一个接收后 Git 挂钩,以便在每次推送时更新服务器上的工作副本。尝试按照您链接到的博客中的说明进行操作。对我也不起作用,并且基于每个用户覆盖设置似乎也不起作用。
我最终不得不做的是禁用整个 Git 的 SSL 验证(如文章所述)。不是完美的解决方案,但在我找到更好的解决方案之前它会起作用。
我编辑了位于:
C:\Program 文件 (x86)\Git\etc\gitconfig
在 [http] 块中,我添加了一个禁用 sslVerify 的选项。当我完成时它看起来像这样:
[http]
sslVerify = false
sslCAinfo = /bin/curl-ca-bundle.crt
那成功了。
笔记:
这会禁用 SSL 验证,不建议将其作为长期解决方案。
您可以禁用这个仍然不是很好的每个存储库,但会本地化设置。
随着 LetsEncrypt.org 的出现,现在可以相当简单、自动化且免费地设置 SSL 作为自签名证书的替代方案,并且无需关闭 sslVerify。
sslCAinfo
配置条目;但我不赞成这个答案,因为在 git 系统范围内永久禁用 SSL 没有多大意义(您是否尝试在系统范围内禁用它,然后克隆,然后重新启用它,然后在新克隆的 repo 的本地 git 配置?)。
git -c http.sslVerify=false clone https://...
Kiddailey 我认为非常接近,但是我不会禁用 ssl 验证,而只是提供本地证书:
在 Git 配置文件中
[http]
sslCAinfo = /bin/curl-ca-bundle.crt
或通过命令行:
git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
git config --global http.sslCAinfo /usr/ssl/certs/ca-bundle.crt
git config --global http.sslCAinfo /c/Program\ Files\ \(x86\)/Git/bin/curl-ca-bundle.crt
git config --global http.sslCAinfo /opt/local/share/curl/curl-ca-bundle.crt
git config --list --show-origin
查看 http.sslCAinfo 配置的设置位置
我也遇到过这个问题。最后通过this MSDN Blog的指导得到解决。
更新
实际上,您需要在 Git\bin 目录中的 git 证书文件 curl-ca-bundel.cert 中添加证书。
脚步
在浏览器中打开您的 github 页面,然后单击地址栏中的锁定图标。在打开的小弹出窗口中导航到“查看证书”链接,它将打开一个弹出窗口。在其中导航到证书选项卡(在我的例子中是第三个)。选择作为根证书的顶部节点。然后按底部的复制证书按钮并保存文件。在文件资源管理器中导航 Git\bin 目录并在文本编辑器中打开 curl-ca-bundle.crt。也在文本编辑器中打开导出的证书文件(在步骤 3 中)。将导出证书中的所有内容复制到 curl-ca-bundle.crt 的末尾,并保存。
最后检查状态。请注意在编辑之前备份 curl-ca-bundle.crt 文件以保持安全。
ca-bundle.crt
并位于 mingw64\ssl\certs
或 mingw32\ssl\certs
。
answer 到 Using makecert for Development SSL 为我解决了这个问题。
我不知道为什么,但是由 IIS 管理器中简单的“创建自签名证书”链接创建的证书并不能解决问题。我遵循了创建和安装自签名 CA Root 的链接问题中的方法;然后使用它为我的服务器颁发服务器身份验证证书。我将它们都安装在 IIS 中。
这使我的情况与原始问题中引用的博客文章相同。一旦根证书被复制/粘贴到 curl-ca-bundle.crt 中,git/curl 组合就满足了。
为避免完全禁用 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 验证关闭时,可能会受到中间人攻击。
--global
选项不是必需的:如果您省略 --global
,则该设置仅适用于该特定 git 存储库。
.cer
格式。我只能得到 .p7b
个文件。
如果是 github 存储库(或任何非自签名证书),在安装 Git-on-windows 时选择下面的选项可以解决问题。
https://i.stack.imgur.com/zn1Uk.png
将以上所有答案的摘要完全详细地列出来。
原因
出现此问题是因为如果您尝试访问的存储库存在,git 无法完成与 git 服务器的 https 握手。
解决方案
从 github 服务器获取证书的步骤
在浏览器中打开您尝试访问的 github 按地址栏中的锁定图标 > 单击“证书” 转到“证书路径”选项卡 > 选择证书层次结构中最顶层的节点 > 单击“查看证书” ' 现在单击“详细信息”并单击“复制到文件..”> 单击“下一步”> 选择“Base 64 编码 X509 (.CER)”> 将其保存到任何所需的路径。
将证书添加到本地 git 证书存储的步骤
现在打开您保存在记事本中的证书并复制内容以及--Begin Certificate--和--end certificate--要找到所有证书都为您的git存储的路径,请在cmd中执行以下命令。 git config --list 检查键'http.sslcainfo',对应的值为路径。
注意:如果您找不到密钥 http.sslcainfo,请检查 Git 的默认路径:C:\Program Files\Git\mingw64\ssl\certs
现在打开该路径中的“ca-bundle.crt”。
注意1:以管理员模式打开此文件,否则更新后将无法保存。 (提示 - 您可以使用 Notepad++ 实现此目的) 注意 2:在修改此文件之前,请在别处保留备份。
现在将步骤 1 中提到的文件的内容复制到步骤 4 中的文件末尾文件中,就像其他证书如何放置在 ca-bundle.crt 中一样。现在打开一个新终端,现在您应该能够使用 https 执行与 git 服务器相关的操作。
我刚刚遇到了同样的问题,但在 Windows 上使用 sourcetree 与 Windows 上的普通 GIT 相同的步骤也是如此。按照以下步骤,我能够解决此问题。
获取服务器证书树这可以使用 chrome 完成。导航到服务器地址。单击挂锁图标并查看证书。将所有证书链导出为 base64 编码文件 (PEM) 格式。将证书添加到您的 GIT 信任配置文件的信任链中运行“git config --list”。找到“http.sslcainfo”配置,这显示了证书信任文件的位置。将所有证书复制到信任链文件中,包括“- -BEGIN- -”和“- -END- -”。确保将整个证书链添加到证书文件
这应该可以解决您使用自签名证书和使用 GIT 的问题。
我尝试使用“http.sslcapath”配置,但这不起作用。此外,如果我没有在证书文件中包含整个链,那么这也会失败。如果有人对这些有指示,请告诉我,因为必须重复上述操作才能进行新安装。
如果这是系统 GIT,那么您可以使用 TOOLS -> options GIt 选项卡中的选项来使用系统 GIT,这也解决了 sourcetree 中的问题。
我之前也遇到过这个问题,用下面的配置解决。
[http "https://your.domain"] sslCAInfo=/path/to/your/domain/priviate-certificate
从 git 2.3.1 开始,您可以在 http 后面加上 https://your.domain
以表示以下证书仅适用于它。
git config --global http.sslCAInfo <your-server-self-signed-cert.pem>
(因此导致“无法获取本地颁发者证书”错误)
2021 年 1 月 - 通过设置 Menu > Git > Settings > Git Global Settings > Cryptographic Network Provider > [Secure Channel] 而不是 [OpenSSL] 在 VS2019 中解决了这个问题
Git SSL certificate problem unable to get local issuer certificate (fix)
PS:不需要设置 --global 或 --local http.sslVerify false。我正在克隆一个没有使用任何自签名证书的 Azure DevOps 存储库。这似乎是 VS2019 或 Git for Windows 的问题。他们需要修复它!
在我的例子中,因为我已经为 Window 7 安装了 ConEmu Terminal,它会在安装期间在 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 时选择了与提到的 here 相同的选项。
希望有帮助!
git config --global http.sslVerify false
让我感到困惑的一件事是路径的格式(在我的 Windows PC 上)。我最初有这个:
git config --global http.sslCAInfo C:\certs\cacert.pem
但这因“无法获得本地颁发者证书”错误而失败。
最终奏效的是:
git config --global http.sslCAInfo "C:\\certs\\cacert.pem"
解决了我的问题 git config --global http.sslBackend schannel
从此链接下载证书:https://github.com/bagder/ca-bundle 将其添加到 C:\Program Files\Git\bin 和 C:\Program Files\Git\mingw64\bin
然后尝试类似:git clone https://github.com/heroku/node-js-getting-started.git
git config --global http.sslbackend secure-transport
(必须在更新到 Big Sюr 后这样做)
SSL certificate problem: unable to get local issuer certificate
。这解决了它!
修复特定错误 SSL certificate problem: unable to get local issuer certificate in git
我对 Let's Encrypt certificate 有同样的问题。
我们只需要一个带有 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
但 git pull 说:
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 存储库使用不同的证书。
请按照以下步骤操作(如果您有存储库的证书,则可以从第 5 步开始阅读)
转到远程存储库的站点。例如:github.com、bitbucket.org、tfs.example... 点击左上角的锁定图标,然后点击证书。转到证书路径选项卡并双击.. 根证书 转到详细信息选项卡并单击复制到文件。将证书导出/复制到您想要的任何地方。例如:C:\certs\example.cer 在本地存储库文件夹中打开 git bash 并键入:$ git config http.sslCAInfo "C:\certs\example.cer"
现在您可以为每个存储库使用不同的证书。
请记住,使用 --global
参数调用还会更改其他文件夹中 git 存储库的证书,因此在执行此命令时您不应使用 --global
参数。
我在 Azure DevOps (Visual Studio) 中遇到了同样的问题。最后我决定使用 SSH 协议克隆我的 repo,因为我更喜欢它而不是禁用 SSL 验证。
您只需要生成一个 SSH 密钥,您就可以这样做... SSH documentation
ssh-keygen
然后,在你的 git 主机(如 Azure Devops、Github、Bitbucket、Gitlab 等)上导入你的公钥
使用 Visual Studio 时出现此错误。当您在 Visual Studio 选项窗口中将加密网络提供程序设置设置为 OpenSSL 时,会发生这种情况。当我将设置更改为安全通道时,它为我解决了这个问题。当我升级我的 VS 时,这个设置一定是为我设置的。
使用 Windows 时,问题在于 git 默认使用“Linux”加密后端。从 Git for Windows 2.14 开始,您可以将 Git 配置为使用 SChannel,即内置的 Windows 网络层作为加密后端。为此,只需在 GIT 客户端中运行以下命令:
git config --global http.sslbackend schannel
这意味着它将使用 Windows 证书存储机制,您无需显式配置 curl CA 存储(http.sslCAInfo)机制。
这对我有用。我打开 cmd 行并运行以下命令。并再次拉动。
git config --global http.sslVerify false
错误
推送失败致命:无法访问 SSL 证书问题:无法获取本地颁发者证书
原因
在本地机器上提交文件后,当本地 Git 连接参数过时(例如 HTTP 更改为 HTTPS)时,可能会出现“推送失败”错误。
解决方案
打开本地目录根目录下的 .git 文件夹 在代码编辑器或文本编辑器(VS Code、记事本、Textpad)中打开配置文件适当的 Git repo(克隆按钮)示例:url = http://git.[host]/[group/project/repo_name](实际路径)将其替换为 url = ssh://git@git.[host] :/[group/project/repo_name] (新路径 SSH) url = https://git.[host]/[group/project/repo_name] (新路径 HTTPS)
我通过在 ${HOME}/.gitconfig 文件中添加以下条目解决了这个问题
[遥远的“起源”]
代理=
在大多数情况下,它会在您的机器中启用代理时发生,因此上述条目将解决此问题。
这可能会帮助一些遇到此错误的人。如果您正在使用 VPN 并且它断开连接,您也可能会收到此错误。简单的解决方法是重新连接您的 VPN。
在运行 composer update/install 之前使用这个命令:
git config --global http.sslverify false
git config --global http.sslCAInfo <my-server-self-signed-cert.pem>
无法工作。我将http.sslCAInfo
配置为对我的服务器使用自签名证书,这就是我在执行git clone https://github.com/Microsoft/vscode.git
时遇到“SSL 证书问题:无法获取本地颁发者证书”的原因(可能与 OP 不同) }。最后,我使用来自 stackoverflow.com/a/47196562/1323552 (Ben PP Tung) 的答案来调整我的 sslCAInfo 配置特定于我的 git 服务器来解决它。