Connexion à l'aide de https sur un serveur avec un certificat signé par une CA que j'ai créé
J'ai un environnement de test qui utilise Ruby pour la conduite d'un serveur via une connexion https. Depuis les dernières versions de Ruby refuser de se connecter à un serveur https avec un certificat non valide (voir cette question de la mienne) et je voudrais commencer à utiliser une version plus récente de Ruby, je suis en train de mettre en place un certificat valide.
J'ai créé un certificat d'autorité de certification à utiliser (il y a plusieurs serveurs testé si cela semble la façon la plus facile), et ils ont réussi à signer un nouveau certificat qui a été installé sur un serveur et qui est utilisé. J'ai ajouté le certificat d'autorité de certification pour le navigateur store et il (le navigateur) va maintenant se connecter au serveur sans plainte. Je suis donc confiant mes certificats sont valides et mis en place correctement.
Je sais que Ruby ne pas utiliser la même banque que le navigateur. J'ai utilisé le CA de fichier disponible ici pour tester la connexion à d'autres (public) serveurs (défini à l'aide de la Net::HTTP#ca_file=
méthode) et cela fonctionne aussi.
Ce que je ne peut pas se rendre au travail est Ruby de la connexion à mon serveur à l'aide de mon certificat. J'ai essayé différentes façons de pointer vers mon certificat (y compris l'ajout de mon certificat dans le fichier ci-dessus) et il donne toujours la même erreur:
SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A (OpenSSL::SSL::SSLError)
Que dois-je faire pour convaincre Ruby à accepter mon certificat et se connecter à mon serveur?
Le code que j'utilise est:
require 'net/https'
uri = URI.parse("https://hostname/index.html")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = "My CA cert file"
request = Net::HTTP::Get.new(uri.path)
response = http.request(request)
Je suppose que c'est mal en quelque sorte. Ce que je veux savoir, c'est, que dois-je faire pour utiliser mon certificat d'autorité de certification?
le serveur n'est pas Ruby (c'est en fait tomcat bien que je ne pense pas que les questions). Je ne suis pas sûr de ce code que vous souhaitez voir. Je suis juste en utilisant le standard de Ruby https bibliothèque.
coller le code de client que vous utilisez pour vous connecter à votre serveur serait un point de départ.
Ajout d'un code.
OriginalL'auteur Jonathan | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
Je suppose que votre serveur Tomcat n'aime pas la version du protocole Ruby essaie de négocier. Ruby utilise SSLv23 par défaut, mais j'ai entendu parler d'autres cas où c'est un problème de Java à base de serveurs web. Le message d'erreur que vous obtenez indique que la négociation échoue lors de la configuration de la connexion et essaie de lire la réponse du serveur. Essayez d'ajouter soit
ou
et voir si cela aide déjà.
Si cela ne résout pas le problème encore, il serait très intéressant de voir pourquoi votre serveur rejette la tentative de connexion. Essayez de lancer votre serveur Tomcat avec
-Djavax.net.debug=ssl
et merci de poster les parties concernées (les informations de connexion, à l'exception stacktrace) pourquoi la tentative échoue.Vous êtes les bienvenus! En fait, vous pourriez m'aider, aussi. J'ai besoin de comprendre si c'est un vrai bug sur le Java côté. À l'aide de SSLv23 sur le côté client, c'est comme dire que le serveur "je peux faire n'importe quel protocole vous voulez de moi, juste de nom", de sorte que Tomcat ne devriez pas avoir refusé à la première place. Ce exact Tomcat version utilisez-vous, quel JDK?
D'intérêt, si vous connaissez, est-ce par défaut a changé récemment? Ce problème se produit uniquement avec les dernières versions (1.8.7-p352 et 1.9.2p290). Les versions antérieures sont très bien.
Version de Java est 1.6.0_05-b13. Version de Tomcat est 6.0.35.
Hmm, pas que je sache. Git blâmer, dit-on utiliser SSLv23 depuis 2003: github.com/ruby/ruby/blame/trunk/ext/openssl/ossl_ssl.c, journal officiel l149. Se pourrait-il que vous avez changé d'OpenSSL lui-même, dans l'intervalle?
OriginalL'auteur emboss
Je suis à l'aide de ruby 1.9.3 et confronté à la même erreur lors de l'utilisation nokogiri pour analyser certains sécurisé url.
La réponse ci-dessus fourni par estampage est correct, mais assurez-vous que le ssl erreur générée est de ce qui est mentionné ci-dessus. J'ai suivi le même et trouve une solution à cette mentionnées ci-dessous.
maintenant, la réponse est d'avoir le bon code html analysés à la recherche de la garantie de l'url qui est transmis à l'codes dans l'url .
OriginalL'auteur Amit
Assurez-vous que votre fichier de certificat est au format PEM, pas de CRT (donc le documentation de Net::HTTP Ruby 1.9.3 dit).
Mise à jour il ressemble à de la documentation n'est pas à jour, Ruby 1.9.3 accepte n'importe quel type de certificat.
La documentation dit le contraire ruby-doc.org/stdlib-1.9.3/libdoc/net/http/rdoc/Net/... mais je vous crois, je n'ai jamais essayé avec des non-PEM certificats.
Oups, je suis désolé, j'ai besoin de mettre à jour la documentation 🙂 Mon mauvais, pouvez-vous faire un micro modifier, afin que je puisse prendre le downvote loin?
J'ai ajouté un lien vers la documentation (j'aurais ajouté dès le début).
OK, merci, j'ai enlevé le dv!
OriginalL'auteur gioele