java - 如何仅在运行时从类路径嵌入 keystore 证书?

标签 java certificate keystore

我有一个应连接到 https 网络服务的应用程序。

网络服务提供了一个包含以下 3 个文件的 zip 文件:*.crt、*.csr、*.key

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

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

我的首选方法是不将它们安装到本地 java keystore ,而是在应用程序启动期间动态加载它们。

最佳答案

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

// 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);
}

关于java - 如何仅在运行时从类路径嵌入 keystore 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35847703/

相关文章:

java - 将重复值从一个 ArrayList 移动到另一个 ArrayList (Java)

tomcat - 如何使用 Tomcat 7 配置 JNDI 领域以进行 PKI 用户证书身份验证?

flutter - 未找到用于签名配置 'release' 的 keystore

java - 仅当 jar 已签名时才允许运行

java - 将 long[] 更改为 Set。错误消息 : The method addAll in the type Collections is not applicable for the arguments (Set<Long>, 长[])

java - 为什么这个java代码不能使用逃逸分析?

java - 选择更新时 quartz 阻塞

ios - Xcode 代码签名(失败)警告 : App Store rejected?

Java 如何 - 使用 SSL 的 Spring Caucho Hessian 客户端

java keystore 文件限制