【发布时间】:2019-05-22 12:56:18
【问题描述】:
我的应用程序中有不同的服务使用 SSL,这些服务使用不同的 .p12 文件来连接不同的密码。现在 java 在每次调用时加载信任库和密钥库 + 文件,所以我想删除此行为并将证书默认添加到我的 JVM,这是我可以使用的
-Djavax.net.ssl.keyStore="{mycert.p12}" -Djavax.net.ssl.keyStorePassword={mypassword} -Djavax.net.ssl.keyStoreType=PKCS12 -Djavax.net.ssl.trustStore="{cacertsroute}" -Djavax.net.ssl.trustStorePassword=changeit
但是我有不同的 p12 文件,所以我需要将它们连接到一个文件中,因为我无法指定 jvm 在命令行中使用多个 p12 文件和密码。
我创建了一个空的新 p12 文件,并使用 keytool 在其中添加了一个 p12 文件
keytool -importkeystore -srckeystore first.p12 -srcstoretype pkcs12 -srcstorepass firstp12pass -destkeystore newstore.p12 -deststoretype pkcs12 -deststorepass firstp12pass
之后,我有了一个只有一个 p12 的新密钥库,它可以与使用 first.p12 证书的服务一起使用。我读到密钥库和 p12 应该具有相同的密码,因此为了添加第二个 p12 文件,我创建了一个 temp.p12 文件,将 second.p12 的密码更改为 firstp12pass,所以现在它们具有相同的密码,然后我使用与以前相同的命令将 temp.p12(即 second.p12)添加到 newstore.p12。
现在我只有 1 个文件,其中包含不同服务的两个条目,但是当我使用证书时,现在无法正常工作。
我调试了ssl调用,好像CN不行。当我使用只有一个条目的 p12 调用时,它会将正确的 CN 发送到服务器,但是当我使用 2 个条目时,它不会选择正确的 CN。
有人可以帮我解决这个问题吗?也许无法混合文件,或者有其他方法可以做到这一点。
谢谢,
【问题讨论】:
-
为什么不对不同的服务使用不同的 SSLContexts?每个都有自己的密钥库。
-
因为这个想法是避免使用更多的 java 代码并停止在每个请求上加载文件。我可以在不加载 java 中的密钥库的情况下指定 SSLContexts 吗?
-
不需要每次都加载文件。您只需使用给定的信任库/密钥库初始化 SSLContext 一次,然后重用此 SSLContext 提供的 SocketFactory。
标签: java ssl jvm certificate aem