我正在安装一个需要 Java(两个受支持的版本 - 我选择了最新版本)和由我们内部 CA 签名的证书的应用程序。当我尝试将密钥/证书导入 Java 密钥库时,出现密码错误:
keytool error: java.io.IOException: keystore password was incorrect
脚步
我安装了 openssl:
openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
我创建了一个私钥和一个配置文件,并使用它们生成了 CSR:
openssl genrsa -out .\server.key 2048
openssl req -new -key .\server.key -config .\server.cnf -out .\server.csr
我收到了证书并使用已知密码合并了密钥和证书:
openssl pkcs12 -export -in '.\server.cer' -inkey .\server.key -out .\server.merged.pfx
Enter Export Password:
Verifying - Enter Export Password:
我安装了该应用程序支持的 Java 版本:
java --version
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
我尝试创建一个新的密钥库,并使用上一步中已知的密码导入合并的 PFX 文件:
keytool -importkeystore -deststorepass changeit -destkeypass changeit -destkeystore .\temporary.keystore -srckeystore .\server.merged.pfx -srcstoretype PKCS12
Importing keystore .\server.merged.pfx to .\temporary.keystore...
Enter source keystore password:
keytool error: java.io.IOException: keystore password was incorrect
密码正确。密码由字母数字组成,大小写均可,无特殊字符,长度为 30 个字符。
我确信我以前做过这个,很久以前,而且很有效。
答案1
我意识到有点晚了,但也许它能帮助别人。
某些 Java 版本似乎在较新的 OpenSSL 中存在默认密码和密码哈希算法的问题
我通过向 OpenSSL 添加以下参数解决了这个问题:-certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -macalg sha1
因此,在您的情况下,您的命令将变成:
openssl pkcs12 -export -in '.\server.cer' -inkey .\server.key -out .\server.merged.pfx -certpbe PBE-SHA1-3DES -keypbe PBE-SHA1-3DES -macalg sha1