SSLError: nom d'hôte “W. X. Y. Z” ne correspond pas au certificat de serveur
J'ai juste commencé à apprendre le Ruby et au bout de quelques choses de base, j'essaie de comprendre faire des appels de REPOS à un service en ruby. Je peux faire des demandes pour de foursquare API, sans aucun problème. D'autre part, les appels à Cisco CMX API donner d'erreur. Ma version de ruby est 2.1.2. J'ai cherché de nombreuses solutions sur le web, mais quand même eu de problème. Ce ma commande shell que je dirige.
De Travail Un
$resclient
>> RestClient.get 'https://api.foursquare.com/v2/venues/search?ll=40.7,-74&oauth_token=0ZDO1JMJ0PW2QTCDK50OGZ21UENHZ0Y3KIDQZJLLURTQNRQ2&v=20150106'
Cela donne une erreur
$restclient
>> RestClient.get 'https://learning:[email protected]/api/contextaware/v1/maps/.json'
Mon journal d'erreur:
OpenSSL::SSL::SSLError: hostname "64.103.26.61" does not match the server certificate
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/openssl/ssl.rb:139:in `post_connection_check'
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/net/http.rb:922:in `connect'
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/net/http.rb:863:in `do_start'
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/2.1.0/net/http.rb:852:in `start'
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:413:in `transmit'
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:176:in `execute'
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient/request.rb:41:in `execute'
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/lib/restclient.rb:65:in `get'
from (irb):3
from /Users/apple/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/rest-client-1.7.2/bin/restclient:93:in `<top (required)>'
from /Users/apple/.rbenv/versions/2.1.2/bin/restclient:23:in `load'
from /Users/apple/.rbenv/versions/2.1.2/bin/restclient:23:in `<main>'
Pourriez-vous nous donner quelques conseils? Merci
OriginalL'auteur Ahmet Tanakol | 2015-01-06
Vous devez vous connecter pour publier un commentaire.
Voici une réponse plus détaillée et la façon de résoudre le problème en Ruby avec autre chose que le pathétique
OpenSSL::SSL::VERIFY_NONE
.Si l'appareil a un nom DNS de l'msesandbox.cisco.com.
nslookup
vous dit un bon nom d'hôte:Donc, la première chose que vous avez à faire est de se connecter par son nom DNS, et non une adresse IP.
Si vous délivrer des certificats pour les
cisco.com
de domaine (ou peut faire une demande de), vous pouvez demander que l'adresse IP 64.103.26.61 être ajouté comme un autre Nom de l'Objet (SAN). Donc, il y aura deux SANs dans le certificat.Maintenant, si vous retournez à la
openssl
commande:Vous verrez l'émetteur et l'objet sont différents. Cela signifie que ce est pas un certificat auto-signé. Le certificat a été émis par HydrantID (Avalanche Nuage Société).
Si vous regardez plus loin, vous verrez l'Émetteur de la clé publique (l'Identificateur de Clé d'Autorité) est différent de l'Objet de la clé publique (sous réserve Identificateur de Clé):
De nouveau, il n'est pas auto-signé.
Si vous retournez à la commande OpenSSL encore une fois, vous verrez que l'émetteur est
HydrantID SSL ICA G2
, et son émetteur estQuoVadis Root CA2 G3
:Qui signifie
QuoVadis Root CA2 G3
émisHydrantID SSL ICA G2
; etHydrantID SSL ICA G2
émismsesandbox.cisco.com
.QuoVadis Root CA2 G3
est le sommet de la chaîne alimentaire.Vous pouvez chercher
QuoVadis Root CA2 G3
de QuoVadis Certificat d'autorité de certification Télécharger:SI en qui vous avez confiance QuoVadis pour certifier l'appareil, puis:
Avis OpenSSL fini avec
Verify return code: 0 (ok)
. Qui vous dit que vous avez une bonne chaîne. OpenSSL ne pas effectuer le nom d'hôte correspondant, mais nous savons déjà que le nom d'hôte dans le certificat est bon.Maintenant, pour du code Ruby. Tout ce que vous devez faire est de brancher le CA en Ruby:
Et voici un run:
Pas d'exceptions, et pas de
OpenSSL::SSL::VERIFY_NONE
.Vous devriez essayer d'utiliser
options_mask
car il élimine les faibles/blessés/cassé protocoles. Mais Ruby est tellement brisé et sans-papiers, à la fois, je n'ai jamais été en mesure de l'obtenir pour fonctionner.J'ai été en mesure de racine de confiance dans les deux
HydrantID SSL ICA G2
etQuoVadis Root CA2 G3
avec OpenSSL (ce qui signifie que je suis unVerify Result 0 (OK)
de OpenSSL). Mais Ruby ne pouvait gérerQuoVadis Root CA2 G3
(il ne pouvait pas construire une chaîne deHydrantID SSL ICA G2
). Plus Ruby cassé-ness.OriginalL'auteur jww
Si vous allez à votre ordinateur Hôte avec un navigateur, comme
vous verrez, vous obtiendrez la même erreur. Le certificat sur le serveur n'est pas valide, le serveur répond sur un autre nom d'hôte que l'on écrit dans le certificat.
Vous pouvez consulter une description plus riche si vous entrez l'adresse du Serveur à Digicert Helpcenter. Le Certificat a été émis à
msesandbox.cisco.com
. Si c'est l'adresse que vous essayez d'atteindre, utilisez celui-ci au lieu de l'IP. Si c'est votre Serveur, Modifiez le Nom de laEnsuite, essayez de configurer votre Connexion via RestClient.get 'learning:[email protected]/api/contextaware/v1/maps/... " ou essayer de contacter l'admin
Merci s'accoupler, le problème est résolu. J'ai posté le code
Eh bien, c'est la façon dont vous pourriez le faire, mais c'est assez dangereux, c'est pourquoi je n'ai pas de le recommander à vous
OriginalL'auteur chenino
Un presque toujours mauvaise solution de contournement consiste à ignorer le certificat SSL vérifie:
Mise à JOUR: Cette solution de contournement presque jamais être privilégiées, car, en général, résumant à une flagrante trou de sécurité qui est facile à oublier. Dans la plupart des cas où vous penseriez que vous voulez SSL sans vérifier le certificat, vous feriez mieux par la génération d'un certificat auto-signé et de verrouillage des deux côtés de l'utilisation de la même.
OriginalL'auteur Ahmet Tanakol