将自定义SSL证书添加到TrustStore,但保留Java 8 中的默认Cacerts



Java中是否有办法指定其他TrustStore,但是如果在指定的TrustStores中找不到匹配的证书,则将Java默认为CACERTS?我希望能够使用一些我在多个应用程序中需要的基本证书创建一个信托基地,而不必单独更新每个JRE的Cacerts文件。

我意识到我只能扩展cacerts文件(即:复制并添加到它(,但是我宁愿只有一个中央信托基地,只有我的其他证书。

我确实发现了这个问题已经问过,但是已经有几年了,我不知道Java 7、8或9是否已经解决了此问题。

我发现的所有文档都指向使用javax.net.ssl.trustStore并将其指向我的新信托店,但这会忽略我的cacerts中的所有内容。

如果我用 javax.net.ssl.keyStore指向我的密钥库,那么我将无法具有特定于应用程序的密钥库。

理想情况下,我希望能够为Java创建一个迭代的TrustStores列表。

Java 7 ?

中是否存在此事

我在这里回答了一个类似的问题:使用java中的自定义信托店以及默认一个

这是可能的,请参见下面的示例设置,使用我维护的github -sslcontext -kickstart库。

import nl.altindag.sslcontext.SSLFactory;
import javax.net.ssl.SSLContext;
import java.security.cert.X509Certificate;
import java.util.List;
public class App {
    public static void main(String[] args) {
        String trustStorePathOne = ...;
        String trustStorePathTwo = ...;
        char[] password = "password".toCharArray();

        SSLFactory sslFactory = SSLFactory.builder()
                .withDefaultTrustMaterial() // uses JDK trust store
                .withTrustMaterial(trustStorePathOne, password)
                .withTrustMaterial(trustStorePathTwo, password)
                .build();
        SSLContext sslContext = sslFactory.getSslContext();
        List<X509Certificate> trustedCertificates = sslFactory.getTrustedCertificates();
    }
}

基本上,它将从每个信托店创建一个信托管理员,它将将所有信托管理员包装成一个委派的Trustmanager,该委员会将验证对所有Tructmanagers的证书

最新更新