2010-11-07 20 views
3

Je dois être en mesure d'envoyer une requête http get à un service Web qui demande aux clients de s'authentifier avec un certificat spécifique. Le code .net ressemble à ceci:Comment puis-je authentifier une requête Web http avec un certificat?

if (certificate != null) 
    request.ClientCertificates.Add(certificate); 
return request; 

Je n'ai pas pu trouver l'équivalent en rails. Aucune suggestion?

Répondre

2

Si vous utilisez net/https de base, alors il est assez simple:

require 'net/https' 
require 'uri' 

uri = URI.parse(ARGV[0] || 'https://localhost/') 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = true if uri.scheme == "https" # enable SSL/TLS 
http.key = pkey #Sets an OpenSSL::PKey::RSA or OpenSSL::PKey::DSA object. 
http.cert= cert #Sets an OpenSSL::X509::Certificate object as client certificate 

http.start { 
    http.request_get(uri.path) {|res| 
    print res.body 
    } 
} 

Si vous les avez combinés, vous aurez à les masser en utilisant des méthodes utilitaires OpenSSL.

Pour un client http personnalisé, vous devriez lire les documents de la bibliothèque ruby ​​openssl pour les détails sanglants.

Mais en un mot, quelque chose comme cela devrait fonctionner:

ctx = OpenSSL::SSL::SSLContext.new 
ctx.key = private_key_file 
ctx.cert = certificate_file 

..et puis fournir le contexte à votre connexion.