当我尝试将没有密码生成的 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
您可以先使用 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
如果您只有一个不受密码保护的完整 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 进行密码保护。
在导出没有导出密码的 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
尝试将其转换为之前带有密码的p12。
openssl pkcs12 -in in.pfx -out out.p12