CertificateException: Aucun nom correspondant ssl.someUrl.de trouvé
Je suis en train d'essayer de vous connecter à l'un de mes serveurs via le protocole ssl, avec Java. J'ai essayé beaucoup d'options ici est mon meilleur essayez:
- Je générer un jssecacerts avec le recommendet script: http://blogs.oracle.com/andreas/resource/InstallCert.java
avec la commande: java InstallCert ssl.someUrl.de changeit
après ce que j'ai fait la commande une seconde fois:
Loading KeyStore jssecacerts...
Opening connection to ssl.someUrl.de:443...
Starting SSL handshake...
No errors, certificate is already trusted
Server sent 1 certificate(s):
1 Subject EMAILADDRESS=info@plesk.com, CN=plesk, OU=Plesk, O=Parallels, L=Hernd
on, ST=Virginia, C=US
Issuer EMAILADDRESS=info@plesk.com, CN=plesk, OU=Plesk, O=Parallels, L=Hernd
on, ST=Virginia, C=US
sha1 f1 0d 2c 54 05 e1 32 19 a0 52 5e e1 81 6c a3 a5 83 0d dd 67
md5 f0 b3 be 5e 5f 6e 90 d1 bc 57 7a b2 81 ce 7d 3d
Enter certificate to add to trusted keystore or 'q' to quit: [1]
J'ai copié le fichier dans le répertoire par défaut et j'ai chargé le certificat en Java trustStore
System.setProperty("javax.net.ssl.trustStore", "C:\\Program Files (x86)\\Java\\jre6\\lib\\security\\jssecacerts");
System.setProperty("javax.net.ssl.trustStorePassword","changeit");
Alors j'essaie de me connecter
URL url = new URL("https://ssl.someUrl.de/");
URLConnection conn = url.openConnection();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Et je reçois l'Erreur sur la 3ème ligne: (Pas de nom correspondant ssl.someUrl.de trouvé)
javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching ssl.someUrl.de found
Est-ce la cause du défaut de parallels plesk panel, certificat ou autre chose de mal?
De l'installation: JRE 6.20, Netbeans 6.8, Windows7 64bit
Vous devez vous connecter pour publier un commentaire.
Il ressemble le certificat du serveur que vous tentez de vous connecter ne correspond pas à son nom d'hôte.
Lorsqu'un HTTPS client se connecte à un serveur, il vérifie que le nom d'hôte dans le certificat correspond au nom d'hôte du serveur. Il ne suffit pas d'un certificat de confiance, il doit correspondre au serveur que vous voulez parler trop. (Pour faire une analogie, même si vous faites confiance à un passeport pour être légitime, vous devez toujours vérifier que c'est bien celle de la personne à qui vous voulez parler, pas n'importe quel passeport vous confiance légitime.)
En HTTP, c'est fait en vérifiant que:
le certificat contient un DNS autre nom de l'objet (c'est une extension standard) entrée correspondant à l'hôte;
à défaut, le dernier CN de votre sujet nom unique (c'est le principal nom si vous voulez) correspond au nom d'hôte. (Voir la RFC 2818.)
Il est difficile de dire ce que l'autre nom de l'objet sans avoir le certificat (bien que, si vous vous connectez avec votre navigateur et vérifiez son contenu dans plus de détails, vous devriez être capable de le voir.)
L'objet de nom unique semble être:
(Ce serait donc besoin d'être CN=ssl.someUrl.de au lieu de CN=plesk, si vous n'avez pas un autre nom de l'objet avec DNS:ssl.someUrl.de déjà, ma conjecture est que vous n'avez pas.)
Vous pouvez être en mesure de contourner le nom d'hôte de la vérification à l'aide de HttpsURLConnection.setHostnameVerifier(..). Il ne devrait pas être trop dur à écrire un personnalisé HostnameVerifier que bybasses la vérification, bien que je suggère de le faire seulement lorsque le certificat de sa celui qui s'intéresse ici en particulier. Vous devriez être en mesure d'obtenir que l'utilisation de la SSLSession argument et son getPeerCertificates() la méthode.
(En plus, vous n'avez pas besoin de définir la javax.net.le protocole ssl.* propriétés de la façon dont vous l'avez fait, puisque vous êtes en utilisant les valeurs par défaut de toute façon.)
Alternativement, si vous avez le contrôle sur le serveur auquel vous vous connectez et de son certificat, vous pouvez créer un certificat qui correspond aux règles de nommage ci-dessus (CN devrait être suffisant, bien que l'autre nom de l'objet est une amélioration). Si un certificat auto-signé est assez bon pour ce que vous nom, assurez-vous que le nom commun (CN) est le nom d'hôte que vous essayez de parler (pas l'URL complète, juste le nom de l'hôte).
Dans Java 8, vous pouvez sauter le serveur de vérification de nom avec le code suivant:
Cependant cela doit être utilisé uniquement en développement!
J'ai créé une méthode fixUntrustCertificate(), donc quand j'ai affaire à un domaine qui n'est pas en confiance des CAs, vous pouvez appeler la méthode avant la demande. Ce code va fonctionner après java1.4. Cette méthode s'applique pour tous les hôtes:
J'ai trouvé une bonne résolution ici: http://www.mkyong.com/webservices/jax-ws/java-security-cert-certificateexception-no-name-matching-localhost-found/
Mais mon problème était un peu différent et résolu différemment.
Le service web a été sur l'hôte distant.
Par exemple: https://some.remote.host/MyWebService?wsdl
Mais il était uniquement disponible par IP pour les clients, mais le certificat a été créé pour le domaine: certains.à distance.hôte (CN=certains.à distance.de l'hôte). Et ce domaine ne peuvent pas être résolus par adresse IP, car il n'est pas présenté dans le DNS).
De sorte que le même problème est apparu: si j'utilise IP pour se connecter au service web par le protocole ssl, il ne peut pas être atteint becase certificat CN=certains.à distance.d'accueil et il n'est pas égal vers le nom d'hôte que j'ai spécifié (c'est à dire IP de l'hôte).
Je l'ai résolu en associant ce nom d'hôte IP dans le fichier /etc/hosts.
Le problème a été résolu.
Mais dans le cas où le Service Web est hébergé sur l'hôte local serveur d'application, il pense, il devrait être résolu comme mkyong décrit dans son article.
Le nom du serveur doit être le même que le prénom et le nom que vous donnez alors que la création d'un certificat
Si vous êtes à la recherche d'un Kafka erreur, ce peut-être parce que la mise à niveau de Kafka version de 1.x à 2.x.
javax.net.le protocole ssl.SSLHandshakeException: Général SSLEngine problème ... javax.net.le protocole ssl.SSLHandshakeException: Général SSLEngine problème ... java.de sécurité.cert.CertificateException: Aucun nom correspondant à *** trouvé
ou
[Le producteur clientId=producteur-1] Connexion avec le nœud -2 authentification a échoué en raison de: SSL négociation a échoué
Solution:
SslConfigs.SSL_ENDPOINT_IDENTIFICATION_ALGORITHM_CONFIG, ""