50

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

当我单击更多详细信息时,我得到了这个:

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)
4

13 回答 13

91

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

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

请检查文件大小。

于 2011-08-13T13:05:55.217 回答
43

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

<build>
    ...
    <resources>
        <resource>
            ...
            <!-- set filtering=false to fix -->
            <filtering>false</filtering>
            ...
        </resource>
    </resources>
</build>
于 2016-03-08T07:58:13.670 回答
16

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

在安装最新的 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 可以访问密钥库。

于 2016-01-05T21:39:13.733 回答
9

我对不同版本的 keytool 有同样的问题:

C:\Program Files\Java\jdk1.8.0_51\bin\keytool

但是相同的密钥库文件可以正常工作

"C:\Program Files\Java\jre1.8.0_201\bin\keytool"

我知道这是一个旧线程,但已经浪费了很多时间来解决这个问题......:D

于 2020-06-19T09:55:43.513 回答
5

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

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

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

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

于 2009-06-27T11:48:16.470 回答
5

对我来说,发生这个问题是因为我在笔记本电脑上使用 1.8.0_251 生成了 .jks 文件,然后我将它复制到了具有 java 1.8.0_45 的服务器上,当我在代码中使用该 .jks 文件时,我得到了 java.io.IOException: Invalid密钥库格式。

为了解决这个问题,我直接在服务器上生成了 .jks 文件,而不是从具有不同 Java 版本的笔记本电脑上复制。

于 2021-01-19T00:48:26.877 回答
4

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

于 2009-06-27T15:34:57.713 回答
3

我在 ubuntu 上遇到了 openJDK 的问题,必须安装 Oracle JDK 才能使其正常工作。

你可以按照谷歌网站上的这个指南来做到这一点。

于 2017-09-19T10:19:38.020 回答
1

您可以通过在 android/app/ 目录中运行以下命令来生成调试密钥库:

keytool -genkey -v -keystore debug.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000

或者只是从官方模板下载https://raw.githubusercontent.com/facebook/react-native/master/template/android/app/debug.keystore

于 2020-05-01T21:08:22.377 回答
1

同样的问题,我安装了 Oracle JDK,并使用它创建了我的密钥库,但jceks格式为

keytool -importkeystore -destkeystore client.keystore \
    -srckeystore redislabs_user.p12 -srcstoretype pkcs12 \
    -deststoretype jceks -alias client-cert

我删除了该-deststoretype jceks选项,它工作正常:)

于 2020-11-05T14:49:35.453 回答
0

去构建干净的项目,然后重建你的项目,它对我有用。

于 2019-02-18T10:27:33.640 回答
0

就我而言,我使用 Java 1.8 版运行该项目。以及我从 java 16 生成的 Keystore.jks 文件。我将项目 java 版本更改为 16,错误消失了。

请检查您生成密钥库的 JDK 版本和您项目的 JDK 版本是否相同。如果它们不同,请从运行当前项目的同一 JDK 生成密钥库或更改项目 JDK。

于 2021-11-13T17:03:05.883 回答
0

我在运行 keytool 命令时遇到了这个问题。还有另一种运行 keytool 命令的方法,这里提到:https using gradlew command ://developers.google.com/android/guides/client-auth 。

当我在调试模式下运行时,我 ./gradlew signingReport --debug知道 gradle 插件需要 java 11,而我的本地有 java8。下载了 java11 并更新了路径。运行命令(确保打开一个新终端,以便将 java 路径反映到 11)。奇迹般有效 !!!

于 2021-09-25T06:59:47.457 回答