【发布时间】:2017-07-11 17:41:32
【问题描述】:
我已经使用 portecle 将 JKS 密钥库转换为 P12 格式,但它可能并不顺利。密钥库适用于 Java 8(各种版本),但适用于 Java 9(OpenJDK 64 位服务器 VM(构建 9-internal+0-2016-04-14-195246.buildd.src,混合模式),我得到了
java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(java.base@9-internal/JavaKeyStore.java:659)
at sun.security.util.KeyStoreDelegator.engineLoad(java.base@9-internal/KeyStoreDelegator.java:219)
at java.security.KeyStore.load(java.base@9-internal/KeyStore.java:1466)
at org.eclipse.jetty.util.security.CertificateUtils.getKeyStore(CertificateUtils.java:52)
at org.eclipse.jetty.util.ssl.SslContextFactory.loadKeyStore(SslContextFactory.java:998)
at org.eclipse.jetty.util.ssl.SslContextFactory.load(SslContextFactory.java:252)
at org.eclipse.jetty.util.ssl.SslContextFactory.doStart(SslContextFactory.java:219)
有趣的是,Java 8 keytool 显示
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 5 entries
... entries listed
Java 9 中的那个显示
Keystore type: PKCS12
Keystore provider: SUN
Your keystore contains 5 entries
... entries listed
我知道JEP 229 并且我已经阅读了相关问题,但我看不到任何相关问题。
【问题讨论】:
-
等等。 Java 9 JRE 还是针对 Java 9 JDK 编译的?
-
@Michael 在 Java 8 上编译(所有测试中使用相同的 JAR),在各种机器(Java 8 和 9)上运行。
-
Java8
Keystore类型JKS自 2015 年 8u60 以来可以读取 JKS 和 PKCS12 -- see the release notes 在底部附近的“密钥库兼容模式”。您的程序(或其配置)可能指定了 JKS 类型,它在 8 中可以读取 PKCS12,但在 9 中不能。 8中的keytool指定可以读取的JKS类型,9中的keytool指定可以读取的PKCS12类型。
标签: java keystore keytool java-9