如何仅在运行时从类路径中嵌入密钥库证书?

mem*_*und 4 java certificate keystore

我有一个应该连接到httpsWeb服务的应用程序.

webservice提供一个包含以下3个文件的zip文件:*.crt,*.csr,*.key

问题:我可以将它们放入classpath应用程序中jar,然后仅在启动时加载证书(可能是在动态创建的自己的密钥库/信任库中)吗?

或者keystore,在我可以使用我的app客户端之前,我是否必须将它们安装到每台机器上的java中?

我首选的方法是不将它们安装到本地java密钥库,而是在应用程序启动期间即时加载它们.

mem*_*und 5

我发现它实际上也是可能的,也来自classpath:

//pass a p12 or pfx file (file may be on classpath also)
public void initSSL(String keyStoreFile, String pass) {
        InputStream keyStoreStream = this.getClass().getClassLoader().getResourceAsStream(keyStoreFile);          

            KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            KeyStore keyStore = KeyStore.getInstance("PKCS12");

            keyStore.load(keyStoreStream, keyPassword.toCharArray());
            kmf.init(keyStore, keyPassword.toCharArray());

             KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            trustStore.load(null, null);

            // init the trust manager factory by read certificates
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            tmf.init(trustStore);

            // 3. init the SSLContext using kmf and tmf above
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
            SSLContext.setDefault(sslContext);
}
Run Code Online (Sandbox Code Playgroud)