javax.net.le protocole ssl.SSLHandshakeException: le soleil.sécurité.validateurs.ValidatorException: échec de la construction du chemin PKIX:


J'ai trois applications Web basées sur java app1,app2 et app3 en production. Tous les 3 sont vérifiés par des CA vérifiés et hébergés sur 3 serveurs Web différents et sur https. app1, app2 est vérifié par confiance sécurisée.app3 est vérifié par trustwave .

Voici la hiérarchie des certificats de certificats ,je peux voir quand je frappe l'une de ces applications via un navigateur Web.

App1,app2 certificat hirerarchy est même .e

 Entrust.net Secure Server Certification Authority---> SecureTrust CA------->*.myAppDomain.com

App3 certificat hirerarchy est

           Entrust.net Secure Server Certification Authority---> SecureTrust CA------->TrustWave Organization Validation CA, L------->*.myApp3.com

Maintenant lorsque app1 se connecte à app2, fonctionne bien. Mais quand app1 se connecte à app3 obtient en dessous de l'exception

   javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: 
   sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Maintenant, j'ai jeté un oeil sur le fichier cacert(c'est-à-dire trust store) dans jdk sur l'hébergement de serveur Web app1. J'ai essayé de trouver les entrées pour Entrust,SecureTrust, TrustWave mais j'ai trouvé uniquement des entrées comme confistevca, confist2048ca etc. Donc, si je passe par la logique que le certificat racine if (qui est Entrust pour les applications app2 et app3) se trouve dans le magasin de confiance de l'application de contact (app3), ce que je peux voir dans le fichier cacert sur app3, alors je ne devrais pas obtenir l'erreur mentionnée ci-dessus lorsque app1 essaie de contacter app3 via httpsURLConnection. Je ne comprends pas la cause de cela? je ne suis pas sûr que nous devons également inclure le trustwave , bien que le certificat racine, c'est-à-dire Entrust, authentifie déjà trustwave en interne?

Si j'ai besoin d'inclure le certificat trustwave (utilisé par app2) dans le fichier cacert sur app3, alors par cette logique, je devrais également inclure securetrust (utilisé par app2) dans le fichier cacert sur app3 mais cela fonctionne bien?

Author: M Sach, 2012-06-28

1 answers

Le truststore du client ne fait pas confiance au certificat du serveur. Il n'y avait donc aucun certificat d'autorité de certification de confiance dans le truststore du client qui correspondait à quoi que ce soit dans la chaîne de certificats fournie par le serveur. Donc, cette chaîne de certificats était incomplète. Vous devez importer tout ce que vous a été fourni par l'autorité de certification dans le magasin de clés du serveur.

 3
Author: user207421, 2012-06-28 08:50:06