有没有办法加载不同于java_home / jre / lib / security文件夹中指定的cacerts?

时间:2010-04-15 00:58:31

标签: java security ssl jsse

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

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

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

我想避免的是每次升级框中的jdk时都必须重新导入本地ca.

4 个答案:

答案 0 :(得分:55)

我认为您要指定信任库:

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

答案 1 :(得分:7)

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

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

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

-Djavax.net.debug=ssl:handshake

答案 2 :(得分:0)

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

答案 3 :(得分:-3)

根据这个:

Java SSE Referece Guide - Customization

您可以使用系统属性:

javax.net.ssl.keyStore

喜欢:

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

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