2010-01-26 16 views
31

J'ai configuré un certificat auto-signé pour tester une connexion ssl java, mais il refuse de localiser le trustStore java. J'en ai sauvegardé des copies dans/Java/jre6/lib/security en plus du dossier où les classes sont compilées (im en utilisant netbeans) et aussi/java/jre6/bin rien de ce qui précède ne semble fonctionner, parce que quand je cours ce qui suit - trustStore = null.java - chemin vers trustStore - la propriété set ne fonctionne pas?

public class ShowTrustStore { 

    public static void main(String[] args) { 

     System.setProperty("javax.net.ssl.keyStore", "keystore.jks"); 
     System.setProperty("javax.net.ssl.trustStrore", "cacerts.jks"); 
     System.setProperty("javax.net.ssl.keyStorePassword", "changeit"); 



     String trustStore = System.getProperty("javax.net.ssl.trustStore"); 
     if (trustStore == null) { 
      System.out.println("javax.net.ssl.trustStore is not defined"); 
     } else { 
      System.out.println("javax.net.ssl.trustStore = " + trustStore); 
     } 
    } 
} 

comment définir le chemin correctement?

********** MISE À JOUR ************ En utilisant la méthode getFile() et sur les données de débogage:

package ssltest; 

public class Main { 

    public static void main(String[] args) { 

//  System.setProperty("javax.net.ssl.keyStore", "/keystore.jks"); 
//  System.setProperty("javax.net.ssl.trustStrore", "/java.home/cacerts.jks"); 
//  System.setProperty("javax.net.ssl.keyStorePassword", "changeit"); 
//  System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); 

     try { 
      Main.class.getResource("trustStore.jks").getFile(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     String trustStore = System.getProperty("javax.net.ssl.trustStore"); 

     if (trustStore == null) { 
      String storeLoc; 
      storeLoc = System.getProperty("java.class.path"); 
      System.out.println("classpath: " + storeLoc); 
     } 

     trustStore = System.getProperty("javax.net.ssl.trustStore"); 
     if (trustStore == null) { 
      System.out.println("javax.net.ssl.trustStore is not defined"); 
     } else { 
      System.out.println("javax.net.ssl.trustStore = " + trustStore); 
     } 
    } 
} 

run: chemin_classe: C: \ Utilisateurs \ Main \ Documents \ NetBeansProjects \ sslTest \ build \ classes; : 15) javax.net.ssl.trustStore n'est pas défini BUILD SUCCESSFUL (temps total: 0 secondes)

+0

voir ma mise à jour – Bozho

+0

fonctionne! Merci beaucoup! – oneAday

+0

Bon à savoir que je ne suis pas le seul à chercher une heure de bug pendant une heure ... à cause d'une petite faute de frappe ... ;-) – Steffen

Répondre

47

Vous avez une faute de frappe - c'est trustStore.

Outre le paramétrage des variables avec System.setProperty(..), vous pouvez également utiliser

-Djavax.net.ssl.keyStore=path/to/keystore.jks 
+0

je ne sais pas quoi d'autre je peux essayer - j'ai la valeur java.home comme C: \ Program Files (x86) \ Java \ jdk1.6.0_17 \ jre maintenant même si je stocke les deux fichiers ici et exécutez ceci: System.setProperty ("javax.net.ssl.keyStore", "/ java .home/keystore.jks "); System.setProperty ("javax.net.ssl.trustStrore", "/java.home/cacerts.jks"); il ne les trouve toujours pas ... – oneAday

+0

java.home n'est pas résolu en tant que chemin. Vous pouvez l'obtenir via System.getProperty ("java.home"), mais il est déconseillé d'y mettre le keystore. D'ailleurs, je vous ai donné trois options - essayez-les. – Bozho

+0

J'ai essayé d'utiliser les deux - le premier ne fonctionne pas et la seconde méthode renvoie une exception de pointeur nul - ive a ajouté le code et les informations de débogage ci-dessus. Ive stocké les fichiers à ces deux endroits (qui apparaissent comme le chemin de classe): C: \ Utilisateurs \ Main \ Documents \ NetBeansProjects src des idées ce qui va mal? merci !! – oneAday

37

On dirait que vous avez une faute de frappe - "trustStrore" devrait être "trustStore", à savoir

System.setProperty("javax.net.ssl.trustStrore", "cacerts.jks"); 

devrait être :

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks"); 
+0

Cette action a été effectuée? Je me demande si j'ai besoin d'utiliser le -Djavax.net.ssl ​​.... choses – simgineer

+3

Cela a fonctionné pour moi en utilisant '-Djavax.net.ssl.trustStore =/home/chemin/vers/truststore' avec Tomcat8 – Goot

5

deux

-Djavax.net.ssl.trustStore=path/to/trustStore.jks 

et

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks"); 

faire la même chose et ont pas de différence de travail sage. Dans votre cas, vous avez juste une faute de frappe. Vous avez mal orthographié trustStore dans javax.net.ssl.trustStore.

+3

Pas vrai, trompeur. Un trustStore est un conteneur client pour les clés publiques des serveurs de confiance, tandis que keyStore est un conteneur de vos clés privées. – peterh

+1

@peterh Pas vrai, trompeur. Un truststore est un conteneur côté client * ou serveur * pour * certificats * de signataires de confiance. – EJP