我知道这个问题看起来像是一个已知的问题(这里有很多关于这个问题的问题),不同的 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
检查)openssl pkcs12 -in keystore.p12 -info -noout -passin pass:changeit
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022
)从那时起,我以为我偶然发现了已知的 JDK 问题。
我已经尝试过这些版本,全部失败并显示完全相同的消息:
最后,我还可以尝试使用以下组合: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
消息所显示的道路前进......
感谢 @dave_thompson_085 的评论,我可以使用
-J-showversion
标志到 keytool -importkeystore
命令,并从该 Java 工具获取有用的消息。
正如您从我的帖子中的回溯中看到的,生成的消息
keystore password was incorrect
是更深层次的Empty issuer DN not allowed in X509Certificates
异常的结果......该错误消息非常具有误导性,让我浪费了时间。
我的问题来自于我的 keycloak 证书的颁发者是如何声明的。我参考了 cert-manager 文档,解决了我的问题,并且 keycloak 最终接受了我的 PEM 作为创建密钥库的输入。
谢谢并致以诚挚的问候,
皮埃尔
下午好,
有人可以阐明解决有关“空颁发者 DN..”和“证书管理器文档”问题的实际步骤吗?
可以采取哪些步骤来解决此问题?请帮忙。
非常感谢, 保罗