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

有没有办法加载不同于java_home/jre/lib/security文件夹中指定的cacerts?,java,security,ssl,jsse,Java,Security,Ssl,Jsse,我在一个运行2或3个应用程序的系统中安装了一个java 所有应用程序都使用相同的运行时 有没有一种方法可以为ca证书指定与java_home/jre/lib/security中不同的密钥库。也就是说,是否有一个选项可以指定一个“额外”密钥库,该密钥库被加载并添加到从java_home/jre/lib/security/cacerts加载的证书中 我想要避免的是每次升级包装箱中的jdk时都必须重新导入本地ca。根据以下内容: 您可以使用系统属性: javax.net.ssl.keyStore

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

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

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

我想要避免的是每次升级包装箱中的jdk时都必须重新导入本地ca。

根据以下内容:

您可以使用系统属性:

javax.net.ssl.keyStore
比如:

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

但是!!我从来没有试过。让我知道它是否有效,你愿意吗

我认为您需要指定信任库:

java -Djavax.net.ssl.trustStore=/home/gene/mycacerts ...
或者,如果您是通过JSSE使用证书(您可能是这样),您可以将您的信任库复制到
$JAVA_HOME/jre/lib/security/
目录中的
jssecacerts
(尽管每次安装/重新安装JDK时您仍然需要这样做)。Sun的JSSE在
$JAVA\u HOME/jre/lib/security/jssecacerts
之前寻找
$JAVA\u HOME/jre/lib/security/cacerts


请参见

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

java -Djavax.net.ssl.trustStore=custompath/cacerts -Djavax.net.ssl.trustStorePassword=changeit
为了确保应用程序正在加载哪个trustStore,还要添加以下参数

-Djavax.net.debug=ssl:handshake

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

我认为这不是正确的答案,尽管答案很接近。javax.net.ssl.keyStore和trustStore属性有细微的不同,OP需要的是trustStore自定义。@GregS您可能是对的。菲尼克斯,你能告诉我们你的结果吗?和/或您使用的解决方案是什么?此答案不正确。OP询问的是信任库,而不是密钥库。
cacerts
文件是信任库,而不是密钥库。它不包含任何私钥。其中任何一个都将替换cacerts。Q想“加载[]并将[]添加到”,这意味着要么将cacerts复制到jssecacerts,要么将/where/mycerts并将自定义CA添加到该副本,要么使用自定义CA创建一个文件,然后将cacerts的内容导入新文件。谢谢你的回答,这节省了我的时间。我没有在安装了JDK的C驱动器中编写的管理员权限。我将“-Djavax.net.ssl.trustStore=”添加到Tomcat Catalina中,它起了作用。您测试过这个-
System.setProperty(“javax.net.ssl.trustStore”,“C:/certStore/cusomtcacerts”)