使用 RVM 安装 Ruby 1.9.2 时出现 Curl 证书错误

Posted

技术标签:

【中文标题】使用 RVM 安装 Ruby 1.9.2 时出现 Curl 证书错误【英文标题】:Curl Certificate Error when Using RVM to install Ruby 1.9.2 【发布时间】:2011-09-18 20:16:31 【问题描述】:

RVM 在尝试下载 Ruby 1.9.2 时遇到证书错误。看起来curl 有证书问题,但我不知道如何绕过它。我在下面包含了确切的错误信息。

$ rvm install 1.9.2
Installing Ruby from source to: /Users/willdennis/.rvm/rubies/ruby-1.9.2-p180, this may take a while depending on your cpu(s)...

ruby-1.9.2-p180 - #fetching 
ERROR: Error running 'bunzip2 '/Users/willdennis/.rvm/archives/ruby-1.9.2-p180.tar.bz2'', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/extract.log
ruby-1.9.2-p180 - #extracting ruby-1.9.2-p180 to /Users/willdennis/.rvm/src/ruby-1.9.2-p180
ruby-1.9.2-p180 - #extracted to /Users/willdennis/.rvm/src/ruby-1.9.2-p180
Fetching yaml-0.1.3.tar.gz to /Users/willdennis/.rvm/archives

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /Users/willdennis/.rvm/log/ruby-1.9.2-p180/*.log. Next we'll try to fetch via http.
Trying http:// URL instead.

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /Users/willdennis/.rvm/log/ruby-1.9.2-p180/*.log
Extracting yaml-0.1.3.tar.gz to /Users/willdennis/.rvm/src
ERROR: Error running 'tar zxf /Users/willdennis/.rvm/archives/yaml-0.1.3.tar.gz -C /Users/willdennis/.rvm/src --no-same-owner', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/extract.log
/Users/willdennis/.rvm/scripts/functions/packages: line 55: cd: /Users/willdennis/.rvm/src/yaml-0.1.3: No such file or directory
Configuring yaml in /Users/willdennis/.rvm/src/yaml-0.1.3.
ERROR: Error running ' ./configure --prefix="/Users/willdennis/.rvm/usr"  ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/configure.log
Compiling yaml in /Users/willdennis/.rvm/src/yaml-0.1.3.
ERROR: Error running '/usr/bin/make ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/make.log
Installing yaml to /Users/willdennis/.rvm/usr
ERROR: Error running '/usr/bin/make install', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/yaml/make.install.log
ruby-1.9.2-p180 - #configuring 
ERROR: Error running ' ./configure --prefix=/Users/willdennis/.rvm/rubies/ruby-1.9.2-p180 --enable-shared --disable-install-doc --with-libyaml-dir=/Users/willdennis/.rvm/usr ', please read /Users/willdennis/.rvm/log/ruby-1.9.2-p180/configure.log
ERROR: There has been an error while running configure. Halting the installation.

如何解决或避免此错误?

【问题讨论】:

您是否安装了所有以前的依赖项以编译该 Ruby 版本? 整个问题和建议的解决方案在非常冗长的错误消息中说明。我认为在此处的答案中重复该文本不会有很大帮助。首先阅读提到的 URL。 @daniel 除了让 curl 停止抱怨 SSL 证书错误的常规方法 -k 不能在这里使用,因为 curl 是由 rvm 驱动的。顺便说一句,您应该仔细考虑是否真的要允许 curl 忽略错误的 SSL 证书。您可以尝试的一件事是给 curl 一个newer CA bundle。 @dorothy 下面的回答应该有效。 @dan:请再次阅读错误消息。它并不特别建议您忽略错误的证书(我写了那条错误消息),它清楚地解释了您可以做什么,并且确实提供了一个包含完整描述的 URL,包括有关如何获取更新的 CA 证书的详细信息。 @daniel:关键是错误消息是针对 curl,而不是 rvm!您可以随心所欲地阅读 curl 建议的解决方案,但如果您无法修改 rvm 对 curl 的调用,那么您将陷入困境。我自己尝试更新 curl 的 SSL 包(设置 CURL_CA_BUNDLE),但它没有用 - 实际上 托管 yaml tarball 的远程 SSL 证书有问题,而不仅仅是过时的 curl CA 捆绑包。如果读取输出确实确​​实解决了问题,那么告诉用户 RTFM 很好,但这里的情况不是。同样,请参阅下面的答案实际上解决了问题。 【参考方案1】:

如果其他人在尝试更新到 1.9.3 时遇到此问题(尽管版本可能无关紧要),请检查您拥有的 rvm 版本。 Wayne 似乎已从 rvm.beginrescueend.com 移至 rvm.io。旧站点的安全证书已经过期,所以 curl 的响应是正确的。

从新站点更新 rvm 解决了这个问题,让我可以继续前进。

$ \curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled

更新:正如@rodgerdpack 提到的,命令发生了变化,我已经更新了上面的内容。一般情况下,请参阅https://rvm.io/ 了解最新信息。

【讨论】:

我希望我能先看到这个答案。即使使用上面提出的解决方案,在带有 RVM 的 Mac OS X 上安装 1.9.3 也无法正常工作。不过,更新 RVM 就成功了。 这也是为我做的(从 1.9.2 升级到 1.9.3)谢谢@jwadsa​​ck 这些天运行你提到的命令会给出一条消息,说“你正在运行一个旧的和损坏的 ubuntu 包,请参阅***.com/questions/9056008/… 了解如何修复它”【参考方案2】:

如果您不想更改脚本并且您确实不想“永远”添加证书到证书包。有一个非常好的快速解决方案:

#to download the cert
wget http://curl.haxx.se/ca/cacert.pem
#to let curl use it for the next calls
export CURL_CA_BUNDLE=~/cacert.pem

然后运行您的脚本。 要重置环境变量(对于不应使用此证书的后续脚本调用)重新登录到您的系统或取消设置环境变量:

export CURL_CA_BUNDLE=

【讨论】:

这解决了 yaml 的问题,但我对复杂性的其他部分有单独的问题。 现在我可以在 CentOS 上安装 rvm。非常感谢你 在带有 rvm 1.8.3 的 OSX Lion 上什么也不做。 在 Centos5.4 上运行良好。谢谢。 在 OSX Mountain Lion 上像魅力一样工作,以获得 ruby​​ 2.0.0。【参考方案3】:

Curl 在 .rvm/scripts/fetch 中调用,默认情况下将在您的主目录中。

使用您喜欢的文本编辑器进行编辑:例如,

 nano ~/.rvm/scripts/fetch

在第 56 和 58 行(当然,可能与其他版本的 RVM 不同)你会看到两行开始

 fetch_command="curl ...

只需在curl后加-k,保存后重试。

【讨论】:

它对我不起作用,但我按照你的想法找到了这个替代方案:在你的主文件夹 ('~/.curlrc') 中创建一个“.curlrc”文件。在任何编辑器中打开它并在文件中输入“不安全”。保存文件并希望一切顺利。 RVM 永远不会包含该更改,我们不鼓励这样做,如果您需要使用不安全 (-k),只需调用 echo insecure >> ~/.curlrc 或者更好地按照 @dbikard 说明更新证书 在 debian 压缩上工作。即使是较旧的帖子也可以节省大量时间;)谢谢! @mpapis 我完全同意,但是一个错误解释例如user620965 在 RVM 安装错误中的解决方案会很棒 这很可能是因为下面帖子中提到的 rvm.io 的 URL 更改,并且是解决此问题的正确方法。您无需忽略 SSL 证书或 curl 行为。只需通过发出 $ curl -L get.rvm.io | 从正确的 URL 更新 rvm bash -s stable 如下图【参考方案4】:

您需要从http://curl.haxx.se/ca/cacert.pem 下载 ca 证书并将其添加到您的 curl-ca-bundle-new.crt 文件中。

要查找此文件的位置,请使用:

   $ curl-config --ca

   /usr/share/curl/curl-ca-bundle.crt

备份你的 curl-ca-bundle.crt 文件:

$ cp /usr/share/curl/curl-ca-bundle.crt /usr/share/curl/curl-ca-bundle.crt.old

然后您想使用以下方法连接两个文件:

$ cat cacert.pem /usr/share/curl/curl-ca-bundle.crt >> curl-ca-bundle-new.crt

【讨论】:

谢谢,你帮我节省了一些时间! 这(本可以)在 OpenIndiana 151 上为我节省了 HOURS。如果我可以多次投票,我会的。 这在 CentOS 5.8 上对我有用;证书位于 /etc/pki/certs/ 供那些需要在 CentOS 上找到它的人使用! 你如何处理生成的 curl-ca-bundle-new.crt? 新的证书文件应该存在于使用 'curl-config --ca' 找到的目录中。【参考方案5】:

也许所有这些复杂的解决方案曾经都是必要的,但现在您只需先升级 RVM,您的问题就会迎刃而解:

$ rvm get stable
$ rvm reload
$ rvm install ruby-1.9.3-p194

【讨论】:

不幸的是,如果您的 RVM 版本足够老,“rvm get head”甚至不起作用。 @jwadsa​​ck 的回答解释了原因。 是的,没错。此外,回顾我的回答,“rvm get head”也不是最好的建议。它真的应该是“rvm 变得稳定”。我将编辑我的答案以反映这一点。【参考方案6】:

如果您不介意在 curl 中禁用证书检查(我不介意):

echo insecure > ~/.curlrc

【讨论】:

【参考方案7】:

在 Centos 5.6(最终版)上 我在安装 rvm 1.9.2 时遇到问题 错误是:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /usr/local/rvm/log/ruby-1.9.2-p290/*.log. Next we'll try to fetch via http.
Trying http:// URL instead.

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). The default
 bundle is named curl-ca-bundle.crt; you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
ERROR: There was an error, please check /usr/local/rvm/log/ruby-1.9.2-p290/*.log
ERROR: There has been an error while trying to fetch the source.  
Halting the installation.
ERROR: There has been an error fetching the ruby interpreter. Halting the installation.

这是帮助我解决问题的操作列表

$ curl-config --ca # show path to the certificate
/usr/local/share/curl/curl-ca-bundle.crt
$ cd /usr/local/share/curl/ # go to that path
$ cp curl-ca-bundle.crt curl-ca-bundle.crt.bak # backup certificate
$ curl http://curl.haxx.se/ca/cacert.pem -o curl-ca-bundle.crt # download new
$ rvm install 1.9.2 # bingo it works

顺便说一句 curl 版本是 curl 7.18.0(检查'$ curl -V')

【讨论】:

很好的解决方案,在我的情况下,我在执行“rvm get head”时遇到了这个错误。并且在文件名为 curl-ca-bundle.crt 的 linux 中要小心!不一样【参考方案8】:

我试图安装ruby-1.9.2-p290 并遇到了同样的问题。在运行which curl 并意识到 curl 实例来自我的系统(OS X Snow Leopard)上安装的 MAMP 之后,我重新配置了我的PATH 变量以使用/usr/bin/curl 的系统默认值。使用这个版本,curl 7.19.7,我可以毫无问题地使用 RVM 安装最新版本的 Ruby。

【讨论】:

【参考方案9】:

我在使用 RVM 安装 1.9.2 时遇到问题,这是我的解决方案:

从http://www.filewatcher.com/m/yaml-0.1.3.tar.gz.466845.0.0.html下载yaml-0.1.3.tar.gz 将其保存到 /Users//.rvm/archives/yaml-0.1.3.tar.gz

运行这些命令:

chmod 777 yaml-0.1.3.tar.gz

tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src

我仍然收到文件未找到错误,但安装继续成功

[2011-07-05 14:24:07] tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src --no-same -所有者 tar(子):/Users//.rvm/archives/yaml-0.1.3.tar.gz:无法打开:没有这样的文件或目录 tar(子):错误不可恢复:现在退出 焦油:孩子返回状态2 tar: 错误退出因先前错误而延迟

【讨论】:

我做了类似的事情,结果很好:wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz; cp yaml-0.1.4.tar.gz /Users/yourname/.rvm/archives; rvm install default 只有这个解决方案在 Mac Osx Lion 上对我有效。非常感谢!【参考方案10】:

谢谢 Dorothy - 这个食谱对我有用,对 Win7 环境进行了以下小修改:

对于其他有此问题的人 -

    感谢有关更新 CA_Bundle 的讨论 - 很好 但它对这个问题没有帮助 - pyyaml 网站证书仍然会 导致 CURL 抛出错误,并且由于 CURL 在安装程序中启动, 无法添加 -k 选项。

    Ruby 1.9.2-p290 正在尝试安装 YAML 0.1.4,因此 Google 镜像并下载该版本 - YAML-0.1.3 在 绕过问题。

    您需要在 rvm/src 中执行相当于 CHMOD 777 的 windows 文件夹到提取的文件。改变安全,让每个人都有 所有权/所有权限并关闭所有文件的只读属性和 文件夹。

安装程序在尝试下载时仍会抛出错误(CURL 错误),但会通过尝试提取来恢复。解压将引发错误,因为 tarball 已经解压到 src 文件夹。如果正确设置了第 3 步中的权限,并且安装应该完成且没有其他问题,则配置 YAML 的下一步应该可以正常工作。 (如果通过 cygwin/bash 安装,您需要添加一个 C 编译器,如“gcc”,并将“ncurses”(tput 命令)和“make”添加到默认的核心 cygwin 设置选项。)

【讨论】:

【参考方案11】:
$ sudo apt-get install curl

$ curl -L https://get.rvm.io | bash -s stable --ruby   with ruby

$ curl -L https://get.rvm.io | bash -s stable --rails   with rails

【讨论】:

以上是关于使用 RVM 安装 Ruby 1.9.2 时出现 Curl 证书错误的主要内容,如果未能解决你的问题,请参考以下文章

ruby 版本管理器(安装 rvm 时出现以下内存错误)

使用 rvm 安装 ruby​​ 时出错

使用 rvm 安装最新的 RUBY 在 Ubuntu 上会出错

通过 RVM 在 Ubuntu、Ruby 1.9.2 上安装使用本机扩展的 gem 时出错

RVM 无法在 Lion 上安装 Ruby 1.9.3:libxml2.2.dylib

使用 Ruby 1.9.3 时出现“证书验证失败”OpenSSL 错误