java - trustStore的路径 - set属性不起作用?

one*_*day 49 java ssl jsse keystore truststore

我已经设置了一个自签名证书来测试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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何正确设置路径?

**********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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

运行:java.lang.NullPointerException类路径:C:\ Users\Main\Documents\NetBeansProjects\sslTest\build\classes; ssltest.Main.main中的C:\ Users\Main\Documents\NetBeansProjects\sslTest\src(Main.java :15)javax.net.ssl.trustStore未定义BUILD SUCCESSFUL(总时间:0秒)

Boz*_*zho 68

你有一个错字 - 它是trustStore.

除了设置变量外System.setProperty(..),您还可以使用

-Djavax.net.ssl.keyStore=path/to/keystore.jks
Run Code Online (Sandbox Code Playgroud)

  • @oneAday - 我注意到你的评论说你设置了一个名为"javax.net.ssl.trustStrore"的属性.关闭......但没有雪茄. (4认同)
  • @Bozho问题不是在命令行上设置而不是在运行时 - 这只是一个错字.您不必在命令行上设置它 - 无论哪种方式都可以正常工作. (3认同)

小智 44

看起来你有一个错字 - "trustStrore"应该是"trustStore",即

System.setProperty("javax.net.ssl.trustStrore", "cacerts.jks");
Run Code Online (Sandbox Code Playgroud)

应该:

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
Run Code Online (Sandbox Code Playgroud)

  • 通过Tomcat8使用`-Djavax.net.ssl.trustStore =/home/path/to/truststore`它对我有用 (5认同)

Ani*_*kur 12

Both

-Djavax.net.ssl.trustStore=path/to/trustStore.jks
Run Code Online (Sandbox Code Playgroud)

and

System.setProperty("javax.net.ssl.trustStore", "cacerts.jks");
Run Code Online (Sandbox Code Playgroud)

do the same thing and have no difference working wise. In your case you just have a typo. You have misspelled trustStore in javax.net.ssl.trustStore.

  • 不正确,误导.trustStore是受信任服务器的公钥的客户端容器,而keyStore是私钥的容器. (5认同)
  • @peterh不正确,具有误导性。信任存储库,是客户机*或服务器*的侧面容器,用于*可信的签名者的证书。 (3认同)