Android keystore dejó de funcionar

Recientemente he tenido un problema con una tienda clave. Sé que hay muchas preguntas sobre este problema ya. Los he leído a todos y Googled furiosamente.

Error:

keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect java.io.IOException: Keystore was tampered with, or password was incorrect at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:772) at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) at java.security.KeyStore.load(KeyStore.java:1214) at sun.security.tools.KeyTool.doCommands(KeyTool.java:885) at sun.security.tools.KeyTool.run(KeyTool.java:340) at sun.security.tools.KeyTool.main(KeyTool.java:333) Caused by: java.security.UnrecoverableKeyException: Password verification failed at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:770) ... 5 more 

Software que estoy usando:

Java

 java version "1.7.0_21" Java(TM) SE Runtime Environment (build 1.7.0_21-b11) Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode) 

Eclipse

 Version: 3.8.0 Build id: I20120502-2000 

Último complemento ADT

SDK de Android más reciente

Esto es lo que sé:

  • No perdí la contraseña y nunca ha cambiado.
  • No puedo recuperar la contraseña (conozco el pase).
  • No puedo firmar una aplicación existente con una clave diferente sin lanzar una aplicación nueva (por lo que no puedo publicar ninguna actualización).

Esto es lo que he hecho:

  • He desinstalado y reinstalado Eclipse muchas veces.
  • He desinstalado y reinstalado el complemento de ADT para Android.
  • He eliminado y descargado el último SDK de Android muchas veces.
  • He desinstalado y reinstalado JDK7.
  • He intentado usar las copias de seguridad de mi keystore.
  • He comprobado las sumas de comprobación MD5 usando "md5sum KEYSTORE" y comparado con las copias de seguridad (misma salida MD5 – no alterada).
  • He intentado brute-forzar la tienda de la llave (he recuperado la contraseña que conocí).
  • He creado una clave de prueba (con la configuración actual) y probado la contraseña y parece que funcionó bien (por lo que algo ha cambiado).
  • He intentado exportar el androide .apk manualmente y después intentado firmarlo (fuera de Eclipse).

A continuación se muestra cómo exporto una aplicación firmada:

  • A través de Eclipse: Exportación de archivos> Exportar> Exportar aplicación Android.
  • Antes de JDK7: jarsigner -verbose -keystore KEYSTORE FILE ALIAS.
  • Con JDK7: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore KEYSTORE ARCHIVO ALIAS.

¿Qué queda para averiguar o probar?

  • Algunas de las referencias / URL dicen para eliminar el archivo "trusted.certs"?
  • Prueba a eliminar el "debug.keystore"?
  • ¿Actualizar Eclipse o alguna de las herramientas de desarrollo de Android afectará mi almacén de claves?
  • ¿Actualizar Java de jdk6 a jdk7 creará algún problema?
  • ¿Podría esto haber ensuciado con o cambiar cómo el jarsigner trabaja en de todos modos?

Sugerencias de usuario:

  • Intenta usar JDK6, pero he podido exportar una aplicación recientemente.
  • Compruebe key.store.password o key.alias.password en mi local.properties
  • Desmarcando la compilación automáticamente en eclipse y limpiar el proyecto
  • Intente eliminar la carpeta .metadata en su área de trabajo y borre todas las carpetas temporales.

Resumen

  • Keystores no cambió,
  • Tengo las contraseñas de los almacenes de claves,
  • He exportado exitosamente una aplicación recientemente usando:
    • Eclipse 3.8 (y Eclipse 4.0+),
    • Las últimas Java 7,
    • El último complemento ADT.
  • Mi última exportación y construcción exitosa fue hace unas semanas usando Eclipse 3.8, las últimas herramientas de Android y Java 7 con la misma contraseña.

Actualización (6/29/14)

  • He utilizado: keytool -list -keystore KEYSTORE para demostrar y probar con éxito que 3 de mis 4 claves funcionan.
  • Me bruteforced la última clave y obtuvo la contraseña de la keystore (El pase que ya sabía), pero la contraseña no funciona cuando entro para la firma. He utilizado: java -jar AndroidKeystoreBrute_v1.02.jar -m 3 -k KEYSTORE -d WORDLIST .
  • Curiosamente, a veces, cuando escribo mi contraseña en eclipse muy rápidamente, mi alias aparecerá y puedo exportar mi aplicación con éxito. (Sé que esto es una locura).
  • Versión Java actualizada.

Si escribo la contraseña muy rápidamente funciona, a veces.

Parece que la apertura de Eclipse y la introducción de la contraseña la primera vez me permite usar el keystore.

Obviamente, si todo falla, tendré que crear un nuevo almacén de claves. Realmente me gustaría conseguir esto resuelto, no estoy seguro de qué hacer ahora además de volver a publicar con una nueva clave.

Si la clave no se puede recuperar correctamente, podría abrir código fuente en Github.


Solución (6/29/14):

Un agradecimiento especial al usuario Erhannis!

Esto es lo que hice:

La orden de error en mí cada vez:

 keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v 

Desde que me dijiste que podíamos extraer claves privadas de Java Keystore (.jks), cavé más profundo y terminé usando una variación del comando. He seguido los enlaces que publicaste aquí y aquí :

 keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -deststoretype pkcs12 

Después de extraer la clave privada y almacenar como PKCS12, creo extraer mi clave privada y ponerlo de nuevo en una nueva Java Keystore:

 keytool -importkeystore -srckeystore new.keystore -srcstoretype pkcs12 -destkeystore final.keystore -deststoretype jks 

Referencias:

Http://developer.android.com/tools/publishing/app-signing.html#signapp

Http://code.google.com/p/android-keystore-password-recover/

Lista de URL de StackOverflow que he leído:

¿Cómo manejar una contraseña de KeyStore perdida en Android?

Problema de Keystore no válido?

Android: Perdí mi tienda de la llave del androide, qué debo hacer?

He perdido mi archivo .keystore?

Olvidó la contraseña de Keystore, pensando en la detección de Brute-Force. ¿Corromperá el almacén de claves?

He perdido la contraseña para el archivo android de Keystore

Problema al ejecutar mi keystore firmado y liberado en Eclipse

Android: olvidó la contraseña del almacén de claves. ¿Puedo descifrar el archivo del almacén de claves?

Problema de keystore de liberación de Android: "Se ha manipulado el almacén de claves o la contraseña no fue correcta"

Puede que haya tenido el mismo problema. Nunca averigué por qué fallaba (aunque me pregunto si fue porque la contraseña del keystore era más corta que 6 dígitos), pero pude copiar mi clave en un nuevo almacén de claves, el cual luego cambié el nombre para reemplazar el antiguo, Y misteriosamente trabajó después de eso (usando las nuevas contraseñas). Necesitaba la contraseña clave, por cierto. Trabajando en https://security.stackexchange.com/a/3795 , hice lo siguiente:

  1. keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -v
  2. Ha introducido la nueva contraseña del almacén de claves dos veces.
  3. Pulse Intro cuando me preguntó por la contraseña de origen del almacén de claves (la dejó en blanco)
  4. Introducido la contraseña clave

Después de comprobar que el nuevo funcionaba, lo copié sobre el anterior. Espero que funcione para ti; buena suerte.

Intente eliminar la carpeta .metadata en su área de trabajo y borre todas las carpetas temporales. Si su archivo keystore no está dañado y ha intentado reinstalar Eclipse, ADT, SDK de Android y Java SDK correctamente, no veo otras causas posibles para este extraño problema, excluyendo archivos de caché .metadata y \ o alguna corrupción temporal.

Otra sugerencia

Trate de utilizar Portecle una utilidad para administrar y examinar keystores, claves, certificados, solicitudes de certificados, listas de revocación de certificados, etc.

Voy a sugerir par de calor y más pruebas.

Tenga paciencia para aplicar estos,

Pasos:

  1. Desactive la compilación automáticamente (Proyecto-> Crear automáticamente) en eclipse y limpie su proyecto.
  2. Construir de nuevo. (Haga clic derecho en el proyecto + Proyecto de construcción)
  3. Proyecto de Exportación.
  4. Selecciona Android Export. (Alineado automáticamente para ti)
  5. Elige tu clave. Proporcione la contraseña. Alias ​​debe aparecer en la lista (Asegúrese de que el bloqueo mayúsculas). A veces damos la contraseña correcta pero debido a las tapas siempre falla;)
  6. Avísame si funciona para ti.

Esperanzas que esto le ayudará.

Tuve el mismo problema y he intentado todo lo que se sugiere en este hilo, pero nada fue capaz de guardar mi contraseña de alias. El punto es que estaba absolutamente seguro acerca de la contraseña, ya que había actualizado la aplicación cuatro veces ya. Estaba recibiendo el mensaje "Keystore fue manipulado, o la contraseña era incorrecta" .

La solución

Parece que en la creación del almacén de claves usando eclipse, un carácter de espacio se añadió delante de la contraseña!

Este desagradable error aparentemente fue arreglado en una versión posterior que me hizo incapaz de firmar mi aplicación con la contraseña que pensé que era la correcta.

Basado en este enlace SO: Ant falla en construir apk firmado después de actualizar a android v20 Sugiero que intentes agregar un carácter de espacio antes de después de tu contraseña .

¿Está almacenando valores como key.store.password o key.alias.password en su archivo local.properties? ¿Alguno de estos errores?

Tengo curiosidad si hay algún error que se produce para las claves creadas con JDK6 y verificadas en JDK7 – Explicaría por qué las nuevas claves que creó para el trabajo de prueba, pero la antigua no. Prueba a degradar a JDK6 y ver si eso lo arregla. Otros han tenido problemas de jarsigner en JDK7 que se fueron cuando bajaron a 6. Si eso funciona, archiva un informe de error y solicita un parche para que puedas actualizar con seguridad a Java 7 🙂

Luché esta edición también recientemente, e intenté todas las sugerencias enumeradas aquí y en otra parte. Finalmente identificó un error tonto que estaba causando este error en mi final – quería compartir esto aquí en caso de que ayuda a cualquiera de ustedes.

Esto es más probable que suceda si usted, como yo, tiene varias versiones Java en su máquina y ha actualizado JRE / JDK entre el momento en que creó originalmente el keystore y ahora cuando está intentando firmar el APK.

Por alguna razón, nuestras instrucciones de compilación hacían referencia a la ruta completa de Java como esto:

C: \ Progra ~ 1 \ Java \ jdk1.6.0_45 \ bin \ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -clave de claves cre80ve.keystore unsigned.apk cre80ve

Una de las sugerencias anteriores me hizo pensar que podría no ser una cuestión de contraseña en absoluto, y podría ser incompatibilidades de versión que causan el problema. Así que ejecuté el siguiente comando:

Keytool -list -keystore cre80ve.keystore

Usando la contraseña que sabía que era correcta, y he aquí, confirmó que era la contraseña correcta.

A continuación, dejé caer la referencia explícita en la ruta a la (más antigua) versión de Java. Esto hizo que recoja automáticamente la última versión de Java (jdk1.8.0_31 en mi caso):

Jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -clave de claves cre80ve.keystore unsigned.apk cre80ve

Y todo empezó a funcionar bien!

Bottomline: no puede ser un problema de contraseña en absoluto, pero diferentes versiones de Java o el SDK de Android causando el problema, así que recuerde comprobarlo.

Y una vez que comience a trabajar, recuerde guardar su keystore y contraseña en un lugar seguro 🙂

Mi alias clave dejó de funcionar sudenly. (Ok, después de algunas actualizaciones de Android Studio y Java).

He probado todas las soluciones de este hilo, así como de otros. En mi caso la solución fue sorprendente. Tengo el almacén de claves con pocos alias. Ninguno funcionaba excepto uno, que tenía contraseña igual que keystore. Pero por desgracia no era el que necesitaba. Esto me hizo pensar sin lógica. Copié alias único en el nuevo almacén de claves con

 keytool -importkeystore -srckeystore old.keystore -destkeystore new.keystore -srcalias importantalias 

Y luego cambié la contraseña de alias a la misma que la contraseña de keystore con:

 keytool -keypasswd -keystore new.keystore -alias importantalias 

Finalmente pude firmar mi apk. Parece un insecto tonto que puede desperdiciar un día de desarrollo.

  • KeyStore y Alias ​​clave
  • Problemas en la publicación de archivos .apk sin firmar?
  • Error de lectura: error en la biblioteca SSL, generalmente un error de protocolo
  • No puede firmar el APK sin firmar
  • Java.security.UnrecoverableKeyException: Error al obtener información acerca de la clave privada
  • Error de "Versión incorrecta de almacén de claves". ¿Cómo puedo crear un certificado de almacén de claves de versión = 1?
  • Android - ¿Puede publicar diferentes aplicaciones con el mismo archivo de almacén de claves en varias cuentas?
  • Hash clave para Facebook Android SDK
  • Exportación de Android: cómo crear el archivo .keystore?
  • SSLHandshakeException: Ancla de confianza para la ruta de certificación no encontrada. Solo en la API de Android <19
  • Almacenamiento seguro de una clave simétrica en el uso de Android KeyChain
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.