2009-06-27 12 views
17

Qualcuno sa come risolvere questo problema? Ho provato molte cose, ma nessuna ha funzionato.java.io.IOException: formato Keystore non valido

E quando scatto maggiori dettagli ottengo questo:

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

Che cosa stai cercando di fare esattamente? Pubblicare qualche esempio di codice sarebbe utile. – Jonik

+0

E per favore pubblica le cose che hai già provato? – akarnokd

+2

Non sembra che Tomi abbia scritto alcun codice relativo a KeyStore; questo stack è semplicemente un'applet per iniziare. Sembra che il programma di caricamento classi abbia problemi a preparare la verifica delle firme delle applet. – erickson

risposta

4

penso che il file di archivio chiavi che si desidera utilizzare ha un formato diverso o non supportato rispetto alla versione Java. Potresti postare qualche informazione in più sul tuo compito?

In generale, per risolvere questo problema potrebbe essere necessario ricreare l'intero keystore (utilizzando, ad esempio, un'altra versione di JDK). In export-import le chiavi tra il vecchio e il nuovo - se riesci ad aprire il vecchio da qualche altra parte.

Se si tratta semplicemente di una versione non supportata, provate il fornitore BouncyCastle crypto per esempio (anche se non sono sicuro se aggiunge il supporto a Java per più tipi di archivi di chiavi?) .

Modifica: Ho esaminato la funzionalità di BC.

3

Il keystore è danneggiato e sarà necessario ripristinarlo o rigenerarlo.

+0

Avevo paura di dirlo :) – akarnokd

49

Si può danneggiare il file durante la copia/trasferimento.

Stai usando Maven? Se si sta copiando il file del keystore con "filter = true", è possibile corrompere il file.

Controllare le dimensioni del file.

+2

+1 per pensare a Maven ... –

+2

Grande! Mi ha davvero aiutato. Potresti, per favore, chiarire perché il parametro filtering corrompe il keystore? – Dmitry

+0

Grazie per filter = true ... salvata la mia giornata –

5

(Re) l'installazione dell'ultimo JDK (ad esempio Oracle's) risolto per me.

Prima di installare l'ultima JDK, quando ho eseguito il seguente comando nel Terminal.app:

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

Il risultato è stato:

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) 

Ma, dopo aver installato l'ultima Oracle JDK e il riavvio Terminale, eseguendo il seguente comando:

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

Risultati in:

Enter keystore password: 

Che indica che il keytool sul percorso può accedere al keystore.

+1

Questo ha funzionato per me, semplicemente installando l'ultima, che Mac aveva già "aggiornato" come patch o qualcosa del genere - ma solo una volta che ho iniziato una nuova finestra di terminale in modo che il percorso usasse il nuovo aggiornamento java. Particolarmente utili sono stati i comandi che replicavano l'errore e dimostravano che il problema era stato risolto (sebbene a causa del riferimento $ (java_home), quelli lavoravano nel terminale dove il comando gradle non funzionava, il che era un po 'confuso)! –

11

Forse Maven codifica per te KeyStore, puoi impostare filtering = false per risolvere il problema.

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

mi sono imbattuto nel problema con OpenJDK su Ubuntu, ha dovuto installare Oracle JDK per farlo funzionare.

È possibile seguire questo guide on google sites per farlo.

Problemi correlati