我正在与启用 ssl 的服务器建立 SSL 连接。我的硬件文件系统 java 密钥库中有一个 cacerts 文件,我使用 keytool 从中提取了证书,我正在提供此证书文件以创建 SSLSocketfactory 以建立 ssl 连接,它适用于下面的代码片段。
我想知道如何直接访问 cacerts ( java keystore ) 文件,然后选择证书并建立 ssl 连接。现在,我正在使用我的 jar 文件将提取的证书打包到类路径中,这不是一个好习惯,因为我希望它从密钥库中加载。
下面是我当前如何创建 SSLSocketFactory 的工作代码片段。
private SSLSocketFactory createSSLFactory() {
KeyStore keyStore = null;
TrustManagerFactory tmf = null;
SSLContext ctx = null;
try {
keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream is = null;
is = SSLConnection.class.getResourceAsStream("/" + "my-keystore");
keyStore.load(is, "changeit".toCharArray());
tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
ctx = SSLContext.getInstance("TLSv1");
ctx.init(null, tmf.getTrustManagers(), null);
SSLSocketFactory factory = ctx.getSocketFactory();
return factory;
} catch (Exception e) {
// exception handling
}
return null;
}