java.io.IOException:无效的密钥库格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.io.IOException:无效的密钥库格式相关的知识,希望对你有一定的参考价值。

有谁知道如何解决这个问题?我尝试了很多东西,但没有一个能奏效。

当我点击更多细节时,我得到了这个:

at sun.security.provider.JavaKeyStore.engineLoad(Unknown Source)
atsun.security.provider.JavaKeyStore$JKS.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at com.sun.deploy.security.RootCertStore$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.security.RootCertStore.loadCertStore(Unknown Source)
at com.sun.deploy.security.RootCertStore.load(Unknown Source)
at com.sun.deploy.security.RootCertStore.load(Unknown Source)
at com.sun.deploy.security.ImmutableCertStore.load(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)
at sun.plugin.security.PluginClassLoader.getPermissions(Unknown Source)
at java.security.SecureClassLoader.getProtectionDomain(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at sun.applet.AppletClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.applet.AppletClassLoader.loadCode(Unknown Source)
at sun.applet.AppletPanel.createApplet(Unknown Source)
at sun.plugin.AppletViewer.createApplet(Unknown Source)
at sun.applet.AppletPanel.runLoader(Unknown Source)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
答案

您可能会在复制/传输过程中损坏文件。

你在用maven吗?如果要使用“filter = true”复制密钥库文件,则可能会损坏该文件。

请检查文件大小。

另一答案

也许maven编码你的KeyStore,你可以设置filtering = false来解决问题。

<build>
    ...
    <resources>
        <resource>
            ...
            <!-- set filtering=false to fix -->
            <filtering>false</filtering>
            ...
        </resource>
    </resources>
</build>
另一答案

(重新)安装最新的JDK(例如Oracle's)为我修复了它。

在安装最新的JDK之前,当我在Terminal.app中执行以下命令时:

keytool -list -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -v

结果是:

keytool error: java.io.IOException: Invalid keystore format
java.io.IOException: Invalid keystore format
    at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:650)
    at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55)
    at java.security.KeyStore.load(KeyStore.java:1445)
    at sun.security.tools.keytool.Main.doCommands(Main.java:792)
    at sun.security.tools.keytool.Main.run(Main.java:340)
    at sun.security.tools.keytool.Main.main(Main.java:333)

但是,在安装最新的Oracle JDK并重新启动终端后,执行以下命令:

keytool -list -keystore $(/usr/libexec/java_home)/jre/lib/security/cacerts -v

结果是:

Enter keystore password:  

这表示路径上的keytool可以访问密钥库。

另一答案

我认为您要使用的密钥库文件具有与Java版本不同或不受支持的格式。你可以发布一些你的任务的更多信息吗?

通常,要解决此问题,您可能需要重新创建整个密钥库(例如,使用其他一些JDK版本)。在导出 - 导入新旧密钥之间的密钥 - 如果您设法在其他地方打开旧密钥。

如果它只是一个不受支持的版本,请尝试使用BouncyCastle加密提供程序 (虽然我不确定它是否为更多密钥库类型添加了对Java的支持?) 。

编辑:我看了BC的功能规格。

另一答案

您的密钥库已损坏,您必须还原或重新生成它。

另一答案

我在ubuntu上遇到了openJDK的问题,不得不安装Oracle JDK才能让它运行起来。

你可以按照这个guide on google sites来做到这一点。

另一答案

去构建清理项目然后重建它为我工作的项目。

以上是关于java.io.IOException:无效的密钥库格式的主要内容,如果未能解决你的问题,请参考以下文章

无效的密钥库格式

keytool 错误: java.io.IOException: Invalid keystore format

java.io.IOException:无法解包数据,无效状态

什么是java.io.IOException:无效的头字段?

ES256 JWT 验证 - SignatureException:签名的无效编码:java.io.IOException:序列标签错误

反思 - Java 8 - 无效的常量类型