Estoy intentando acceder a un servicio web HTTPS que usa autenticación SSL cert usando Ruby EventMachine pero no lo estoy haciendo funcionar.¿Cómo obtengo una solicitud HTTPS con SSL client cert para trabajar con Ruby EventMachine?
He escrito el siguiente bloque de código simple para probar que de extremo a extremo:
require 'rubygems'
require 'em-http'
EventMachine.run do
url = 'https://foobar.com/'
ssl_opts = {:private_key_file => '/tmp/private.key',
:cert_chain_file => '/tmp/ca.pem',
:verify_peer => false}
http = EventMachine::HttpRequest.new(url).get :ssl => ssl_opts
http.callback do
p http.response_header.status
p http.response_header
p http.response
EventMachine.stop
end
http.errback do
EventMachine.stop
fail "Request failed"
end
end
Ejecución de las salidas anteriores <SSL_incomp>
seguido por el mensaje de RuntimeError elevada. He intentado ejecutar con :verify_peer
establecido en verdadero y falso y me da el mismo error. Ejecutando EventMachine::HttpRequest#get
sin la opción :ssl
hace lo mismo.
también he tratado de enviar la solicitud a Gmail (https://mail.google.com) sin la opción :ssl
(es decir, HTTPS plano sin cert) y que funciona, la salida de código de estado 200, las cabeceras y el cuerpo.
He intentado hacer la misma petición al servicio web con el enrollamiento y que funciona:
curl --silent --cert /tmp/private.key --cacert /tmp/ca.pem https://foobar.com/
Pienso que estoy bien poniendo la gema em-petición http o EventMachine incorrectamente o que el SSL los archivos están en un formato que funciona con curl pero no con EventMachine.
¡Si alguien sabe cómo resolver el ejemplo anterior o proporciona un ejemplo similar usando EventMachine directamente sería muy apreciado!