web-dev-qa-db-fra.com

java - le chemin d'accès à trustStore - la propriété set ne fonctionne pas?

J'ai installé un certificat auto-signé pour tester une connexion SSL Java - toutefois, il refuse de localiser le Java trustStore. J'ai enregistré des copies de celui-ci dans/Java/jre6/lib/security en plus du dossier dans lequel les classes sont compilées (im using netbeans) et également dans/Java/jre6/bin aucun des éléments ci-dessus ne semble fonctionner, car lorsque j’exécute - trustStore = null.

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?

********** UPDATE ************ Utilisation de la méthode getFile () et de quelques données de débogage supplémentaires:

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 de classe Java.lang.NullPointerException: C:\Utilisateurs\Main\Documents\NetBeansProjects\sslTest\build\classes; C:\Utilisateurs\Main\Documents\NetBeansProjects\sslTest\src à ssltest.Main.main (Main.Java : 15) javax.net.ssl.trustStore n'est pas défini BUILD SUCCESSFUL (durée totale: 0 secondes)

48
oneAday

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

En plus de définir les variables avec System.setProperty(..), vous pouvez également utiliser

-Djavax.net.ssl.keyStore=path/to/keystore.jks
64
Bozho

On dirait que vous avez une faute de frappe - "trustStrore" devrait être "trustStore", c'est-à-dire.

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

devrait être:

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

Tous les deux

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

et

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

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

11
Aniket Thakur

Sinon, si vous utilisez javax.net.ssl.trustStore pour spécifier l'emplacement de votre fichier de clés certifiées ne fonctionne pas (comme dans mon cas pour l'authentification bidirectionnelle), vous pouvez également utiliser SSLContextBuilder comme indiqué dans l'exemple ci-dessous. Cet exemple explique également comment créer un client http afin de montrer le fonctionnement du générateur SSL.

SSLContextBuilder sslcontextbuilder = SSLContexts.custom();

sslcontextbuilder.loadTrustMaterial(
            new File("C:\\path to\\truststore.jks"), //path to jks file
            "password".toCharArray(), //enters in the truststore password for use
            new TrustSelfSignedStrategy() //will trust own CA and all self-signed certs
            );

SSLContext sslcontext = sslcontextbuilder.build(); //load trust store

SSLConnectionSocketFactory sslsockfac = new SSLConnectionSocketFactory(sslcontext,new String[] { "TLSv1" },null,SSLConnectionSocketFactory.getDefaultHostnameVerifier());

CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsockfac).build(); //sets up a httpclient for use with ssl socket factory 



try { 
        HttpGet httpget = new HttpGet("https://localhost:8443"); //I had a Tomcat server running on localhost which required the client to have their trust cert

        System.out.println("Executing request " + httpget.getRequestLine());

        CloseableHttpResponse response = httpclient.execute(httpget);
        try {
            HttpEntity entity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());

            EntityUtils.consume(entity);
        } finally {
            response.close();
        }
    } finally {
        httpclient.close();
    }
1
J Medeiros