小编Raz*_*Raz的帖子

在JVM中注册多个密钥库

我有两个应用程序在同一个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中的默认密钥库/证书之外,还可以动态注册多个密钥库的解决方案非常棒.

解决方案将以这种方式工作:

  • 当JVM引导时,它会从jre/certs文件夹加载所有默认证书/密钥库(未指定密钥库时的默认java行为).
  • 当App 1加载时,它会注册其密钥库,
  • 然后当App 2加载时,它会注册其密钥库...

请让我知道您的想法或解决方案.提前致谢!

java ssl jvm cryptography jsse

49
推荐指数
2
解决办法
6万
查看次数

标签 统计

cryptography ×1

java ×1

jsse ×1

jvm ×1

ssl ×1