给jvm添加不同的p12证书

Add different p12 certificates to jvm

我的应用程序中有不同的服务使用 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 个条目时,它 select 不是正确的。

有人可以帮我解决这个问题吗?也许无法混合文件,或者有另一种方法可以做到这一点。

谢谢,

您这样做似乎是为了启用相互证书身份验证,而不是设置简单的 HTTPS 连接器。

我建议将证书合并到一个 .pfx 中,方法是将它们都导出为纯文本 .pem 文件并将它们连接起来。这也可以用于手动创建证书链。

  1. 将 PFX 转换为 PEM(同时转换两个 PFX 文件): openssl pkcs12 -in example.pfx -out example.pem -nodes
  2. 包括 BEGIN CERTIFICATEEND CERTIFICATE 标签
  3. 将组合的 PEM 文件转换回 PFX:openssl pkcs12 -export -in example.pem -out example-concat.pfx