java - 将自定义 SSL 证书添加到信任库但保留 Java 8+ 中的默认 cacerts?

标签 java ssl truststore

Java 中有没有办法指定额外的信任库,但如果在指定的信任库中找不到匹配的证书,Java 是否默认使用 cacerts?我希望能够创建一个信任库,其中包含一些我在多个应用程序中需要的基本证书,但不必单独更新每个 jre 的 cacerts 文件。

我意识到我可以扩展 cacerts 文件(即:复制它并添加到它),但我宁愿拥有一个仅包含我的附加证书的中央信任库。

我确实找到了这个 question already asked ,但它已经有好几年的历史了,我不知道 Java 7、8 或 9 从那以后是否以不同的方式解决了这个问题。

我找到的所有文档都指向使用 javax.net.ssl.trustStore并将其指向我的新信任库,但这将忽略我的 cacerts 中的所有内容。

如果我用 javax.net.ssl.keyStore 指向我的 keystore ,那么我就不能拥有特定于应用程序的 keystore 。

理想情况下,我希望能够为 java 创建一个信任库列表以进行迭代。

这在 Java 7+ 中是否存在?

最佳答案

我在这里回答了一个类似的问题:Using a custom truststore in java as well as the default one
有可能,请参阅下面的示例设置 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();
    }

}
基本上,它的作用是从每个 TrustStore 创建一个 TrustManager,并将所有 TrustManager 包装到 delegating TrustManager 中。这将针对所有 TrustManagers 验证对方的证书

关于java - 将自定义 SSL 证书添加到信任库但保留 Java 8+ 中的默认 cacerts?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43594618/

相关文章:

java - Play Framework Cache Api 注入(inject)在单例中返回空指针异常

java - 从 JSNI 调用 Java 方法

java - 如何在java中解析UTC时间戳并转换为另一种格式

ssl - 带有 SSL 的 IIS 7.5 站点失败,没有 SSL 的站点可以正常工作

authentication - 如何在 Elixir 中的进程之间建立经过身份验证的链接?

java - ANT 将 javax.net.ssl.trustStore 传递给 "compilerarg"或将其用作 "sysproperty"

java - 如何动态更新信任库?

python - 如何使用信任库文件和密码让 KafkaConsumer 在 python 中获取主题内容?

java - 如何安全地存储外部服务的凭据

apache-spark - 无法使用 Kafka-Spark 集成找到 Set([topic,0]) 的领导者