Error de certificado curl al usar RVM para instalar Ruby 1.9.2

90

RVM se encuentra con un error de certificado al intentar descargar Ruby 1.9.2. Parece que curltiene un problema de certificado, pero no estoy seguro de cómo evitarlo. He incluido la información exacta del error a continuación.

$ 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.

¿Cómo puedo resolver o evitar este error?

Will Dennis
fuente
¿Había instalado todas las dependencias anteriores para compilar esa versión de Ruby?
eveevans
El problema completo y la solución sugerida se indican en el mensaje de error muy extenso. No creo que repetir ese texto en una respuesta aquí ayude mucho. Comience leyendo sobre las URL mencionadas.
Daniel Stenberg
2
@daniel Excepto que la forma normal de hacer que curl deje de quejarse de un certificado SSL incorrecto, -k, no se puede usar aquí, porque rvm está manejando curl. Por cierto, debe pensar detenidamente si realmente desea permitir que curl ignore los certificados SSL incorrectos. Una cosa que puede intentar es darle a curl un paquete de CA más nuevo . La respuesta de @ dorothy a continuación debería funcionar.
Dan Barowy
@dan: vuelve a leer el mensaje de error. En particular, no sugiere que ignore los certificados incorrectos (escribí ese mensaje de error), explica claramente lo que puede hacer y proporciona una URL con una descripción completa que incluye detalles sobre cómo obtener certificados de CA actualizados.
Daniel Stenberg
1
@daniel: ¡el punto es que el mensaje de error es para curl, no rvm! Puede leer la solución sugerida de curl todo lo que quiera, pero si no puede modificar la invocación de curl de rvm, está atascado. Yo mismo intenté actualizar el paquete SSL de curl (configurando CURL_CA_BUNDLE) y no funcionó; en realidad, hay algo mal con el certificado SSL remoto que aloja el tarball de yaml, no solo un paquete de CA curl desactualizado. Diciendo que un usuario RTFM está bien si la lectura de la salida realmente hace solucionar el problema, pero eso es no es el caso aquí. Nuevamente, vea la respuesta a continuación que realmente soluciona el problema.
Dan Barowy

Respuestas:

125

En caso de que alguien más se encuentre con esto mientras intenta actualizar a 1.9.3 (aunque la versión probablemente no importe), verifique la versión de rvm que tiene. Wayne parece haberse movido de rvm.beginrescueend.com a rvm.io. El certificado de seguridad del sitio anterior ha caducado, por lo que la respuesta de curl es correcta.

La actualización de rvm desde el nuevo sitio solucionó este problema y me permitió seguir adelante.

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

Actualización : como mencionó @rodgerdpack, el comando cambia y he actualizado lo anterior. En general, consulte https://rvm.io/ para conocer las últimas novedades.

jwadsack
fuente
1
Ojalá hubiera visto esta respuesta primero. La instalación de 1.9.3 en Mac OS X con RVM no funcionaba, incluso con las soluciones propuestas anteriormente. Sin embargo, actualizar RVM hizo el truco.
chris_radcliff
Esto fue lo que lo hizo por mí también (actualizar de 1.9.2 a 1.9.3) gracias @jwadsack
Anna Billstrom
estos días, al ejecutar el comando que mencionas, aparece un mensaje que dice "estás ejecutando un paquete ubuntu antiguo y roto, consulta stackoverflow.com/questions/9056008/… para saber cómo solucionarlo"
rogerdpack
40

Si no desea cambiar el script Y no desea agregar un certificado "para siempre" al paquete de certificados. Hay una solución muy agradable y rápida:

#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

Luego ejecute su secuencia de comandos. Para restablecer la variable de entorno (para llamadas de script posteriores que no deberían usar este certificado) vuelva a iniciar sesión en su sistema o desarme la variable de entorno:

export CURL_CA_BUNDLE=
DanielaWaranie
fuente
Esto solucionó un problema con yaml, pero tengo problemas separados con alguna otra parte de la complicación.
Emerson
4
Ahora puedo hacer que rvm se instale en CentOS. Muchas gracias
channa ly
No hace nada en OSX Lion con rvm 1.8.3.
Mark Richman
Funciona bien en Centos5.4. Gracias.
Yejun Su
Funciona de maravilla en OSX Mountain Lion para obtener ruby ​​2.0.0.
Arkan
21

Curl se invoca en .rvm / scripts / fetch, que por defecto estará en su directorio de inicio.

Edítelo con su editor de texto favorito: por ejemplo,

 nano ~/.rvm/scripts/fetch

En las líneas 56 y 58 (puede variar con otras versiones de RVM, por supuesto) verá dos líneas que comienzan

 fetch_command="curl ...

Simplemente agregue -k después de curl, guarde y vuelva a intentarlo.

Richard Fairhurst
fuente
9
No funcionó para mí, pero seguí tu idea y descubrí esta alternativa: Crea un archivo ".curlrc" en tu carpeta de inicio ('~ / .curlrc'). Ábralo en cualquier editor y escriba "inseguro" en el archivo. Guarde el archivo y espere lo mejor.
Julian Weimer
8
RVM nunca incluirá ese cambio, desaconsejamos hacerlo de esta manera, si necesita usar inseguro (-k) simplemente llame echo insecure >> ~/.curlrco, mejor aún, actualice los certificados según las instrucciones de
@dbikard
trabajó en debian squeeze. Incluso las publicaciones más antiguas pueden ahorrar mucho tiempo;) ¡gracias!
23tux
@mpapis Estoy totalmente de acuerdo, pero un error que explique, por ejemplo, la solución de user620965 en los errores de instalación de RVM sería genial
Houen
3
Lo más probable es que esto se deba al cambio de URL a rvm.io mencionado en la publicación a continuación y es la forma correcta de abordar esto. No es necesario ignorar los certificados SSL o el comportamiento curl. Simplemente actualice rvm desde la URL adecuada emitiendo $ curl -L get.rvm.io | bash -s estable como se muestra a continuación
cclark
20

Debe descargar el certificado ca de http://curl.haxx.se/ca/cacert.pem y agregarlos a su archivo curl-ca-bundle-new.crt.

Para encontrar la ubicación de este archivo use:

   $ curl-config --ca

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

Haga una copia de seguridad de su archivo curl-ca-bundle.crt:

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

Entonces desea concatenar los dos archivos usando:

$ cat cacert.pem /usr/share/curl/curl-ca-bundle.crt >> curl-ca-bundle-new.crt
dbikard
fuente
¡Gracias, me salvaste algo de tiempo!
Tadas T
Esto (me habría ahorrado) HORAS en OpenIndiana 151. Si pudiera votar más de una vez, lo haría.
Andrew Burns
Esto funcionó para mí en CentOS 5.8; Los certificados se encuentran en / etc / pki / certs / para aquellos que necesitan encontrarlo en CentOS.
geedew
¿Y qué haces con el curl-ca-bundle-new.crt resultante?
Valerio Schiavoni
El nuevo archivo de certificado debe estar presente en el directorio que se encuentra usando 'curl-config --ca'.
Anirudh
17

Quizás todas estas soluciones complicadas alguna vez fueron necesarias, pero ahora todo lo que necesita hacer es primero actualizar RVM y su problema estará resuelto:

$ rvm get stable
$ rvm reload
$ rvm install ruby-1.9.3-p194
Nick Messick
fuente
2
Desafortunadamente, si su versión de RVM es lo suficientemente antigua, "rvm get head" ni siquiera funciona. La respuesta de @ jwadsack explica por qué.
Alex D
Si eso es verdad. Además, mirando hacia atrás en mi respuesta, "rvm get head" tampoco es el mejor consejo. Realmente debería ser "rvm get stable". Voy a editar mi respuesta para reflejar esto.
Nick Messick
14

Si no le importa deshabilitar la verificación del certificado en curl (a mí no):

echo insecure > ~/.curlrc
Vojto
fuente
11

En Centos 5.6 (Final) tuve un problema con la instalación de rvm 1.9.2 El error fue:

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.

Aquí hay una lista de acciones que me ayudaron a resolver el problema.

$ 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

Por cierto, la versión de curl es curl 7.18.0 (para verificar '$ curl -V')

Serge Seletskyy
fuente
1
Buena solución, en mi caso tuve este error al ejecutar "rvm get head". ¡Y tenga cuidado en Linux con el nombre del archivo curl-ca-bundle.crt! es diferente
Albert Català
3

Estaba intentando instalar ruby-1.9.2-p290y encontré el mismo problema. Después de ejecutar which curly darme cuenta de que la instancia de curl provenía de una instalación de MAMP en mi sistema (OS X Snow Leopard), reconfiguré mi PATHvariable para usar el sistema predeterminado en /usr/bin/curl. Usando esta versión, curl 7.19.7no tuve problemas para instalar la última versión de Ruby con RVM.

jerikl
fuente
2

Tuve problemas para instalar 1.9.2 usando RVM, aquí está mi solución:

Sigo recibiendo el error de archivo no encontrado, pero la instalación se realizó correctamente

[2011-07-05 14:24:07] tar zxf /Users//.rvm/archives/yaml-0.1.3.tar.gz -C /Users//.rvm/src --no-same-owner tar (hijo): /Users//.rvm/archives/yaml-0.1.3.tar.gz: No se puede abrir: no existe tal archivo o directorio tar (hijo): El error no se puede recuperar: saliendo ahora tar: El hijo devolvió el estado 2 tar : Salida de error retrasada por errores anteriores

Dorothy Dorothy
fuente
1
Hice algo similar y funcionó bien: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
Solo esta solución me funcionó en Mac Osx Lion. ¡Muchas gracias!
Christian Treppo
1

Gracias Dorothy: esta receta me funcionó con las siguientes modificaciones menores para un entorno Win7:

Para otros con este problema:

  1. Aprecie la discusión sobre la actualización de CA_Bundle - Es bueno hacerlo pero no ayudó con este problema - el certificado del sitio web de pyyaml ​​aún hará que CURL arroje un error y, dado que CURL se inicia dentro del instalador, no hay forma de agregar una opción -k .

  2. Ruby 1.9.2-p290 está intentando instalar YAML 0.1.4 para que Google busque un espejo y descargue esa versión; YAML-0.1.3 no tendrá ningún efecto en eludir los problemas.

  3. Debe hacer el equivalente en Windows de CHMOD 777, dentro de la carpeta rvm / src para los archivos extraídos. Cambie la seguridad para que todos tengan la propiedad / todos los privilegios y desactive el atributo de solo lectura para todos los archivos y carpetas.

El instalador seguirá arrojando errores cuando intente descargar (error CURL), pero se reanudará al intentar extraer. La extracción arrojará errores porque el tarball ya se extrajo a la carpeta src. El siguiente paso para configurar YAML debería funcionar sin errores si los permisos del paso 3 se establecieron correctamente y la instalación debería completarse sin más problemas. (Si instala a través de cygwin / bash, deberá agregar un compilador de C como 'gcc' y agregar 'ncurses' (comando tput) y 'make' a las opciones de configuración de cygwin centrales predeterminadas).

Duke3D
fuente
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
Uladz Kha
fuente