RestClient parviennent pas à OBTENIR des ressources en utilisant SSL certificat du client
Je suis en train d'utiliser RestClient pour récupérer une page sécurisé, à l'aide d'un certificat client SSL. Mon code est comme suit:
require 'restclient'
p12 = OpenSSL::PKCS12.new(File.read('client.p12'), 'password')
client = RestClient::Resource.new('https://example.com/',
:ssl_client_key => p12.key,
:verify_ssl => OpenSSL::SSL::VERIFY_NONE)
client.get
Quand je le lance, je vois l'erreur suivante:
1.9.3-p374 :007 > client.get
RestClient::BadRequest: 400 Bad Request
from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/abstract_response.rb:48:in `return!'
from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:230:in `process_result'
from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:178:in `block in transmit'
from /home/duncan/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/1.9.1/net/http.rb:745:in `start'
from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:172:in `transmit'
from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:64:in `execute'
from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/request.rb:33:in `execute'
from /home/duncan/.rvm/gems/ruby-1.9.3-p374/gems/rest-client-1.6.7/lib/restclient/resource.rb:51:in `get'
from (irb):7
from /home/duncan/.rvm/rubies/ruby-1.9.3-p374/bin/irb:13:in `<main>'
Je suis assez sûr que c'est un échec pour s'authentifier, que je reçois la même erreur dans un navigateur si je n'ai pas installer le certificat client.
Je suis en utilisant OpenSSL::SSL::VERIFY_NONE
parce que le serveur a un certificat auto-signé, et je crois que c'est la bonne valeur à passer d'ignorer ce fait.
Des suggestions sur la façon d'obtenir ce travail serait grandement apprécié - même un pointeur pour certains une documentation détaillée, ou une suggestion d'un autre Bijou qui pourrait fonctionner. Je n'ai pas eu beaucoup de chance avec le Gem docs ou Google 🙁
OriginalL'auteur Duncan Bayne | 2013-05-23
Vous devez vous connecter pour publier un commentaire.
Votre demande HTTPS va avoir besoin de le certificat du client ainsi que la clé. Essayez:
Si cela ne fonctionne pas, vous pouvez essayer de capturer le handshake paquets (par exemple avec WireShark) pour vérifier que l'API est en offrant le certificat.
VERIFY_NONE
est donc faux à bien des niveaux... Quel est l'intérêt de l'utilisation de ssl lorsque vous n'avez pas vérifier le certificat?est utile lors de l'élaboration localement sur un serveur avec un certificat auto-signé.
Ouais, mais quand DONC est plein de réponses acceptées avec
VERIFY_NONE
sans aucune explication de ce qu'il peut faire, il est alors très probable que le code de ce genre se retrouvent partout et aucun certificat ne sera vérifiée.Je suis d'accord avec @JarmoPertman - il n'y a pas de raisons de se ssl_client_cert & ssl_client_key en raison de la
VERIFY_NONE
. Bien sûr qu'il fonctionne et vous permet de remplacer des problèmes de connexion, mais ce n'est pas ok sur l'environnement de production. Vous devez spécifierOpenSSL::SSL::VERIFY_PEER
OriginalL'auteur rhashimoto