2010-01-26 14 views
31

He configurado un certificado autofirmado para probar una conexión ssl java; sin embargo, se niega a ubicar el java trustStore. He guardado copias de/Java/jre6/lib/security además de la carpeta donde están compiladas las clases (im usando netbeans) y también a/java/jre6/bin , ninguna de las anteriores parece funcionar, porque cuando ejecuto lo siguiente - trustStore = null.java - ruta de acceso a la propiedad de almacén de confianza no funciona?

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); 
     } 
    } 
} 

cómo configurar la ruta correctamente?

********** ACTUALIZACIÓN ************ Utilizando el método getFile() y un poco más de datos de depuración:

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); 
     } 
    } 
} 

de ejecución: java.lang.NullPointerException classpath: C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ build \ classes; C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ src en ssltest.Main.main (Main.java : 15) javax.net.ssl.trustStore no está definido CONSTRUIR EXITOSO (tiempo total: 0 segundos)

+0

ver mi respuesta actualizada – Bozho

+0

funciona! ¡muchas gracias! – oneAday

+0

Es bueno saber que no soy el único que busca una hora de error por hora ... debido a un pequeño error tipográfico ... ;-) – Steffen

Respuesta

47

Tiene un error tipográfico - es trustStore.

Además de establecer las variables con System.setProperty(..), también se puede utilizar

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

No estoy seguro de qué más puedo probar - He obtenido el valor de java.home como C: \ Archivos de programa (x86) \ Java \ jdk1.6.0_17 \ jre ahora incluso si guardo los dos archivos aquí y ejecuto esto: System.setProperty ("javax.net.ssl.keyStore", "/ java .home/keystore.jks "); System.setProperty ("javax.net.ssl.trustStrore", "/java.home/cacerts.jks"); todavía no los encuentra ... – oneAday

+0

java.home no se ha resuelto como una ruta de acceso. puedes obtenerlo a través de System.getProperty ("java.home"), pero no es aconsejable colocar allí el keystore. Además, te di tres opciones: pruébalas. – Bozho

+0

He intentado usar ambos - el primero no funciona y el segundo método arroja una excepción de puntero nulo - He añadido el código y la información de depuración anterior. he almacenado los archivos en ambas ubicaciones (que aparecen como classpath): C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ build \ classes; C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ src alguna idea de lo que está yendo mal? gracias !! – oneAday

37

parece que tiene un error tipográfico - "trustStrore" debe ser "trustStore", es decir

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

debe ser :

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

¿Esto funcionó? Me pregunto si necesito usar el material -Djavax.net.ssl ​​.... – simgineer

+3

Funcionó para mí usando '-Djavax.net.ssl.trustStore =/home/path/to/truststore' con Tomcat8 – Goot

5

Tanto

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

y

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

hacer lo mismo y no tienen ninguna diferencia trabajando sabia. En tu caso, solo tienes un error tipográfico. Ha escrito mal trustStore en javax.net.ssl.trustStore.

+3

No es cierto, es engañoso. Un trustStore es un contenedor al lado del cliente para las claves públicas de los servidores de confianza, mientras que KeyStore es un contenedor de sus claves privadas. – peterh

+1

@peterh No es cierto, es engañoso. Un almacén de confianza es un contenedor del lado del cliente * o del servidor * para * certificados * de firmantes de confianza. – EJP

Cuestiones relacionadas