【问题标题】:Keystore does not work on Java 9密钥库不适用于 Java 9
【发布时间】: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


【解决方案1】:

JDK keytool 实用程序可以将 JKS 密钥库转换为 PKCS12 密钥库。 例如,使用 JDK 9,

$ keytool -importkeystore -srckeystore ks.jks -destkeystore ks.p12

此外,自 2016 年以来已对密钥库进行了几项增强,因此您应该使用更新的 JDK 9 版本,请参阅 http://jdk.java.net/9/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-05
    • 2015-12-09
    相关资源
    最近更新 更多