PKIX chemin de bâtiment échoué dans l'application Java

J'ai été mal pendant presque une semaine pour avoir mes applications en cours d'exécution après le déplacement de mes applications de Windows 2000 vers Windows Server 2008 R2.

La procédure:

  1. Installé le JDK Java 1.7.0_25
  2. Définir une variable d'environnement système JAVA_HOME à C:\Progra~1\Java\jdk1.7.0_25\
  3. Importé le certificat dans le fichier cacerts avec keytool
  4. Veillé à ce que le certificat existe dans keytool avec -list.

J'ai essayé de répéter étape 3 avec InstallCert pour s'assurer que je n'ai pas loupé quelque chose jusqu'.

Les méthodes ci-dessus n'a pas résolu mon problème, j'ai donc essayé de le faire par programmation:

System.setProperty("javax.net.ssl.trustStore",
"C:/Progra~1/Java/jdk1.7.0_25/jre/lib/security/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

Toujours sans un peu de chance. Je suis coincé et pas tout à fait sûr de la direction pour aller à partir d'ici.

Trace de la pile:

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
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1886)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:515)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
at util.SMS.send(SMS.java:93)
at domain.ActivationSMSSenderMain.sendActivationMessagesToCustomers(ActivationSMSSenderMain.java:80)
at domain.ActivationSMSSenderMain.<init>(ActivationSMSSenderMain.java:44)
at domain.ActivationSMSSenderMain.main(ActivationSMSSenderMain.java:341)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
at sun.security.validator.Validator.validate(Validator.java:260)
at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
... 14 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
... 20 more

Mise à JOUR:

À la fois
System.out.println(System.getProperty("javax.net.ssl.trustStore"));
et
System.out.println(System.getProperty("javax.net.ssl.keyStore"));

retourne null.

  • avez-vous ajouté votre certificats intermédiaires?
  • Je ne suis pas tout à fait sûr que vous voulez dire, mais je n'ai pas touché aux certificats par défaut dans le fichier cacerts.
  • intermédiaire cert se réfère à votre cert émetteur. si votre cert émetteur n'est pas digne de confiance, votre cert est également non fiables. par exemple, pour authentifier google.com vous devrez également ajouter Google Internet de l'Autorité et de GeoTrust pour truststore.
  • Donc, si j'ouvre le Certification path dans Chrome, je vois un arbre structure Geotrust Global CA -> RapidSSL CA -> *.thedomain.com. J'ai besoin d'ajouter les deux premières aswell?
  • oui, ils sont nécessaires.
  • Le GlobalCA a déjà été ajouté, mais RapidSSL manquait. Malheureusement, il n'a pas de résoudre mon problème..
  • Pouvez-vous montrer le résultat de votre programme lorsque vous l'exécutez avec -Djavax.net.debug=all?
  • beny23, la sortie est assez longue, où dois-je inclure ce?
  • J'ai téléchargé le dump sur pastebin pastebin.com/W3Akw4M9
  • Magdaléno j'ai essayé toutes les étapes pour importer des tiers certificat dans le fichier cacerts comme vous l'avez mentionné, cependant, je reçois toujours la même Exception

InformationsquelleAutor JavaCake | 2013-08-22