Java - путь к trustStore - установить свойство не работает? - PullRequest
47 голосов
/ 26 января 2010

Я настроил самозаверяющий сертификат для тестирования ssl-java-соединения - однако он отказывается найти java trustStore. Я сохранил его копии в / Java / jre6 / lib / security в дополнение к папке, в которую скомпилированы классы (я использую netbeans), а также в / java / jre6 / bin кажется, ничего из вышеперечисленного не работает, потому что когда я запускаю следующее - 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);
        }
    }
}

как правильно указать путь?

********** ************ UPDATE Использование метода getFile () и некоторых других отладочных данных:

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

пробег: java.lang.NullPointerException путь к классу: C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ build \ classes; C: \ Users \ Main \ Documents \ NetBeansProjects \ sslTest \ src на ssltest.Main.main (Main.java:15) javax.net.ssl.trustStore не определен СТРОИТЬ УСПЕШНО (общее время: 0 секунд)

Ответы [ 4 ]

63 голосов
/ 26 января 2010

У вас есть опечатка - это trustStore.

Помимо установки переменных с помощью System.setProperty(..), вы также можете использовать

-Djavax.net.ssl.keyStore=path/to/keystore.jks
44 голосов
/ 26 января 2010

Похоже, у вас есть опечатка - "trustStrore" должно быть "trustStore", т.е.

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

должно быть:

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
11 голосов
/ 12 сентября 2013

Оба

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

и

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

делай то же самое и без разницы, работая мудро. В твоем случае у тебя просто опечатка. Вы ошиблись trustStore в javax.net.ssl.trustStore.

1 голос
/ 18 июня 2019

В качестве альтернативы, если использование javax.net.ssl.trustStore для указания местоположения хранилища доверенных сертификатов не работает (как это было в моем случае для двусторонней аутентификации), вы также можете использовать SSLContextBuilder, как показано в примере ниже. В этом примере также показано, как создать httpclient, чтобы показать, как будет работать построитель 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();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...