我有一个应该连接到https webservice的应用程序.
webservice提供一个包含以下3个文件的zip文件:* .crt,* .csr,* .key
问题:我可以将它们放入应用程序jar的类路径中,然后仅在启动时加载cert(可能在自动创建的密钥库/信任库中)?
或者,在我可以使用我的app客户端之前,我是否必须将它们安装到每台机器上的java密钥库中?
我首选的方法是不将它们安装到本地java密钥库,而是在应用程序启动期间即时加载它们.
解决方法:
我发现它实际上也是可能的,也来自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);
}