Java 在同一JVM上设置多个truststore

Java 在同一JVM上设置多个truststore,java,ssl,keystore,truststore,jsse,Java,Ssl,Keystore,Truststore,Jsse,我有一个运行在weblogic服务器上的Java应用程序。该应用程序有两个不同的模块,它们使用SSL连接到外部web服务——比如模块A和模块B 模块A-基于Axis构建-使用信任库A Moudle B-构建在Spring ws上-使用truststore B 模块A已经存在。正在介绍模块B 我需要能够根据调用的模块在JVM中动态设置信任库 由于一些限制,我没有选择 -创建自定义密钥管理器。 -使用一个信任库 我尝试使用System.setProperty im模块B代码库设置信任库。然而,只有在

我有一个运行在weblogic服务器上的Java应用程序。该应用程序有两个不同的模块,它们使用SSL连接到外部web服务——比如模块A和模块B

模块A-基于Axis构建-使用信任库A Moudle B-构建在Spring ws上-使用truststore B

模块A已经存在。正在介绍模块B

我需要能够根据调用的模块在JVM中动态设置信任库

由于一些限制,我没有选择 -创建自定义密钥管理器。 -使用一个信任库

我尝试使用System.setProperty im模块B代码库设置信任库。然而,只有在模块B首先被调用时,它才起作用。比如说 我重新启动了JVM 然后我调用模块A—它在JVM中设置了自己的信任库 然后我调用模块B——它失败了——它没有在JVM中设置自己的信任库,即使我使用了System.setProperty方法


我是否遗漏了什么,或者只是System.setProperty没有覆盖现有的设置值。如果是这样,我的选项是什么。

您可以在运行时动态加载受信任的密钥存储

// load your key store as a stream and initialize a KeyStore
InputStream trustStream = ...    
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());    

// if your store is password protected then declare it (it can be null however)
char[] trustPassword = ...

// load the stream to your store
trustStore.load(trustStream, trustPassword);

// initialize a trust manager factory with the trusted store
TrustManagerFactory trustFactory = 
  TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());    
trustFactory.init(trustStore);

// get the trust managers from the factory
TrustManager[] trustManagers = trustFactory.getTrustManagers();

// initialize an ssl context to use these managers and set as default
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, trustManagers, null);
SSLContext.setDefault(sslContext);
请注意,因为
SSLContext.getDefault()
会返回您无法修改的默认上下文,因此您必须创建一个新上下文,初始化它,然后将此新上下文设置为默认上下文


底线是,如果愿意,您可以使用任意数量的信任库。

为什么需要两个信任库?信任库只告诉您可以信任哪些CA来对对等方进行身份验证。为什么每个模块会有所不同?请查看此信息,它可能会帮助您: