[英]Unable to resolve "unable to get local issuer certificate" using git on Windows with self-signed certificate
我在 Windows 上使用 Git。我安装了 msysGit package。我的测试存储库在服务器上有一个自签名证书。 我可以使用 HTTP 毫无问题地访问和使用存储库。 移动到 HTTPS 给出错误:
SSL 证书问题:无法获取本地颁发者证书。
我在 Windows 7 客户端计算机的受信任的根证书颁发机构中安装了自签名证书。 我可以在 Inte.net Explorer 中浏览到 HTTPS 存储库 URL,没有任何错误消息。
Philip Kelley 的这篇博文解释了 cURL 不使用客户端机器的证书存储。 我按照博文的建议创建了curl-ca-bundle.crt
的私有副本并配置 Git 以使用它。 我确定 Git 正在使用我的副本。 如果我重命名副本; Git 抱怨文件丢失。
我粘贴了我的证书,如博文中所述,我仍然收到消息“无法获得本地颁发者证书”。
我通过 HTTPS 克隆了一个 GitHub 存储库,验证了 Git 仍在工作。
我看到的唯一与博客文章不同的是我的证书是根证书——没有链可以到达它。 我的证书最初来自单击 IIS8 IIS 管理器链接“创建自签名证书”。 也许这使得证书在某种程度上与 cURL 所期望的有所不同。
如何让 Git/cURL 接受自签名证书?
问题是 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 挂钩,以便在每次推送时更新服务器上的工作副本。 尝试按照您链接到的博客中的说明进行操作。 对我也不起作用,并且基于每个用户覆盖设置似乎也不起作用。
我最终不得不做的是禁用整个 Git 的 SSL 验证(如文章所述)。 不是完美的解决方案,但在我找到更好的解决方案之前它会起作用。
我编辑了位于:
C:\Program 文件 (x86)\Git\etc\gitconfig
在 [http] 块中,我添加了一个禁用 sslVerify 的选项。 当我完成时它看起来像这样:
[http]
sslVerify = false
sslCAinfo = /bin/curl-ca-bundle.crt
那成功了。
笔记:
这会禁用 SSL 验证,不建议将其作为长期解决方案。
您可以禁用这个仍然不是很好的每个存储库,但会本地化设置。
随着 LetsEncrypt.org 的出现,现在可以相当简单、自动化且免费地设置 SSL 作为自签名证书的替代方案,并且无需关闭 sslVerify。
Kiddailey我认为非常接近,但是我不会禁用 ssl 验证,而只是提供本地证书:
在 Git 配置文件中
[http]
sslCAinfo = /bin/curl-ca-bundle.crt
或通过命令行:
git config --global http.sslCAinfo /bin/curl-ca-bundle.crt
我也遇到过这个问题。 最后通过从这个 MSDN Blog获得指导得到了解决。
更新
实际上,您需要在 Git\bin 目录中的 git 证书文件 curl-ca-bundel.cert 中添加证书。
脚步
最后检查状态。 请注意在编辑之前备份 curl-ca-bundle.crt 文件以保持安全。
对使用 makecert 进行开发 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 验证关闭时,可能会受到中间人攻击。
将以上所有答案的摘要完全详细地列出来。
出现此问题是因为如果您尝试访问的存储库存在,git 无法完成与 git 服务器的 https 握手。
从 github 服务器获取证书的步骤
将证书添加到本地 git 证书存储的步骤
现在打开您保存在记事本中的证书并复制内容以及--Begin Certificate--和--end certificate--
要查找为您的 git 存储所有证书的路径,请在 cmd 中执行以下命令。
git 配置 -- 列表
检查键“http.sslcainfo”,对应的值为路径。
注意:如果您找不到密钥 http.sslcainfo,请检查 Git 的默认路径:C:\Program Files\Git\mingw64\ssl\certs
注意1:以管理员模式打开此文件,否则更新后将无法保存。 (提示 - 您可以为此目的使用 Notepad++)
注意 2:修改此文件之前,请在别处进行备份。
我刚刚遇到了同样的问题,但在 Windows 上使用 sourcetree 与 Windows 上的普通 GIT 相同的步骤也是如此。 按照以下步骤,我能够解决此问题。
这应该可以解决您使用自签名证书和使用 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
来表示下面的证书只给它。
2021 年 1 月 - 通过设置 Menu > Git > Settings > Git Global Settings > Cryptographic Network Provider > [Secure Channel] 而不是 [OpenSSL] 在 VS2019 中解决了这个问题
PS:不需要设置 --global 或 --local http.sslVerify false。 我正在克隆一个未使用任何自签名证书的 Azure DevOps 存储库。这似乎是 VS2019 或 Git for Windows 的问题。他们需要修复它!
就我而言,因为我已经为 Window 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 时选择了与此处提到的相同的选项。
希望有帮助!
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"
禁用您的 ssl 验证(默认情况下启用)。
检查您的.gitconfig
文件。 通常在目录~/.gitcongh
。
添加或覆盖下一行:
[http]
sslverify = false
执行以下命令。
git config --global http.sslverify false
如果您不想全局启用配置属性,请踩到您的存储库路径,然后执行。
git config http.sslverify false
解决了我的问题 git config --global http.sslBackend schannel
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 证书问题:无法在 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 repositories使用不同的证书。
请按照以下步骤操作(如果您有存储库的证书,则可以从第 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 Key,你就可以这样做... SSH 文档
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
文件夹config
文件 url = http://git.[host]/[group/project/repo_name] (actual path)
将其替换为url = ssh://git@git.[host]:/[group/project/repo_name] (new path SSH) url = https://git.[host]/[group/project/repo_name] (new path HTTPS)
我已经尝试了这里提到的所有方法,但没有任何运气。 最后我找到了一种不同的方法我所做的是
在我的系统上为 git repo 生成了 ssh 公钥/私钥
将 ssh 密钥复制到您的 git 帐户并在 git clone 中使用 ssh 而不是 https。检查以下步骤以生成 ssh 密钥
打开 Git Bash。
粘贴下面的文本,替换为您的 GitHub 电子邮件地址。
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这将创建一个新的 ssh 密钥,使用提供的电子邮件作为标签。
生成公钥/私钥 rsa 密钥对。 当系统提示您“输入要保存密钥的文件”时,按 Enter。 这接受默认文件位置。
输入要保存密钥的文件 (/c/Users/you/.ssh/id_rsa):[按 Enter]
我通过在 ${HOME}/.gitconfig 文件中添加以下条目解决了这个问题
[遥远的“起源”]
代理=
在大多数情况下,它会在您的机器中启用代理时发生,因此上述条目将解决此问题。
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. 诸如此类的案例已在https-issues-possibly-related-to-dns等问答论坛中提及。 如果您在 Windows 上使用 WSL 作为终端,那么您可以尝试运行sudo echo nameserver 8.8.8.8 > /etc/resolv.conf
然后发出 git 命令以查看是否有所不同。 这似乎不是永久的 DNS 修复(仅持续终端会话的生命周期),但它可以帮助您确定它是否是 DNS 问题而不是证书问题。 您还可以查看有关配置网络以使用公共 DNS 的文档。 同样,这只是为了帮助您确定您的 DNS 设置是否可能需要调整以帮助解决证书问题。
我尝试了以下并且它有效
git config --global http.sslVerify false
下载并安装本地证书。 可能它发布在您的公司网站上。 例如,*.cer 文件。
右键单击它并 select Install Certificate
。 将出现“证书导入向导”。 Select Local Machine
。 按Next
,确认。
Select Place all certificates in the following store
中,按Browse
和 select Trusted Root Certification Authorities
, OK
, Finish
。
您还可以检查其他应用程序是否可以获取、拉取或推送数据。 例如,在Android Studio
或可能的IDEA
中,您应该在Settings
此复选框中设置 select: Use credential helper
。
尝试“克隆”项目时出现此错误。 一种解决方法是只使用网页上的“下载为 zip”,对我来说,这实现了我想做的事情。
这可能会帮助一些遇到此错误的人。 如果您正在使用 VPN 并且它断开连接,您也可能会收到此错误。 简单的解决方法是重新连接您的 VPN。
在运行 composer update/install 之前使用这个命令:
git config --global http.sslverify false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.