2009-06-27 15 views
17

Weiß jemand, wie man das löst? Ich habe viele Dinge versucht, aber keiner von ihnen hat funktioniert.java.io.IOException: Ungültiges Keystore-Format

Und wenn ich mehr Details klicken ich diese:

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) 
+0

Was genau versuchen Sie zu tun? Das Posten eines Beispielcodes wäre hilfreich. – Jonik

+0

Und bitte posten was du schon probiert hast? – akarnokd

+2

Es sieht nicht so aus, als hätte Tomi einen KeyStore-Code geschrieben; Dieser Stapel ist einfach ein Applet, das gestartet wird. Es sieht so aus, als hätte der Klassenlader Schwierigkeiten, sich auf die Überprüfung von Applet-Signaturen vorzubereiten. – erickson

Antwort

4

Ich denke, die Schlüsselspeicherdatei Sie verwenden möchten, ein anderes oder nicht unterstütztes Format in Bezug auf Ihre Java-Version hat. Können Sie weitere Informationen zu Ihrer Aufgabe posten?

Um dieses Problem zu beheben, müssen Sie möglicherweise den gesamten Keystore neu erstellen (z. B. mit einer anderen JDK-Version). Im Export-Import die Schlüssel zwischen dem alten und dem neuen - wenn es Ihnen gelingt, den alten woanders zu öffnen.

Wenn es einfach eine nicht unterstützte Version ist, versuchen Sie den BouncyCastle Krypto-Anbieter zum Beispiel (obwohl ich nicht sicher bin, ob es Unterstützung für Java für mehr Keystore-Typen ergänzt?) .

Bearbeiten: Ich schaute auf die Feature-Spezifikation von BC.

3

Ihr Schlüsselspeicher ist beschädigt, und Sie müssen ihn wiederherstellen oder regenerieren.

+0

Ich hatte Angst, das zu erwähnen :) – akarnokd

49

Sie können die Datei während der Kopie/Übertragung beschädigen.

Verwenden Sie Maven? Wenn Sie die Schlüsselspeicherdatei mit "filter = true" kopieren, können Sie die Datei beschädigen.

Bitte überprüfen Sie die Dateigröße.

+2

+1 zum Nachdenken über Maven ... –

+2

Großartig! Ich habe mir wirklich geholfen. Könnten Sie bitte klären, warum der Filterparameter den Keystore verfälscht? – Dmitry

+0

Danke für filter = true ... speicherte meinen Tag –

5

(Re) Installation der neuesten JDK (z. B. Oracle's) repariert es für mich.

vor dem letzten JDK installieren, wenn ich den folgenden Befehl in Terminal.app ausgeführt:

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

Es in Folge:

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) 

Aber nach der neuesten Oracle JDK Installation und dem Neustart Terminal, Ausführung des folgenden Befehls:

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

Ergebnisse in:

Enter keystore password: 

Gibt an, dass das Keytool auf Pfad auf den Keystore zugreifen kann.

+1

Das funktionierte für mich - nur die neuste Installation, die Mac schon als Patch upgedated hatte oder so - aber erst einmal habe ich ein neues Terminalfenster damit den Pfad genutzt neues Java-Update. Besonders nützlich waren die Befehle, die den Fehler replizierten und das Problem wurde behoben (obwohl wegen der $ (java_home) -Referenz, die im Terminal funktionierte, wo der Befehl gradle nicht funktionierte, was ein wenig verwirrend war)! –

11

Vielleicht Maven Codierung KeyStore, können Sie filter = false festlegen, um das Problem zu beheben.

<build> 
    ... 
    <resources> 
     <resource> 
      ... 
      <!-- set filtering=false to fix --> 
      <filtering>false</filtering> 
      ... 
     </resource> 
    </resources> 
</build> 
1

Ich lief das Problem mit openJDK auf Ubuntu, musste Oracle JDK installieren, um es zum Laufen zu bringen.

Sie können dies guide on google sites tun, um dies zu tun.

Verwandte Themen