Comprensión del almacén de claves, certificados y alias

95

¿El almacén de claves es el certificado real o el alias es el certificado?

Si utilizo un alias diferente para firmar mi aplicación, ¿estropeará las actualizaciones del mercado? ¿O tendría que firmar mi aplicación con un almacén de claves diferente para estropear las cosas? ¿Y desde dónde se puede ver la información bajo el alias?

Roger
fuente

Respuestas:

127

El archivo de almacén de claves generado por Keytool almacena pares de claves públicas y privadas. Cada par o entrada almacenada en el almacén de claves tiene un alias exclusivo. En breve:

Entrada del almacén de claves = par de claves pública + privada = identificado por un alias

El almacén de claves protege cada clave privada con su contraseña individual y también protege la integridad de todo el almacén de claves con una contraseña (posiblemente diferente).

Por ejemplo, cuando firma una aplicación de Android utilizando la opción Exportar paquete de aplicación firmada de la herramienta de Android Eclipse, se le pide que primero seleccione un almacén de claves y luego que seleccione un solo alias / entrada / par de ese almacén de claves. Después de proporcionar las contraseñas tanto para el almacén de claves como para el alias elegido, la aplicación se firma y la clave pública (el certificado) para ese alias se incrusta en el APK.

Ahora, para responder a su pregunta, solo puede lanzar una actualización para una aplicación que se firmó con el alias 'foo' firmando la actualización nuevamente con el mismo alias. La pérdida del almacén de claves donde se almacena su alias le impediría lanzar una versión actualizada de su aplicación.

Sin embargo, existe una forma de firmar una aplicación con un nuevo alias, pero implica clonar un alias existente en el almacén de claves usando keytool -keyclone :

Crea una nueva entrada del almacén de claves, que tiene la misma clave privada y cadena de certificados que la entrada original.

La entrada original se identifica con un alias (que por defecto es "mykey" si no se proporciona). La nueva entrada (destino) se identifica mediante dest_alias. Si no se proporciona un alias de destino en la línea de comando, se le solicita al usuario.

Si la contraseña de la clave privada es diferente de la contraseña del almacén de claves, la entrada solo se clonará si se proporciona una clave válida. Esta es la contraseña que se utiliza para proteger la clave privada asociada con el alias. Si no se proporciona una contraseña de clave en la línea de comandos y la contraseña de clave privada es diferente de la contraseña del almacén de claves, se le solicita al usuario. La clave privada de la entrada clonada puede protegerse con una contraseña diferente, si lo desea. Si no se proporciona la opción -new en la línea de comando, se solicita al usuario la contraseña de la nueva entrada (y puede optar por dejar que sea la misma que para la clave privada de la entrada clonada).

Más información:

http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html

http://developer.android.com/guide/publishing/app-signing.html

Julio Gorgé
fuente
3
El sitio de desarrollo sugiere usar el mismo certificado para todas sus aplicaciones. Entonces, ¿esto significa que, mientras esté usando el mismo almacén de claves, puedo usar cualquier alias con cualquier contraseña y no estropeará las actualizaciones, ya que es solo una referencia? ¿El almacén de claves real es la parte importante?
Roger
1
Reescribí mi respuesta para ser más precisa. En resumen, debe utilizar el mismo alias para firmar todas las actualizaciones de su aplicación.
Julio Gorgé
2
@Julio Entonces, ¿la mejor práctica sería usar el mismo alias para todas las diferentes aplicaciones que desea publicar, como sugiere el sitio de desarrollo? No veo ninguna razón para crear un alias separado para todas sus aplicaciones.
Tony Chan
@ JulioGorgé-Oye, solo quería saber que el nombre de alias R distingue entre mayúsculas y minúsculas ...
Nombre es Nilay
@ JulioGorgé quieres decir el mismo alias o la misma clave. Alias ​​es solo un nombre, puedo cambiar el nombre del alias. Puede lanzar una actualización siempre que las claves (claves públicas para ser específicos) en la aplicación coincidan.
Dheeraj Bhaskar