如何修复 curl:(60)SSL 证书:证书链无效

Posted

技术标签:

【中文标题】如何修复 curl:(60)SSL 证书:证书链无效【英文标题】:How to fix curl: (60) SSL certificate: Invalid certificate chain 【发布时间】:2013-09-28 15:21:40 【问题描述】:

我在 Mac OSX 10.9 (Mavericks) 上运行 curl https://npmjs.org/install.sh | sh 时遇到以下错误:

install npm@latest
curl: (60) SSL certificate problem: Invalid certificate chain
More details here: http://curl.haxx.se/docs/sslcerts.html

我该如何解决这个问题?

【问题讨论】:

npm install 脚本尝试连接到出现证书错误的registry.npmjs.org。我的以下说明解决了这个问题。 【参考方案1】:

首先,您应该警惕引发 SSL 错误的网址。话虽如此,您可以使用

抑制 curl 中的证书错误
curl -k https://insecure.url/content-i-really-really-trust

【讨论】:

这是最合乎逻辑的答案(“在culr 命令之后使用-k”)谢谢@Steen。 问题是,我不确定它在哪里运行(我正在安装工艺)所以我不得不走 Lewis Buckley 的路 -k--insecure 在使用 SSL 时允许不安全的服务器连接 这让我想起了关于“sudo”的“xkcd”卡通:xkcd.com/149。我所有使用 curl 的尝试总是导致错误!因为这篇文章,我现在添加“-k”。一切正常。谢谢。【参考方案2】:

在 Mac OS X 10.9 (Mavericks) 上使用 Safari 浏览器(不是 Chrome、Firefox 或 Opera)访问 https://registry.npmjs.org

单击显示证书按钮,然后选中标记为始终信任的复选框。然后单击“继续”并根据需要输入您的密码。

Curl 现在应该可以正确使用该 URL。

【讨论】:

当然。看起来证书对npmjs.org 有效,但对子域registry.npmjs.org 无效。如果您查看 install.sh 的源代码,它会尝试使用 curl 来从 registry.npmjs.org 下载。所以你需要访问registry.npmjs.org而不是npmjs.org来触发证书错误,然后你可以选择信任证书。 在执行此操作之前,我无法运行“curl npmjs.org/install.sh | sh”。你是救生员! 这个答案是一个更好的解决方案,在我看来:superuser.com/questions/721778/…。从登录钥匙串中删除 DigiCert 根证书。 我在 Github 证书上遇到了这个问题,这也适用。由于#heartbleed 漏洞利用,Github 替换了他们的证书后,我一直遇到问题。 Safari 使用钥匙串,所以我认为信任证书会将其添加到系统范围内的受信任证书列表中,这也允许 curl 使用相同的证书。这可以通过在 Safari 中信任证书后检查 Keychain Access 来验证。【参考方案3】:

注意:这个答案显然违背了 SSL 的目的,应该作为最后的手段谨慎使用。

对于那些在下载脚本时遇到问题并希望快速修复的脚本,请创建一个名为 ~/.curlrc 的文件

内容

--insecure

这会导致 curl 默认忽略 SSL 证书问题。

确保在完成后删除文件。

更新

12 天后,我收到了关于此答案的赞成票的通知,这让我去“嗯,我是否按照自己的建议记得删除 .curlrc?”,然后发现我没有。所以这真的强调了通过遵循这种方法让你的 curl 不安全是多么容易。

【讨论】:

你拯救了我的一天!谢谢【参考方案4】:

问题是不再使用的过期中间证书,必须删除。这是 Digicert 的一篇博文,解释了这个问题以及如何解决它。

https://blog.digicert.com/expired-intermediate-certificate/

我在 Safari 和使用 git pull 的命令行中都看到了 Github 无法通过 SSL 加载的问题。一旦我删除了旧的过期证书,一切都很好。

【讨论】:

除了添加中间证书和删除过期的证书外,我还需要删除由未知权威签署的证书。这些可以在 “登录” 钥匙串中找到。他们对未过期的证书使用相同的图标。所以你需要一一突出显示(见picture)。这些证书是在您单击“继续”时添加到浏览器警告中的。【参考方案5】:

更新到 OS X 10.9.2 后,我开始遇到 Homebrew、Textmate、RVM 和 Github 的 SSL 证书无效问题。

当我发起 brew update 时,我收到以下错误:

fatal: unable to access 'https://github.com/Homebrew/homebrew/': SSL certificate problem: Invalid certificate chain
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

我可以通过在 Git 中禁用 SSL 验证来缓解一些问题。从控制台(又名 shell 或终端):

git config --global http.sslVerify false

我很愿意推荐这个,因为它违背了 SSL 的目的,但这是我发现的唯一一个在紧要关头有效的建议。

我试过rvm osx-ssl-certs update all,上面写着Already are up to date.

在 Safari 中,我访问了https://github.com 并尝试手动设置证书,但 Safari 没有提供信任证书的选项。

最终,我不得不重置 Safari(Safari->Reset Safari... 菜单)。然后访问 github.com 并选择证书,然后“始终信任”这感觉错误并删除了历史记录和存储的密码,但它解决了我的 SSL 验证问题。一场苦乐参半的胜利。

【讨论】:

设置 git config --global http.sslVerify false 帮助我获得了自签名证书,因为我没有链文件。 我已经在 Mavericks 上尝试过,删除 DigiCert High Assurance EV Root CA 证书并重置 safari 确实解决了我的问题。 rvm osx-ssl-certs update all 为我修复了它。谢谢! 如何反转:git config --global http.sslVerify false 没有Reset Safari之类的选项【参考方案6】:

造成这种情况的另一个原因可能是您的 KeyChain 中的密钥重复。我在有重复的“DigiCert High Assurance EV Root CA”的两台 Mac 上看到了这个问题。一个在登录钥匙串中,另一个在系统中。从登录钥匙串中删除证书解决了这个问题。

这影响了 Safari 浏览器以及命令行上的 git。

【讨论】:

+1 因为这正是我的问题。根绝对是受信任的,但不知何故,我有两份“DigiCert High Assurance EV Root CA”。【参考方案7】:

在 Yosemite (10.10.1) 上安装最新的命令行工具更新 (6.1) 后,我开始看到此错误。在这种特殊情况下,重新启动系统修复了错误(自更新以来我没有重新启动)。

提及这一点,以防遇到同样问题的任何人像我一样遇到此页面。

【讨论】:

【参考方案8】:

在尝试了上述所有解决方案以消除“curl:(60) SSL 证书问题:无法获取本地颁发者证书”错误后,最终在 OSX 10.9 上为我工作的解决方案是:

    找到 curl 证书 PEM 文件位置 'curl-config --ca' --> /usr/local/etc/openssl/cert.pem

    使用文件夹位置来识别 PEM 文件 'cd /usr/local/etc/openssl'

    创建 cert.pem 文件的备份 'cp cert.pem cert_pem.bkup'

    从 curl 网站下载更新的证书文件 'sudo wget http://curl.haxx.se/ca/cacert.pem'

    复制下载的 PEM 文件以替换旧的 PEM 文件 'cp cacert.pem cert.pem'

    这是发布的解决方案的修改版本,用于纠正此处发现的 Ubuntu 中的相同问题:

https://serverfault.com/questions/151157/ubuntu-10-04-curl-how-do-i-fix-update-the-ca-bundle

【讨论】:

这个!!!是的,我正在运行较旧的 MacOS (Mojave),替换此证书是正确的解决方法!!!太感谢了。这个问题与其他问题不同,因为它在除命令行之外的所有其他地方都有效,并且我的所有证书在我的钥匙串中都有效,并且即使在命令行上也能在其他计算机上正常工作。【参考方案9】:

在某些系统(例如您的办公系统)中,有时会出于安全目的安装防火墙/安全客户端。尝试卸载它,然后再次运行该命令,它应该会开始下载。

我的系统安装了 Netskope 客户端并阻止了 ssl 通信。

在 finder 中搜索 -> 卸载 netskope,运行它,然后尝试安装 homebrew:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

PS:考虑安装安全客户端。

【讨论】:

【参考方案10】:

假设您尝试使用curl 下载某些内容或安装hub 使用brew,然后,您会收到如下错误:

==> Downloading https://ghcr.io/v2/linuxbrew/core/ncurses/manifests/6.2
curl: (60) SSL certificate problem: unable to get local issuer certificate

然后,让ghcr.io作为服务器,执行以下命令:

cd ~
# Download the cert:
openssl s_client -showcerts -servername ghcr.io  -connect ghcr.io:443 > cacert.pem
# type "quit", followed by the "ENTER" key / or Ctrl+C
# see the data in the certificate:
openssl x509 -inform PEM -in cacert.pem -text -out certdata-ghcr.io.txt
# move the file to certificate store directory:
sudo mv cacert.pem /usr/local/share/ca-certificates/cacert-ghcr.io.crt
# update certificates
sudo update-ca-certificates
# done !

参考文献

SSL Certificate Verification Snippet

【讨论】:

以上是关于如何修复 curl:(60)SSL 证书:证书链无效的主要内容,如果未能解决你的问题,请参考以下文章

cURL 错误 60:SSL 证书问题:证书已过期

如何解决 youtube data api V3 中的 curl 错误 60:ssl 证书问题?

curl(60)ssl证书问题自签名证书localhost在windows

Curl 错误 60,SSL 证书问题:证书链中的自签名证书

facebook auth cURL 错误 60:SSL 证书

WORDPRESS : cURL 错误 60: SSL 证书