我有两个应用程序在同一个java虚拟机中运行,并且都使用不同的密钥库和信任库.
一个可行的选择是使用单个密钥库并将所有其他密钥库导入共享密钥库(例如keytool -import),但如果我可以为在同一个jvm中运行的单独应用程序使用单独的密钥库,它将真正有助于我的要求.
我可以将keystore和truststore设置为jvm参数或系统属性,如下所示:
java -Djavax.net.ssl.keyStore=serverKeys
-Djavax.net.ssl.keyStorePassword=password
-Djavax.net.ssl.trustStore=serverTrust
-Djavax.net.ssl.trustStorePassword=password SSLApplication
Run Code Online (Sandbox Code Playgroud)
要么
System.setProperty("javax.net.ssl.keyStore","serverKeys")
Run Code Online (Sandbox Code Playgroud)
但是这种方法的问题在于它指定了要在JVM级别使用的密钥库/信任库,因此在同一JVM中运行的所有应用程序都获得相同的密钥库/信任库.
我还尝试创建自定义SSLContext并将其设置为默认值,但它还为在同一JVM中运行的所有应用程序设置上下文.
SSLContext context = SSLContext.getInstance("SSL");
context.init(kms, tms, null);
SSLContext.setDefault(context);
Run Code Online (Sandbox Code Playgroud)
我希望能够使用不同的密钥库/信任库而无需修改单个应用程序代码.
除了jre中的默认密钥库/证书之外,还可以动态注册多个密钥库的解决方案非常棒.
解决方案将以这种方式工作:
请让我知道您的想法或解决方案.提前致谢!