36

我在运行 2 个或 3 个应用程序的系统中安装了一个 java。

所有应用程序都使用相同的运行时。

有没有办法为 ca 证书指定不同的密钥库,而不是 java_home/jre/lib/security 中的密钥库。也就是说,是否有一个选项可以指定加载并添加到从 java_home/jre/lib/security/cacerts 加载的证书中的“额外”密钥库?

我要避免的是每次升级盒子中的 jdk 时都必须重新导入我们的本地 ca。

4

4 回答 4

74

我认为您要指定信任库:

java -Djavax.net.ssl.trustStore=/home/gene/mycacerts ...

或者,如果您通过 JSSE 使用证书(您可能是),您可以将您的信任库复制到jssecacerts目录中$JAVA_HOME/jre/lib/security/(尽管每次安装/重新安装 JDK 时您仍然必须这样做)。Sun 的 JSSE 查找$JAVA_HOME/jre/lib/security/jssecacerts之前 的$JAVA_HOME/jre/lib/security/cacerts.

请参阅http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#X509TrustManager

于 2010-04-15T14:01:49.103 回答
18

这两个 jvm 选项都用于查找自定义信任库及其密码。

java -Djavax.net.ssl.trustStore=custompath/cacerts -Djavax.net.ssl.trustStorePassword=changeit

为了确保应用程序正在加载什么 trustStore,请添加以下参数,

-Djavax.net.debug=ssl:handshake
于 2017-11-07T09:32:36.660 回答
1

如果您的 JVM 包含多个应用程序,则默认情况下所有应用程序都将使用位于 $JAVA_HOME/jre/lib/security/ location 中的默认 cacerts 存储。但是,如果您希望应用程序使用不同的证书存储,那么您必须定义自定义证书存储并指向它。通过这种方式,您可以创建自己的 certstore。System.setProperty("javax.net.ssl.trustStore", "C:/certStore/cusomtcacerts");-- 在创建 http/https 会话之前使用此行。您也可以使用 keytool 将证书导入 cusomtcacerts。

于 2018-07-26T16:50:46.723 回答
-2

根据这个:

Java SSE 参考指南 - 定制

您可以使用系统属性:

javax.net.ssl.keyStore

喜欢:

java -Djavax.net.ssl.keyStore=youkeystore YourProgram

但!!我从未尝试过。让我知道它是否有效?

于 2010-04-15T01:13:04.560 回答