使用 keytool 更改密码时从 Java 密钥库中提取 PKCS12 文件

Extract PKCS12 file from Java Keystore while changing the password using keytool

我有一个 Java 密钥库:myKeystore.jks,并给定了一个别名:someAlias,我正在尝试以 p12 格式提取相应的资源,同时更改密码。

JKS 密码是 12345678,与 someAlias 密钥的密码相同。

我希望使用新密码保护我的 p12 文件:1122334455

我尝试过的:

keytool -importkeystore -srckeystore myKeystore.jks -destkeystore test.p12 -deststoretype PKCS12 -srcalias someAlias -srcstorepass 12345678 -deststorepass 1122334455

在这种情况下,test.p12 已导出,但我无法读取它,因为密码不正确或文件已损坏。

但是当我尝试这个(保持相同的密码)时:

keytool -importkeystore -srckeystore myKeystore.jks -destkeystore test.p12 -deststoretype PKCS12 -srcalias someAlias -srcstorepass 12345678 -deststorepass 12345678

我可以使用给定的密码打开我的 test.p12 文件。

P.S :我也尝试添加 -srckeypass 参数,但没有成功。

P.S 2:我正在使用 keystore explorer 5.11 打开我的商店

我错过了什么?

您只用第一个命令更改了密钥store的密码。 key 的密码仍然是 12345678。

虽然 PKCS#12 可以为 container/content 使用不同的密码,但这是个坏主意,因为大多数应用程序都假定密码相同(这就是 KeyStore Explorer 显示该错误消息的原因).

要更改密钥的密码,您必须添加 -destkeypass:

keytool -importkeystore -srckeystore myKeystore.jks -destkeystore myKeystore.p12 
-deststoretype PKCS12 -srcalias someAlias -srcstorepass 12345678 -deststorepass 
1122334455 -destkeypass 1122334455    

顺便说一句,因为 Java 8 keytool 为您的命令显示一条错误消息:

keytool error: java.lang.Exception: The destination pkcs12 keystore has different storepass and keypass. Please retry with -destkeypass specified.