J'essaie d'accéder à un service Web HTTPS qui utilise l'authentification par certificat SSL à l'aide de Ruby EventMachine, mais je n'arrive pas à le faire fonctionner.Comment obtenir une requête HTTPS avec le certificat client SSL pour utiliser Ruby EventMachine?
J'ai écrit le bloc de code simple suivant pour le tester de bout en bout:
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
Exécution des sorties au-dessus <SSL_incomp>
suivi par le relief RuntimeError message. J'ai essayé de courir avec :verify_peer
mis à la fois vrai et faux et il me donne la même erreur. Exécution EventMachine::HttpRequest#get
sans l'option :ssl
fait la même chose.
J'ai également essayé d'envoyer la demande à GMail (https://mail.google.com) sans l'option :ssl
(c'est-à-dire HTTPS simple sans cert) et qui fonctionne, produisant le code d'état 200, les en-têtes et le corps.
J'ai essayé de faire la même demande au service web avec boucle et qui fonctionne:
curl --silent --cert /tmp/private.key --cacert /tmp/ca.pem https://foobar.com/
Je pense que je suis soit en utilisant la gemme em-http-demande ou eventmachine de manière incorrecte ou que le SSL les fichiers sont dans un format qui fonctionne avec curl mais pas EventMachine.
Je sais comment résoudre l'exemple ci-dessus ou fournir un exemple similaire en utilisant EventMachine directement serait très apprécié!