Java中与平台无关的信任存储路径

时间:2014-01-08 04:46:07

标签: java android keystore

我正在尝试用Java加载系统信任库。问题是我的代码将在库中发布,将由Android,Windows,Linux和OSX的应用程序使用,并且cacerts文件的位置在每个系统上都不同。

这是我的代码:

        // Load the JDK's cacerts keystore file.
        String filename = System.getProperty("javax.net.ssl.trustStore");
        if (filename == null)
            filename = System.getProperty("java.home") + "/lib/security/cacerts".replace('/', File.separatorChar);
        FileInputStream is = new FileInputStream(filename);
        // Load the root certificate authorities. Despite the name, KeyStore can also hold certificates.
        KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
        // Yes this is really the password.
        String password = "changeit";
        keystore.load(is, password.toCharArray());
        // Retrieves the most-trusted CAs from keystore.
        PKIXParameters params = new PKIXParameters(keystore);

这在linux上测试时工作正常,但我认为这不适用于Android。

是否有一种简单的方法以编程方式查找系统信任存储的位置,或者我是否被明确列举了每种可能性并为每个存储路径硬编码?

1 个答案:

答案 0 :(得分:0)

致电:

KeyStore keystore = KeyStoreUtil.getCacertsKeyStore();

将返回所有系统CA可信证书,这是一种独立于平台的方式来读取您的代码文件。

备注:如果您使用空密码,您的代码将起作用:

String password = null;//"changeit";