在运行时更改密钥库和信任库

Dan*_*Dan 13 java web-services runtime keystore

我正在使用一个使用https Web服务的客户端(使用JAX-WS RI创建的客户端代码).服务器需要用户身份验证,提供不同的PKCS12文件.当我的客户端启动时,我按如下方式设置密钥库和信任库:

System.setProperty("javax.net.ssl.keyStore",fileKeystore);
System.setProperty("javax.net.ssl.keyStorePassword",pwdKeystore);
System.setProperty("javax.net.ssl.keyStoreType","PKCS12");

System.setProperty("javax.net.ssl.trustStore",fileTruststore);
System.setProperty("javax.net.ssl.trustStorePassword",pwdTruststore);
System.setProperty("javax.net.ssl.trustStoreType","JKS");
Run Code Online (Sandbox Code Playgroud)

然后我使用WS,并且所有工作:

string result = myClient.WSMethod(...);
Run Code Online (Sandbox Code Playgroud)

我知道这些系统属性一旦设置就无法以相同的方式更改.因此,如果我需要更改密钥库以使用webservice,而不重新启动我的服务器,作为另一个用户,我该怎么办?

换句话说,我会实现这种行为:

  1. 使用用户#1的密钥库/信任库来使用WS
  2. 使用用户#2的密钥库/信任库来使用WS
  3. ....

在SO上搜索我读到了关于创建SSLContext但是我对如何做到并将其分配给与WS的连接有点困惑.