SSLHandshakeException: nom d'hôte dans le certificat ne correspond pas à
Je suis en train d'écrire un système qui doit faire un multipart post à un serveur (un programme tiers appelé ARX qui est actuellement en cours d'exécution sur l'hôte local pendant le développement) qui a un certificat auto-signé.
J'ai essayé de trouver son certificat, mais ne peut trouver trois différents jks fichiers; serveur.jks, servertrust.jks et serverca.jks.
J'ai essayé d'utiliser le System.setProperty("javax.net.ssl.trustStore", "Program Files\\<path>\\jksfile")
avec chacun des jks fichiers. Cependant, lorsque je le fais, j'obtiens l'erreur suivante:
nom d'hôte dans le certificat ne correspond pas à: < localhost> != <9200416 arx sa cert>.
J'ai parcouru beaucoup de questions similaires ici sur stackoverflow pour essayer et se faire une idée sur comment résoudre ce problème, mais je n'ai pas été en mesure de résoudre mon problème.
Des suggestions? Toute aide est très appréciée.
hostNameVerifier
partie - cela peut vous aider: stackoverflow.com/questions/15544116/...OriginalL'auteur EvenLisle | 2013-10-10
Vous devez vous connecter pour publier un commentaire.
Le certificat lui-même semble de confiance, de sorte que votre
javax.net.ssl.trustStore
réglage travaillé, mais le nom d'hôte ne correspond pas.Nom d'hôte correspondant est effectué en fonction de la manière dont le client identifie l'hôte qu'il essaie d'accès. Si c'est de la tentative d'accès
https://localhost/
, puis le certificat doit être valide pourlocalhost
. Si c'est de la tentative d'accèshttps://something-else.example
, puis le certificat doit être valide poursomething-else.example
, même silocalhost
etsomething-else.example
sont une seule et même machine.L'identifiant dans le certificat devrait être dans un autre Nom de l'Objet d'extension ou, à défaut, dans le Nom Commun (CN) de l'Objet Nom unique.
Ici, elle ressemble à votre certificat n'a qu'une CN et que ce dernier est pour "
9200416 arx sa cert
".En principe, vous pouvez résoudre ce problème en ayant que le nom de point à votre localhost à l'aide de votre
hosts
fichier sur votre machine de développement. Cependant, ce nom contient des espaces, il n'est même pas un nom d'hôte valide.Vous obtenez un couple d'options:
Re-générer le certificat pour l'application, de sorte qu'il utilise un bon nom d'hôte (et, si nécessaire, d'adapter votre
hosts
fichier). C'est peut-être juste une erreur lorsqu'il a été mis en place. Peut-être quelqu'un juste rempli de ce nom avec des espaces, sans s'en rendre compte, il serait utilisé comme ça dans les cert (OpenSSL parfois l'appelle "Votre Nom", par exemple).Une mauvaise option serait de modifier votre application pour ignorer nom d'hôte de validation. C'est une mauvaise option, car cela laisse votre code ouvert aux attaques de type MITM. Bien sûr, cette peine questions à partir de localhost localhost, mais c'est le genre de code qui reste dans le code. Parce qu'il permettra d'éviter une erreur (qui autrement serait une erreur) de se produire, il est probable que la suppression de ce de code de production sera oublié. Même dans des endroits avec de bonnes pratiques de développement, il est facile de rater. C'est une mauvaise option (juste pour insister sur ce point).
Un peu plus de la variante de ce serait d'avoir un nom d'hôte personnalisé vérificateur vérifie que le nom qu'il trouve est le nom que vous savez être dans le certificat.
OriginalL'auteur Bruno