javax.net.ssl.trustStore 是否覆盖或添加到 cacerts

有点证书菜鸟,我很难找到有关设置 javax.net.ssl.trustStore 是否添加或覆盖默认 JDK cacerts 的详细信息?

我的应用程序正在使用:

-Djavax.net.ssl.trustStore=my-truststore.jks

并为 AWS S3 设置一个客户端(默认,没有明确告诉它使用任何特定的证书):

<bean name="s3Client" class="com.amazonaws.services.s3.AmazonS3ClientBuilder"
    factory-method="defaultClient">
</bean>

如果 javax.net.ssl.trustStore 添加到默认的 JDK cacerts,那么我应该没问题,因为我相信它已经包含我需要的证书,但 my-truststore 没有。 (AWS CA 已添加到 jdk: https://bugs.openjdk.java.net/browse/JDK-8233223

stack overflow Does javax.net.ssl.trustStore override or add to cacerts
原文答案
author avatar

接受的答案

如果 javax.net.ssl.trustStore 指定了自定义信任库,则不会使用默认信任库(默认 JDK cacerts)。

不确定术语“覆盖”在此处是否正确 100%。默认的 JDK cacerts 仍然存在,您不更新它或其他东西。但是使用了您的自定义。

我会说不建议您修改默认的信任存储,因为它是随您的 JVM 一起提供的,并且会随它一起更新。

相反,您可以制作一个副本并将您的证书添加到副本中,并将该副本设置为自定义副本(使用 javax.net.ssl.trustStore )。

例如:

1.复制默认的(简单复制文件)

2.使用keytool在副本中添加一些特定的证书

 ```
keytool -import -file /path/to/certificate.pem -alias NameYouWantToGiveOfYourCertificate -keystore /path/to/copy/of/default/truststore.jks -storepass changeit

``` 

这只是一个例子。您可能想使用其他工具,但希望这个想法很清楚:)


答案: