330 votes

Java : sun.security.provider.certpath.SunCertPathBuilderException : impossible de trouver le chemin d’accès de certification valide pour cible demandé

J’ai ici une classe qui va télécharger un fichier depuis un serveur https . Quand je le lance, il renvoie un grand nombre d’erreur. Il semble que j’ai un problème avec mon certificat. Est-il possible d’ignorer l’authentification du client-serveur ? Dans l’affirmative, comment ? Merci beaucoup.

Erreurs :

261voto

Maxim Mazin Points 824

Le problème apparaît lorsque votre serveur dispose d'un certificat auto-signé. Pour contourner ce problème, vous pouvez ajouter ce certificat à la liste des certificats approuvés de votre JVM.

Dans cet article, l'auteur décrit comment récupérer le certificat à partir de votre navigateur et l'ajouter au fichier cacerts de votre JVM. Vous pouvez soit éditer JAVA_HOME/lib/security/cacerts le fichier ou vous pouvez exécuter l'application avec -Djavax.net.ssl.trustStore paramètre.

Voir aussi: Comment sont-certificat SSL du serveur de noms résolus/puis-je ajouter d'autres noms à l'aide de keytool? Si vous exécutez en java.security.cert.CertificateException: No name matching localhost found d'exception.

174voto

Ici est fiable, ce qui fonctionne pour moi sur OSX. Veillez à remplacer exemple.com et 443 avec le véritable nom d’hôte et le port que vous essayez de vous connecter à et de donner un alias personnalisé.

54voto

J'ai eu le même problème avec la validation de la signature de certificat générique de symantec.

D'abord essayez de lancer votre application java avec -Djavax.net.debug=SSL pour voir ce qui se passe vraiment.

J'ai fini par importer le certificat intermédiaire qui était à l'origine du cert de la chaîne de pause.

J'ai téléchargé les intermédiaires manquants cert de symantec (vous pouvez voir le lien de téléchargement de l'absence d'une cert dans le handshake ssl journal: http://svrintl-g3-aia.verisign.com/SVRIntlG3.cer dans mon cas).

Et j'ai importé le cert dans le keystore java. Après l'importation, le certificat intermédiaire de mon wildcard ssl cert enfin commencé à travailler:

keytool -import -keystore ../jre/lib/security/cacerts -trustcacerts -alias "VeriSign Class 3 International Server CA - G3" -file /pathto/SVRIntlG3.cer

17voto

Nishant Points 22758

Citant Pas plus "impossible de trouver le chemin de certification valide de demande de cible"

lorsque vous essayez d'ouvrir une connexion SSL à un hôte à l'aide de JSSE. Ce que cela signifie en général que le serveur utilise un certificat de test (éventuellement générées à l'aide de keytool) plutôt que d'un certificat à partir d'une bien connue Autorité de Certification commerciale, telle que Verisign ou GoDaddy. Les navigateurs Web d'affichage de boîtes de dialogue d'avertissement dans ce cas, mais depuis JSSE ne peut pas assumer un utilisateur interactif est juste déclenche une exception par défaut.

La validation de certificat est une partie très importante de la sécurité SSL, mais je n'écris pas cette entrée à expliquer les détails. Si vous êtes intéressé, vous pouvez commencer par lire le Wikipedia de blurb. Je suis en train d'écrire ce billet pour une simple façon de parler pour que l'hôte avec le certificat de test, si vous le voulez vraiment.

Fondamentalement, vous voulez ajouter le certificat du serveur pour le fichier de clés avec vos certificats approuvés

Essayez le code fourni. Cela pourrait aider.

6voto

Jonas Bergström Points 128

J’ai pu faire fonctionner avec le code uniquement, c'est-à-dire sans devoir utiliser keytool :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X