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

时间:2013-09-23 16:20:13

标签: macos node.js curl ssl npm

我在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

我该如何解决这个问题?

10 个答案:

答案 0 :(得分:65)

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

Screenshot of Safari showing certificate error

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

Always trust checkbox

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

答案 1 :(得分:26)

首先,你应该警惕抛出SSL错误的网址。话虽这么说,您可以使用

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

答案 2 :(得分:18)

问题是已过期的中间证书不再使用,必须删除。以下是Digicert的博客文章,解释了该问题以及解决方法。

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

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

答案 3 :(得分:8)

更新到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验证来缓解一些问题。从控制台(a.k.a. 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->重置Safari ...菜单)。然后访问github.com并选择证书,并“始终信任”此感觉错误并删除历史记录和存储的密码,但它解决了我的SSL验证问题。苦乐参半的胜利。

答案 4 :(得分:7)

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

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

内容

--insecure

默认情况下,这会导致curl忽略SSL证书问题。

确保在完成后删除文件。

<强>更新

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:1)

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

如果遇到同样问题的人遇到此问题,请提及此问题,就像我一样。

答案 7 :(得分:0)

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

  1. 找到卷曲证书PEM文件位置 'curl-config --ca' - &gt; /usr/local/etc/openssl/cert.pem

  2. 使用文件夹位置标识PEM文件 'cd / usr / local / etc / openssl'

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

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

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

    这是为解决Ubuntu中相同问题而发布的解决方案的修改版本:

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

答案 8 :(得分:0)

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

我的系统已安装Netskope Client,并阻止了ssl通信。

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

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

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

答案 9 :(得分:0)

假设您尝试使用 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 !

参考文献