如何修复 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 证书:证书链无效的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 youtube data api V3 中的 curl 错误 60:ssl 证书问题?
curl(60)ssl证书问题自签名证书localhost在windows
Curl 错误 60,SSL 证书问题:证书链中的自签名证书