尝试将 PKCS12 导入 JKS 时,Java keytool 产生“密钥库密码不正确”

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

我知道这个问题看起来像是一个已知的问题(这里有很多关于这个问题的问题),不同的 JDK 版本上报告了几个错误,并且这篇文章已经很好地总结了这种情况: https://stackoverflow.com/a/72501767

我碰巧陷入了我认为是另一种情况,尚未得到答复。我一定做错了什么,但我看不出是什么。

我有 PEM 格式的证书和私钥,我想从中创建 JKS。我读到可能不再需要 JKS 格式,但我无法控制这部分。

我在命令行中处理文件。事情就是这样,没什么特别的,也没什么深奥的:

openssl pkcs12 -export -in cert.crt -passout pass:changeit -inkey pkey.key -out keystore.p12

keytool -importkeystore -srckeystore  keystore.p12 -srcstoretype PKCS12 -srcstorepass changeit -deststorepass changeit -destkeystore keystore.jks

我得到:

Importing keystore keystore.p12 to keystore.jks...
keytool error: java.io.IOException: keystore password was incorrect

现在,问题是我已经尝试过使用许多版本的 JDK,但从未成功。

事实:

  • 输入文件均正确(使用
    openssl x509 -in cert.crt -text -noout
    openssl rsa -in pkey.key -text -noout
    检查)
  • 生成的 PKCS12 可以使用 openssl 检查:
    openssl pkcs12 -in keystore.p12 -info -noout -passin pass:changeit
  • Ubuntu 22.04,openssl v3 (
    OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022
    )

从那时起,我以为我偶然发现了已知的 JDK 问题。

我已经尝试过这些版本,全部失败并显示完全相同的消息

  • openjdk版本“11.0.15”2022-04-19
  • openjdk版本“17.0.3”2022-04-19
  • openjdk 版本“18-ea”2022-03-22

最后,我还可以尝试使用以下组合:openssl 1.1.1n + openjdk 11.0.15,会产生相同的错误。 我尝试过的所有JDK版本都在11.0.12以上。

我陷入困境和绝望,在这上面花了太多时间。 (作为记录,我尝试使用包含 PEM 证书的现有密钥设置 bitnami keycloak 图表,负责导入它的容器失败。我尝试手动执行相同的操作,但我在这里)。

编辑:

感谢 dave_thompson_085 的建议。这是 keytool 错误的回溯:

java.io.IOException: keystore password was incorrect
    at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2158)
    at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:226)
    at java.base/java.security.KeyStore.load(KeyStore.java:1503)
    at java.base/sun.security.tools.keytool.Main.loadSourceKeyStore(Main.java:2319)
    at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:1234)
    at java.base/sun.security.tools.keytool.Main.run(Main.java:416)
    at java.base/sun.security.tools.keytool.Main.main(Main.java:409)
Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: java.security.cert.CertificateParsingException: Empty issuer DN not allowed in X509Certificates

以及 openssl pkcs12 -info 的输出:

MAC: sha256, Iteration 2048
MAC length: 32, salt length: 8
PKCS7 Encrypted data: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256
Certificate bag
PKCS7 Data
Shrouded Keybag: PBES2, PBKDF2, AES-256-CBC, Iteration 2048, PRF hmacWithSHA256

我将沿着那条看起来邪恶的

java.security.cert.CertificateParsingException: Empty issuer DN not allowed in X509Certificates
消息所显示的道路前进......

java openssl keytool pkcs#12
2个回答
1
投票

感谢 @dave_thompson_085 的评论,我可以使用

-J-showversion
标志到
keytool -importkeystore
命令,并从该 Java 工具获取有用的消息。

正如您从我的帖子中的回溯中看到的,生成的消息

keystore password was incorrect
是更深层次的
Empty issuer DN not allowed in X509Certificates
异常的结果......该错误消息非常具有误导性,让我浪费了时间。

我的问题来自于我的 keycloak 证书的颁发者是如何声明的。我参考了 cert-manager 文档,解决了我的问题,并且 keycloak 最终接受了我的 PEM 作为创建密钥库的输入。

谢谢并致以诚挚的问候,

皮埃尔


0
投票

下午好,

有人可以阐明解决有关“空颁发者 DN..”和“证书管理器文档”问题的实际步骤吗?

可以采取哪些步骤来解决此问题?请帮忙。

非常感谢, 保罗

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