将证书和密钥导入 Java 密钥库时出错:keytool 错误:java.io.IOException:密钥库密码不正确

use*_*239 2 java openssl

我正在安装一个需要 Java(两个受支持的版本 - 我选择了最新版本)和由我们内部 CA 签名的证书的应用程序。当我尝试将密钥/证书导入 Java 密钥库时,出现密码错误:

keytool error: java.io.IOException: keystore password was incorrect
Run Code Online (Sandbox Code Playgroud)

脚步

我安装了openssl:

openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
Run Code Online (Sandbox Code Playgroud)

我创建了一个私钥和一个配置文件,并使用它们生成 CSR:

openssl genrsa -out .\server.key 2048
openssl req -new -key .\server.key -config .\server.cnf -out .\server.csr
Run Code Online (Sandbox Code Playgroud)

我收到了证书并使用已知密码合并了密钥和证书:

openssl pkcs12 -export -in '.\server.cer' -inkey .\server.key -out .\server.merged.pfx
Enter Export Password:
Verifying - Enter Export Password:
Run Code Online (Sandbox Code Playgroud)

我安装了应用程序支持的 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)
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个新的密钥库并使用上一步中的已知密码导入合并的 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
Run Code Online (Sandbox Code Playgroud)

密码正确。它都是字母数字,两种情况,没有特殊字符,长度为 30 个字符。

我确信我以前曾这样做过,不久前,而且它很有效。

evi*_*uin 5

我意识到有点晚了,但也许对其他人有帮助。

某些 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
Run Code Online (Sandbox Code Playgroud)