将不同的p12证书添加到jvm

时间:2019-05-22 12:56:19

标签: java ssl jvm certificate aem

我在应用程序中有使用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。

现在我只有一个文件,其中包含两个用于不同服务的条目,但是当我使用证书时,现在不起作用。

我调试了ssl调用,看来CN不好。当我用只有一个条目的p12呼叫时,它将正确的CN发送到服务器,但是当我使用2个条目时,它没有选择正确的CN。

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

谢谢

1 个答案:

答案 0 :(得分:0)

似乎您正在执行此操作以启用相互证书认证,而不是设置简单的HTTPS连接器。

我建议通过将证书导出为纯文本.pfx文件并将其连接起来,将证书合并到单个.pem中。这也可以用于手动创建证书链。

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