2010-10-27 11 views
6

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!

risposta

2

Il file passato a arricciato --cert contiene sia il certificato che la chiave (a meno che non si passi in uno --key separatamente). Basta usare /tmp/private.key come l'argomento sia :private_key_file e :cert_chain_file

Vedere http://github.com/eventmachine/eventmachine/issues/#issue/115 per maggiori dettagli sul problema e una patch che espone l'errore di fondo (invece di stampare SSL_incomp).

Problemi correlati