我在运行 2 个或 3 个应用程序的系统中安装了一个 java。
所有应用程序都使用相同的运行时。
有没有办法为 ca 证书指定不同的密钥库,而不是 java_home/jre/lib/security 中的密钥库。也就是说,是否有一个选项可以指定加载并添加到从 java_home/jre/lib/security/cacerts 加载的证书中的“额外”密钥库?
我要避免的是每次升级盒子中的 jdk 时都必须重新导入我们的本地 ca。
我认为您要指定信任库:
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
这两个 jvm 选项都用于查找自定义信任库及其密码。
java -Djavax.net.ssl.trustStore=custompath/cacerts -Djavax.net.ssl.trustStorePassword=changeit
为了确保应用程序正在加载什么 trustStore,请添加以下参数,
-Djavax.net.debug=ssl:handshake
如果您的 JVM 包含多个应用程序,则默认情况下所有应用程序都将使用位于 $JAVA_HOME/jre/lib/security/ location 中的默认 cacerts 存储。但是,如果您希望应用程序使用不同的证书存储,那么您必须定义自定义证书存储并指向它。通过这种方式,您可以创建自己的 certstore。System.setProperty("javax.net.ssl.trustStore", "C:/certStore/cusomtcacerts");-- 在创建 http/https 会话之前使用此行。您也可以使用 keytool 将证书导入 cusomtcacerts。
根据这个:
您可以使用系统属性:
javax.net.ssl.keyStore
喜欢:
java -Djavax.net.ssl.keyStore=youkeystore YourProgram
但!!我从未尝试过。让我知道它是否有效?