我在应用程序中有使用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。
有人可以帮我吗?也许无法混合文件,或者有另一种方法可以做到这一点。
谢谢
答案 0 :(得分:0)
似乎您正在执行此操作以启用相互证书认证,而不是设置简单的HTTPS连接器。
我建议通过将证书导出为纯文本.pfx
文件并将其连接起来,将证书合并到单个.pem
中。这也可以用于手动创建证书链。
openssl pkcs12 -in example.pfx -out example.pem -nodes
BEGIN CERTIFICATE
和END CERTIFICATE
标签openssl pkcs12 -export -in example.pem -out example-concat.pfx