OpenSSL 1.0.2k-fips
openjdk-17.0.1
我使用 Openssl 生成 PKCS12 文件。我的 java 密钥库无法读取它。
我的 openssl 命令:(rootca.key 是私钥,rootca.crt 是自签名证书。)
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -nodes -keyout out.key -out out.csr -subj /C=CN/CN=-1040310296
openssl x509 -req -CA rootca.crt -CAkey rootca.key -days 365 -in out.csr -out out.crt -CAcreateserial -extensions v3_ca -extfile ./openssl.cnf
openssl pkcs12 -export -in out.crt -inkey out.key -chain -CAfile rootca.crt -name server -out out.p12 -password pass:Ff5evzT0tr
当我使用我的 java 程序读取此 PKCS12 文件时,捕获到异常:
Java代码:
KeyStore ks = KeyStore.getInstance("PKCS12");
ks.load(p12keyI, "Ff5evzT0tr".toCharArray());
例外情况:
java.io.IOException: Tag number over 30 is not supported
at java.base/sun.security.util.DerValue.<init>(DerValue.java:414)
at java.base/sun.security.util.DerValue.<init>(DerValue.java:459)
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2012)
at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:221)
at java.base/java.security.KeyStore.load(KeyStore.java:1473)
我可以通过 openssl cmd 读取它:
openssl pkcs12 -in out.p12 -password pass:Ff5evzT0tr -info -nodes
我无法通过 java 程序和 keytool cmd 读取它:
keytool -list -v -storetype PKCS12 -keystore output.p12 -storepass Ff5evzT0tr
keytool error: java.io.IOException: keystore password was incorrect
java.io.IOException: keystore password was incorrect
at java.base/sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:2159)
at java.base/sun.security.util.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:221)
at java.base/java.security.KeyStore.load(KeyStore.java:1473)
at java.base/sun.security.tools.keytool.Main.doCommands(Main.java:946)
at java.base/sun.security.tools.keytool.Main.run(Main.java:415)
at java.base/sun.security.tools.keytool.Main.main(Main.java:408)
Caused by: java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: java.security.cert.CertificateParsingException: java.io.IOException: Only named ECParameters supported
... 6 more
我想知道导致这个问题的原因以及如何解决它。 谢谢大家