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-1ubuntu4.6
(desde 1.0.1f-1ubuntu2.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",
...
}