2009-06-27 28 views
17

¿Alguien sabe cómo solucionar esto? Intenté muchas cosas, pero ninguna funcionó.java.io.IOException: formato de Keystore no válido

Y cuando hago clic en más detalles me sale esto:

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

¿Qué estás tratando de hacer exactamente? Publicar un código de ejemplo sería útil. – Jonik

+0

¿Y por favor, publica qué cosas has intentado ya? – akarnokd

+2

No parece que Tomi haya escrito ningún código relacionado con KeyStore; esta pila es simplemente un Applet para comenzar. Parece que el cargador de clases tiene problemas para prepararse para verificar las firmas de los applets. – erickson

Respuesta

4

creo el archivo de almacén de claves que desea utilizar tiene un formato diferente o no soportado con respecto a su versión de Java. ¿Podría publicar más información de su tarea?

En general, para resolver este problema, es posible que deba volver a crear todo el almacén de claves (utilizando alguna otra versión de JDK, por ejemplo). En exportación e importación, las claves entre la antigua y la nueva, si logras abrir la anterior en otro lugar.

Si se trata simplemente de una versión no compatible, pruebe el proveedor BouncyCastle cripto por ejemplo (aunque no estoy seguro de si se añade soporte a Java para más tipos de almacén de claves?) .

Editar: Miré las características de BC.

3

Tu almacén de claves está roto, y tendrás que restaurarlo o regenerarlo.

+0

Tenía miedo de mencionar que :) – akarnokd

49

Puede dañar el archivo durante la copia/transferencia.

¿Estás usando maven? Si está copiando el archivo de keystore con "filter = true", puede dañar el archivo.

Por favor, compruebe el tamaño del archivo.

+2

+1 por pensar en Maven ... –

+2

¡Genial! Realmente me ayudó. ¿Podría, por favor, aclarar por qué el parámetro de filtrado corrompe el almacén de claves? – Dmitry

+0

Gracias por filter = true ... salvó mi día –

5

(Re) instalando el último JDK (por ejemplo, Oracle's) lo solucionó para mí.

Antes de instalar la última versión del JDK, cuando ejecuta el comando siguiente en Terminal.app:

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

El resultado fue:

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) 

Pero, después de instalar la última Oracle JDK y reiniciar Terminal, ejecutando el siguiente comando:

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

Resultados en:

Enter keystore password: 

Lo que indica que keytool en la ruta puede acceder al almacén de claves.

+1

Esto funcionó para mí, simplemente instalando lo último, que Mac ya había "actualizado" como un parche o algo así, pero solo una vez que comencé una nueva ventana de terminal, la ruta usó Nueva actualización de Java Particularmente útiles fueron los comandos que replicaban el error y que demostraban que el problema había sido resuelto (aunque debido a la referencia $ (java_home), los que funcionaban en el terminal donde el comando gradle no funcionaba, ¡lo cual era un poco confuso)! –

11

Quizás maven codifique KeyStore, puede configurar el filtrado = falso para solucionar el problema.

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

Me encontré con el problema con openJDK en ubuntu, tuve que instalar Oracle JDK para ponerlo en funcionamiento.

Puede seguir esto guide on google sites para hacer eso.

Cuestiones relacionadas