571 votes

Résolution javax.net.ssl.SSLHandshakeException : sun.security.validator.ValidatorException : immeuble chemin PKIX n’a pas d’erreur ?

J'obtiens cette erreur

message détaillé soleil.de sécurité.programme de validation.ValidatorException: PKIX chemin bâtiment a échoué:
soleil.de sécurité.fournisseur de.certpath.SunCertPathBuilderException: impossible de trouver la validité de la certification chemin d'accès à la demande de la cible

cause javax.net.le protocole ssl.SSLHandshakeException: soleil.de sécurité.programme de validation.ValidatorException: PKIX chemin de bâtiment échec: le soleil.de sécurité.fournisseur de.certpath.SunCertPathBuilderException: impossible de trouver le chemin de certification valide à la demande de la cible

j'utilise tomcat 6 en tant que serveur web. j'ai deux https webbapplication installé sur différents tomcat sur differte port, mais sur la même machine. Dire App1(port 8443) et App2(port 443). App1 se connecte à l' App2 .Lors de l' App1 se connecte à l' App2 i obtenir l'erreur ci-dessus. Je sais que c'est très commune erreur est venu à travers de nombreuses solutions sur les différents des forums et des sites. J'ai en dessous de l'entrée en server.xml de tomcat j'.e

keystoreFile="c:/.keystore" 
keystorePass="changeit"

Chaque site dit la même raison que le certificat donné par app2 n'est pas dans la confiance de magasin de app1 de la jvm. Ceci semble être vrai aussi, quand j'ai fatigué de frapper le même URL dans le navigateur IE, ça fonctionne(avec le réchauffement, Il y a un problème avec ce site web de certificat de sécurité. ici, je dis poursuivre sur ce site web), Mais quand même url est frappé par le client java(dans mon cas). Donc, je reçois l'erreur ci-dessus. Donc, pour le mettre dans le fichier de clés certifiées j'ai essayé ces options de l'arborescence des je.e

Option1

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

Option2 Le réglage ci-dessous dans la variable d'environnement

CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

Option3 Le réglage ci-dessous dans la variable d'environnement

JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

Mais rien n'a fonctionné .

Ce qui à travaillé en dernier est en cours d'exécution java approche proposée dans la Façon de gérer les certificats SSL non valides avec Apache HttpClient? par Pascal Thivent je.e l'exécution du programme InstallCert.

Mais cette approche est très bien pour devbox l'installation, mais je ne peux pas l'utiliser en environnement de production.

Je me demande pourquoi trois approches mentionnées ci-dessus ne fonctionne pas quand je l'ai mentionné mêmes valeurs en server.xml de app2 serveur et les mêmes valeurs dans truststore par la mise en

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

en app1 programme.

Pour plus d'informations c'est de cette façon que je suis en train de la connexion

URL url = new URL(urlStr);

URLConnection conn = url.openConnection();

if (conn instanceof HttpsURLConnection) {

  HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();

  conn1.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
      return true;
    }
  });

  reply.load(conn1.getInputStream());

507voto

SimonSez Points 1883

Vous devez ajouter le certificat pour App2 pour le fichier de magasin de clés de la JVM situé à l' %JAVA_HOME%\lib\security\cacerts.

D'abord, vous pouvez vérifier si votre certificat est déjà dans le fichier de clés en exécutant la commande suivante: keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" (vous n'avez pas besoin de fournir un mot de passe)

Si votre certificat est manquant, vous pouvez l'obtenir en le téléchargeant avec votre navigateur et l'ajouter au fichier de clés avec la commande suivante:

keytool -import -noprompt -trustcacerts -alias <AliasName> -file <certificate> -keystore <KeystoreFile> -storepass <Password>

Après l'importation, vous pouvez exécuter la première commande à nouveau pour vérifier si votre certificat a été ajouté.

Sun/Oracle d'informations peuvent être trouvées ici.

Espérons que cela a aidé! Amusez-Vous!

230voto

NDeveloper Points 577

javax.net.le protocole ssl.SSLHandshakeException: le soleil.de sécurité.programme de validation.ValidatorException: PKIX chemin d'accès du bâtiment a échoué: le soleil.de sécurité.fournisseur de.certpath.SunCertPathBuilderException: impossible de trouver le chemin de certification valide à la demande de la cible

• Lorsque j'ai eu l'erreur, j'ai essayé de Google le sens de l'expression et je l'ai trouvé, ce problème se produit lorsqu'un serveur changements de leurs HTTPS certificat SSL, et notre ancienne version de java ne reconnaît pas le certificat racine de l'autorité de certification (CA).

• Si vous pouvez accéder à l'URL HTTPS dans votre navigateur, puis il est possible de mettre à jour Java à reconnaître l'autorité de certification racine.

• Dans votre navigateur, accédez à l'URL HTTPS que Java n'a pas pu accéder. Cliquez sur le certificat HTTPS chaîne (il y a l'icône de verrouillage dans Internet Explorer), cliquez sur le verrou pour afficher le certificat.

• Aller dans "Détails" du certificat et de la "Copie de fichiers". Copie en Base64 (.cer) format. Il sera enregistré sur votre Bureau.

• Installer le certificat ignorer toutes les alertes.

• C'est de cette façon que j'ai rassemblé les informations de certificat de l'URL que j'essayais d'accès.

Maintenant, j'ai dû faire ma version de java à savoir sur le certificat de sorte que de plus elle ne refuse pas de reconnaître l'URL. À cet égard, je dois dire que j'ai googlé que les informations sur le certificat racine de séjours par défaut dans du JDK \jre\lib\security emplacement, et le mot de passe par défaut d'accès est: changeit.

Pour afficher le fichier cacerts informations suivantes sont les démarches à suivre:

• Cliquez sur le Bouton Démarrer-->Exécuter

• Tapez cmd. L'invite de commande s'ouvre (vous pouvez avoir besoin de l'ouvrir en tant qu'administrateur).

• Accédez à votre Java/jreX/bin annuaire

• Tapez le texte suivant

keytool -list -keystore D:\Java\jdk1.5.0_12\jre\lib\security\cacerts

Il donne la liste actuelle des certificats contenus dans le keystore. Il ressemble à quelque chose comme ceci:

C:\Documents and Settings\NeelanjanaG>keytool -list -keystore D:\Java\jdk1.5.0_12\jre\lib\security\cacerts

Entrez le mot de passe du fichier de clés: changeit

Type de magasin de clés: jks

Keystore fournisseur de: SOLEIL

Votre magasin de clés contient 44 entrées

verisignclass3g2ca, Mar 26, 2004, trustedCertEntry,

Certificat d'empreintes digitales (MD5): A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5C:E9

entrustclientca, 9 Janv., 2003, trustedCertEntry,

Certificat d'empreintes digitales (MD5): 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4

thawtepersonalbasicca, Fév 13, 1999, trustedCertEntry,

Certificat d'empreintes digitales (MD5): E6:0B:D2:C9:CA:2D:88:DB:1A:71:0E:4B:78:EB:02:41

addtrustclass1ca, le 1er Mai 2006, trustedCertEntry,

Certificat d'empreintes digitales (MD5): 1E:42:95:02:33:92:6B:B9:5F:C0:7F:DA:D6:B2:4B:FC

verisignclass2g3ca, Mar 26, 2004, trustedCertEntry,

Certificat d'empreintes digitales (MD5): F8:: C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6

• Maintenant, j'ai dû inclure précédemment installé certificat dans le fichier cacerts.

• Pour cela, voici la procédure:

keytool –import –noprompt –trustcacerts –alias ALIASNAME -fichier FILENAME_OF_THE_INSTALLED_CERTIFICATE -keystore PATH_TO_CACERTS_FILE -storepass MOT de passe

Si vous utilisez Java 7:

keytool –importcert –trustcacerts –alias ALIASNAME -fichier PATH_TO_FILENAME_OF_THE_INSTALLED_CERTIFICATE -keystore PATH_TO_CACERTS_FILE -storepass changeit

• Il faudra ensuite ajouter les informations de certificat dans le fichier cacert.

C'est la solution que j'ai trouvé pour l'Exception mentionnée ci-dessus!!

5voto

Ryan Shillington Points 558

Mon fichier cacerts était totalement vide. J’ai résolu ce problème en copiant le fichier cacerts sur ma machine windows (c'est-à-dire utilisant Oracle Java 7) et scp'd il à ma boîte Linux (OpenJDK).

et puis sur la machine linux

Il est fonctionnait très bien jusqu'à présent.

3voto

mons droid Points 160

J’ai écrit un script de stupide cmd (ligne de commande) petit win32 (Windows XP 32 bits testet) qui ressemble pour toutes les versions de java dans program files et leur ajoute une cert. Le mot de passe doit être la valeur par défaut « changeLe » ou le modifier vous-même dans le script  :-)

0voto

oraclesoon Points 29

Pour Tomcat en cours d'exécution sur le serveur Ubuntu, pour savoir quelle version de Java est utilisé, utilisez "ps -ef | grep tomcat de la commande":

Exemple:

/home/mcp01$ ps -ef |grep tomcat tomcat7 28477 1 0 10:59 ? 00:00:18 /usr/local/java/jdk1.7.0_15/bin/java -Djava.util.la journalisation.config.file=/var/lib/tomcat7/conf/enregistrement.propriétés -Djava.awt.headless=true -Xmx512m -XX:+UseConcMarkSweepGC -Djava.net.preferIPv4Stack=true -Djava.util.la journalisation.manager=org.apache.juli.ClassLoaderLogManager -Djava.approuvé.dir=/usr/share/tomcat7/approuvé -classpath /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp org.apache.catalina.de démarrage.Bootstrap commencer 1005 28567 28131 0 11:34 pts/1 00:00:00 grep --color=auto tomcat

Ensuite, nous pouvons aller dans: cd /usr/local/java/jdk1.7.0_15/jre/lib/security

Par défaut le fichier cacerts fichier se trouve ici. Insérez le certificat non approuvé.

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