尝试将无密码的 pfx 转换为 jks 时出现错误

问题描述 投票:0回答:4

当我尝试将没有密码生成的 pfx 文件转换为 jks 时,我从 keytool 收到警告警告等消息,然后出现错误

当我对受密码保护的 pfx 执行相同操作时,一切都很好。

任何人都可以建议我能做什么!?也许是从其他格式转换或使用其他工具?

ps。我还转换为 pem,将 pem 转换为 jks,但失败了,因为它不是 x509 证书。

编辑

keytool.exe -importkeystore -srckeystore "C:\Users\rodislav.moldovan\Projects
\ceva.pfx" -srcstoretype pkcs12 -destkeystore "C:\Users\rodislav.mol
dovan\Projects\ceva.jks" -deststoretype JKS
Enter destination keystore password: ******
Re-enter new password: ******
Enter source keystore password: // pressed enter, because there is no pass

*****************  WARNING WARNING WARNING  *****************
* The integrity of the information stored in the srckeystore*
* has NOT been verified!  In order to verify its integrity, *
* you must provide the srckeystore password.                *
*****************  WARNING WARNING WARNING  *****************

keytool error: java.security.UnrecoverableKeyException: Get Key failed: null
x509 keytool pem pfx jks
4个回答
6
投票

您可以先使用 OpenSSL 制作 p12 密钥库,然后使用 Keytool 将其转换为 JKS 格式。

用于 CER 和 PVK 文件的 OpenSSL > P12

openssl pkcs12 -export -name servercert -in selfsignedcert.crt -inkey serverprivatekey.key -out myp12keystore.p12

p12 的 Keytool > JKS

keytool -importkeystore -destkeystore mykeystore.jks -srckeystore myp12keystore.p12 -srcstoretype pkcs12 -alias servercert


1
投票

如果您只有一个不受密码保护的完整 PFX 文件;例如,您从 Azure Key Vault 下载了证书,如下所示:

az keyvault secret download -f mycert.pfx --encoding base64 --vault-name <vault name> --name <certificate name>

然后您可以跳过一些步骤来添加密码保护(从这里获取:http://www.1st-setup.nl/wordpress/howto-change-password-on-pfx-certificate-using-openssl/ ):

openssl pkcs12 -in mycert.pfx -out temppem.pem -nodes
openssl pkcs12 -export -out protectedcert.pfx -in temppem.pem
rm certs/mycert.pfx
rm certs/temppem.pem

显然,您需要在第二个 openssl 命令中指定密码来对新 PFX 进行密码保护。


0
投票

导出没有导出密码的 PKCS#12 文件?中解释说,在这种情况下,您很可能正在处理空字符串作为 PKCS#12 文件的密码。

在所有已知版本的 OpenJDK/Keytool 中,不可能使用此类文件来执行以下操作:使用

keytool -importkeystore
功能。

如果您只有一个不受密码保护的 PKCS#12 文件(带有

.p12
.pfx
扩展名)文件(空字符串),那么您基本上应该需要生成具有相同内容的 PKCS#12,但现在带有密码非空。

以下命令基于:http://www.1st-setup.nl/wordpress/howto-change-password-on-pfx-certificate-using-openssl

#Display information/confirm that indeed you have PKCS#12 with empty string password
#You need to press 'enter' at `Enter Import Password` as this is file with empty string as password)
#Private key information
openssl pkcs12 -info -in mycert.pfx -nodes -nocerts
#Certificate
openssl pkcs12 -info -in mycert.pfx -nokeys
#CA
openssl pkcs12 -info -in mycert.pfx -nokeys -cacerts

#Export private key, certificate and, optionally CA certificate(s)
openssl pkcs12 -in mycert.pfx -out temppem.pem -nodes
openssl pkcs12 -in mycert.pfx -out tempcert.pem -nokeys
#openssl pkcs12 -in mycert.pfx -out tempcacerts.pem -nokeys -cacerts

#Now create new PKCS#2, make sure to specify a password once prompted, `Enter Export Password`. For example `**test**`
openssl pkcs12 -export -in tempcert.pem -inkey temppem.pem -out protectedcert.pfx
#Now create 
#Check if you need `JKS` store or, by default in newer OpenJDK versions, PKCS12
#and check that Keystore pass corresponds to your requirements
keytool -importkeystore -destkeystore mykeystore.jks -srckeystore protectedcert.pfx -srcstoretype pkcs12 -srcstorepass **testpass123** -deststoretype JKS -deststorepass **testkeystorepass**

#Delete temporary files
rm temppem.pem
rm temppem.pem

#Test new PKCS#12 file. It might be that you don't need the original PKCS#12 after you tested Java keystore
rm mycert.pfx

-1
投票

尝试将其转换为之前带有密码的p12。

openssl pkcs12 -in in.pfx -out out.p12

© www.soinside.com 2019 - 2024. All rights reserved.