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/