Sto tentando di accedere a un servizio Web HTTPS che utilizza l'autenticazione cert SSL utilizzando Ruby EventMachine ma non riesco a farlo funzionare.Come posso ottenere una richiesta HTTPS con il certificato client SSL per funzionare con Ruby EventMachine?
ho scritto il seguente blocco di codice semplice per provarlo end-to-end:
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
Esecuzione delle uscite di cui sopra <SSL_incomp>
seguita dalla RuntimeError messaggio sollevato. Ho provato a correre con :verify_peer
impostato su true e false e mi dà lo stesso errore. L'esecuzione di EventMachine::HttpRequest#get
senza l'opzione :ssl
fa lo stesso.
Ho anche provato a inviare la richiesta a GMail (https://mail.google.com) senza l'opzione :ssl
(vale a dire semplice HTTPS senza certificato) e funziona, emettendo il codice di stato 200, le intestazioni e il corpo.
Ho provato a fare la stessa richiesta al servizio Web con l'arricciatura e che funziona:
curl --silent --cert /tmp/private.key --cacert /tmp/ca.pem https://foobar.com/
Sto pensando che sto sia utilizzando la gemma em-http-request o EventMachine in modo non corretto o che l'SSL i file sono in un formato che funziona con arricciatura ma non con EventMachine.
Qualcuno sa come risolvere l'esempio precedente o fornire un esempio simile utilizzando EventMachine direttamente sarebbe molto apprezzato!