ssl_connect returned net failed error ruby-on-rails ruby openssl net-http

ruby-on-rails - returned - ruby net http



OpenSSL:: SSL:: SSLError: SSL_connect SYSCALL devuelto=5 errno=0 estado=SSLv3 servidor de lectura hola A (2)

Este es un problema en el sitio del servidor. Parece que el servidor acepta exclusivamente TLS 1.2 y no muestra el comportamiento habitual cuando el cliente solicita algo menor (como degradar o enviar una alerta SSL), sino que simplemente cierra la conexión.

TLS 1.2 no es compatible con OpenSSL 0.9.8 y, además, su código aplica SSLv3. Obtiene TLS 1.2 solo al actualizar a OpenSSL 1.0.1.

Algunos navegadores también fallarán para conectarse a este servidor, incluso si tienen formas de solucionar estos servidores rotos. Pero mientras Firefox solo intentará degradar la conexión a una versión SSL menor (lo que a menudo ayuda) Chrome logra conectarse con TLS 1.2.

Edición: He analizado el problema más a fondo y ahora ya no puedo obtener una conexión con TLS1.2, pero puedo obtener una conexión con TLS1.0 o SSL3.0, pero solo si los cifrados están codificados de forma rígida como RC4-SHA. He probado otros como AES128-SHA o DES-CBC3-SHA y no funcionan. Así que mientras parece un sistema realmente desordenado configurando explícitamente

http.ssl_version = ''TLSv1'' -- or SSLv3, but TLSv1 is better http.ssl_cipher = ''rc4-sha''

Deberia trabajar. No soy un usuario de Ruby, por lo que la sintaxis exacta puede diferir, pero he probado con OpenSSL s_client.

El siguiente código produce el siguiente error: OpenSSL :: SSL :: SSLError: SSL_connect SYSCALL devuelto = 5 errno = 0 estado = SSLv3 lee el servidor hola A

require ''net/https'' uri = URI.parse("https://<server>.com") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.ssl_version = ''SSLv3'' http.get(uri.request_uri)

¿Alguna idea de por qué? Intenté todo lo mencionado en todas las demás preguntas, todavía no tuve suerte.

  • Ruby 1.9.3p484 (2013-11-22 revisión 43786) [x86_64-darwin13.3.0]
  • OpenSSL 0.9.8y 5 feb 2013

Actualizar I

Intenté lo siguiente:

  • Ruby 2.0.0p353 (2013-11-22 revisión 43784) [x86_64-darwin13.3.0]
  • OpenSSL 1.0.1i 6 ago 2014

Actualización II

  • Forzado ssl_version a: TLSv1_2

Todavía no hay suerte.

Actualización III

Bien, aquí está el código final, gracias a Steffen (vea la respuesta a continuación):

require ''net/https'' uri = URI.parse("https://<server>.com") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.ssl_version = :TLSv1 http.ciphers = [''RC4-SHA''] http.get(uri.request_uri)

Dudo que mi pregunta sea relevante para cualquier otra persona, ya que estaba relacionada con un servidor remoto mal configurado.


La solución es actualizar a openssl 1.0.2g-1​ubuntu4.6 (desde 1.0.1f-1​ubuntu2.21 ) (por ejemplo, desde cedar-14 a la pila heroku-16 ).

heroku stack:set heroku-16 -a your-app

Y en app.json :

{ ... "stack": "heroku-16", ... }