Tengo un entorno de prueba que usa Ruby para conducir un servidor a través de una conexión https. Dado que las últimas versiones de Ruby se niegan a conectarse a un servidor https con un certificado no válido (consulte this earlier question of mine) y me gustaría comenzar a utilizar una versión más nueva de Ruby, estoy tratando de configurar un certificado válido.Conexión usando https a un servidor con un certificado firmado por una CA Creé
He creado un certificado de CA para usar (hay varios servidores que se prueban para que parezca más fácil), y lo he usado con éxito para firmar un nuevo certificado que se ha instalado en un servidor y se está utilizando. He agregado el certificado de CA a la tienda del navegador y ahora (el navegador) se conectará al servidor sin quejarse. Por lo tanto, estoy seguro de que mis certificados son válidos y están configurados correctamente.
Sé que Ruby no utiliza la misma tienda que el navegador. He utilizado el archivo de CA disponible here para probar la conexión a otros servidores (públicos) (establecido mediante el método Net::HTTP#ca_file=
) y esto también funciona.
Lo que no puedo conseguir es que Ruby se conecte a mi servidor utilizando mi certificado. He intentado varias formas de señalar que en mi certificado (incluyendo la adición de mi certificado al archivo vinculado anteriormente) y que siempre da el mismo error:
SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A (OpenSSL::SSL::SSLError)
¿Qué tengo que hacer para convencer a Ruby a aceptar mi certificado y conectarse a mi servidor?
El código que estoy utilizando es:
require 'net/https'
uri = URI.parse("https://hostname/index.html")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = "My CA cert file"
request = Net::HTTP::Get.new(uri.path)
response = http.request(request)
Asumo que esto está mal de alguna manera. Lo que quiero saber es, ¿qué debo hacer para usar mi certificado de CA?
¿Dice que también ejecuta su servidor con Ruby? ¿Podría publicar los fragmentos de código relevantes para el cliente y el servidor? – emboss
@emboss el servidor no es Ruby (en realidad es Tomcat aunque no creo que eso importe). No estoy seguro de qué código querría ver. Solo estoy usando la biblioteca estándar de Ruby https. – Jonathan
@Jonathan, pegar el código de cliente que está utilizando para conectarse a su servidor sería un punto de partida. –