java临时添加CA似乎出现故障

时间:2016-01-31 00:43:51

标签: java keystore ca

由于并非所有的jvm都在他们的cacert密钥库中已经让我们加密了,我需要在运行程序时临时添加它。我的代码如下:

public void addRootCA() throws Exception {
    InputStream fis = new BufferedInputStream(this.getClassLoader().getResourceAsStream("letsencrypt.crt"));
    Certificate ca = CertificateFactory.getInstance("X.509").generateCertificate(fis);
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(null, null);
    ks.setCertificateEntry("LetsEncrypt CA", ca);
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(ks);
    SSLContext ctx = SSLContext.getInstance("TLS");
    ctx.init(null, tmf.getTrustManagers(), null);
    HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
}

它似乎确实添加了证书(它丢失的例外消失了,我在服务器端得到了响应)但似乎不再加载来自默认java密钥库的其他CA.我的代码主要来自另一个标记为正确答案的stackoverflow问题,因此我感到困惑的是它表现不正常。

其他CA没有加载的原因是什么?或者可能存在完全不同的问题?

1 个答案:

答案 0 :(得分:1)

未加载默认Java密钥库,因为您没有加载它。您正在从null加载它,从而创建一个空密钥库。您需要找到默认的Java密钥库,打开它,从中加载,然后关闭它。