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


90

尝试下载Ruby 1.9.2时,RVM遇到证书错误。看起来好像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版本?
eveevans 2011年

整个问题和建议的解决方案在非常长的错误消息中说明。我认为在此处的答案中重复该文字不会有太大帮助。首先阅读上面提到的URL。
Daniel Stenberg

2
@daniel除了使curl停止抱怨错误的SSL证书-k的正常方法外,这里不能使用,因为curl是由rvm驱动的。顺便说一句,您应该仔细考虑您是否确实希望允许curl忽略不良的SSL证书。您可以尝试的一件事是为curl提供一个更新的CA捆绑包。@dorothy在下面的答案应该起作用。
丹·巴罗维

@dan:所以请再次阅读错误消息。它并没有特别建议您忽略错误的证书(我写了该错误消息),它清楚地说明了您可以做什么,并且确实提供了具有完整说明的URL,其中包括有关如何获取更新的CA证书的详细信息。
丹尼尔·斯特伯格

1
@daniel:问题是错误消息是针对curl的,而不是rvm!您可以随意阅读curl的建议解决方案,但是如果您无法修改rvm的curl调用,则会遇到麻烦。我本人尝试过更新curl的SSL捆绑包(设置CURL_CA_BUNDLE),但没有用-托管yaml tarball的远程SSL证书实际上出了点问题,而不仅仅是过时的curl CA捆绑包。如果读取输出确实可以解决问题,则告诉用户RTFM可以解决问题,但实际情况并非如此。同样,请参阅下面的答案,该答案实际上可以解决问题。
丹·巴罗维

Answers:


125

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

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

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

更新:如@rodgerdpack所述,命令已更改,我已经更新了上面的内容。通常,请参阅https://rvm.io/以获取最新信息。


1
我希望我会首先看到这个答案。即使使用上述建议的解决方案,也无法在具有RVM的Mac OS X上安装1.9.3。不过,更新RVM可以解决问题。
chris_radcliff 2012年

这也是对我来说所做的(从1.9.2升级到1.9.3),感谢@jwadsa​​ck
Anna Billstrom

这些天,运行您提到的命令会给出一条消息,指出“您正在运行一个旧的破损的ubuntu程序包,有关如何解决它的信息,请参见stackoverflow.com/questions/9056008/…
rogerdpack 2012年

40

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

#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的问题,但是我在并发症的其他部分有单独的问题。
艾默生

4
现在,我可以将rvm安装在CentOS上。非常感谢您
channa ly

在带有rvm 1.8.3的OSX Lion上不执行任何操作。
马克·里奇曼

在Centos5.4上运行良好。谢谢。
苏业俊

在OSX Mountain Lion上像吊饰一样工作以获取ruby 2.0.0。
阿肯

21

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

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

 nano ~/.rvm/scripts/fetch

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

 fetch_command="curl ...

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


9
它对我不起作用,但是我遵循了您的想法,发现了另一种选择:在您的主文件夹('〜/ .curlrc')中创建一个“ .curlrc”文件。在任何编辑器中将其打开,然后在文件中键入“ insecure”。保存文件,并希望最好。
朱利安·魏默

8
RVM永远不会包含该更改,如果您需要使用不安全的(-k)调用echo insecure >> ~/.curlrc或什至更好地只是按照@dbikard指令更新证书,RVM将永远不鼓励这样做
mpapis 2011年

致力于debian压缩。即使是较旧的帖子也可以节省很多时间;)谢谢!
23tux 2012年

@mpapis我完全同意,但错误解释在RVM如user620965的解决方案安装错误,将是巨大的
Houen

3
这很可能是由于以下文章中提到的URL更改为rvm.io,并且是解决此问题的正确方法。您无需忽略SSL证书或卷曲行为。只需通过发出$ curl -L get.rvm.io |从正确的URL更新rvm。bash -s稳定,如下所示
cclark

20

您需要从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

谢谢,您为我节省了一些时间!
Tadas T

这样(本来可以)为我节省了OpenIndiana 151上的HOURS
安德鲁·伯恩斯

这在CentOS 5.8上对我有用。证书位于/ etc / pki / certs /中,用于需要在CentOS上找到证书的人!
geedew

以及如何处理生成的curl-ca-bundle-new.crt?
Valerio Schiavoni 2014年

新证书文件应存在于使用'curl-config --ca'找到的目录中。
Anirudh

17

也许所有这些复杂的解决方案曾经都是必需的,但是现在您要做的就是首先升级RVM,您的问题将得到解决:

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

2
不幸的是,如果您的RVM版本足够老,那么“ rvm get head”甚至无法工作。@jwadsa​​ck的答案解释了原因。
Alex D

对,是真的。另外,回头看我的答案,“ rvm抢先一步”也不是最好的建议。确实应该是“ rvm保持稳定”。我将编辑我的答案以反映这一点。
尼克·梅西克

14

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

echo insecure > ~/.curlrc

11

在Centos 5.6(Final)上,我安装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

Btw curl版本是curl 7.18.0(检查'$ curl -V')


1
好的解决方案,就我而言,执行“ rvm get head”时出现此错误。并在Linux中使用文件curl-ca-bundle.crt的名称小心!有所不同
AlbertCatalà2013年

3

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


2

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

我仍然找不到文件错误,但是安装成功

[2011-07-05 14:24:07] tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src --no-ame-owner tar (子级):/Users//.rvm/archives/yaml-0.1.3.tar.gz:无法打开:无此类文件或目录tar(子级):无法恢复错误:现在退出tar:子级返回状态2 tar :错误退出由于先前的错误而延迟


1
我做了类似的事情,结果很好: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
Wei

在Mac Osx Lion上,只有此解决方案对我有用。非常感谢!
Christian Treppo,2012年

1

多萝西(Dorothy),谢谢您-对于Win7环境,此菜谱对我进行了以下较小的修改:

对于其他有此问题的人-

  1. 赞赏有关更新CA_Bundle的讨论-很好,但是并没有解决此问题-pyyaml网站证书仍会导致CURL引发错误,并且由于CURL是在安装程序中启动的,因此无法添加-k选项。

  2. Ruby 1.9.2-p290尝试安装YAML 0.1.4,因此Google会提供镜像并下载该版本-YAML-0.1.3不会绕过该问题。

  3. 您需要在rvm / src文件夹中对提取的文件执行与CHMOD 777等效的Windows。更改安全性,以使每个人都拥有所有权/所有特权,并关闭所有文件和文件夹的只读属性。

尝试下载时,安装程​​序仍会抛出错误(CURL错误),但尝试提取将恢复安装程序。由于压缩包已被提取到src文件夹中,因此提取将引发错误。如果正确设置了第3步中的权限,则配置YAML的下一步应该可以正常工作,并且安装应该没有任何问题。(如果通过cygwin / bash安装,则需要添加C编译器,例如'gcc',并将'ncurses'(tput命令)和'make'添加到默认的核心cygwin设置选项。)


0
$ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.