2010-04-19 12 views
18

Al exportar una aplicación Android firmada usando Eclipse, ¿existe un propósito para usar alias múltiples?Almacén de claves y alias: ¿hay algún uso para varios alias?

De acuerdo con official guide about signing, se recomienda que firme todas las aplicaciones con el mismo certificado para permitir que sus aplicaciones compartan datos, codifiquen y actualicen de forma modular.

Suponiendo que "alias", "clave" y "certificado" son esencialmente intercambiables en este contexto, ¿hay alguna razón por la que alguien quisiera querer para usar alias diferentes para todas sus aplicaciones? La única razón por la que puedo pensar es que agrega más seguridad a sus aplicaciones, en el sentido de que una clave/contraseña comprometida no compromete todo. ¿Hay otras razones?

Además, ¿la clave generada depende del nombre del alias? En otras palabras, si cambia el nombre del alias pero no la contraseña, ¿el certificado generado sería diferente?

+0

Recientemente encontré esta pregunta y para aquellos que están buscando, creo que la respuesta aceptada es incorrecta. Por favor vea mi respuesta a continuación para aclaración. –

Respuesta

14

Corrígeme si me equivoco pero si ves this answer a una pregunta similar, verás que el certificado de hecho depende del "alias" particular (dentro de tu almacén de claves) con el que elijas firmar.

Lea la respuesta detenidamente y verá que el "almacén de claves" contiene "alias" s (que en realidad son pares de claves privadas + públicas). Cuando firmas tu apk es la "clave pública" que es el certificado real que está siendo incrustado.

Por lo tanto, cuando actualice su aplicación, siempre debe usar el mismo "alias", no solo el mismo "almacén de claves". En cuanto a por qué los desarrolladores tendrían múltiples "alias" en su almacén de claves, no estoy seguro del beneficio que no sea lo que usted y otros han declarado.

Y la única manera en que puede firmar con un alias diferente sería clonar el anterior como también lo sugiere la respuesta.

También he confirmado que al firmar una APK con alias diferentes (desde la misma Tienda de claves) se generará una APK diferente signing signatures que debería ser una prueba de que "alias" diferentes s = certificado diferente. How to get your signing sig (< - nota: no sé a qué método de Trace.i se refieren, utilicé Log.i en su lugar)

+0

Tengo que aceptar que la respuesta aceptada puede malinterpretarse. Después de investigar más, entiendo que un "alias" es solo un "nombre" para una entrada clave en el almacén de claves. Crear una clave con alias 'clave1' y otra clave en la misma tienda con alias 'clave2', no los hace intercambiables. Aunque puede cambiar el alias (nombre) o la contraseña en cualquiera y no afectar su firma, en última instancia son dos claves separadas. NO son alias para el keystore en sí. – JRomero

+1

Confirmo que la firma con un único almacén de claves pero diferentes alias crea firmas de firma diferentes. Incluso el mercado de Android no le permite agregar múltiples APK firmados con diferentes alias. –

+0

@Turbo Hice una enmienda a la respuesta aceptada que creo que deja las cosas más claras. –

3

Estaba haciendo algunas pruebas, y aunque parece importar qué tecla utiliza en el almacén de claves, cambiar el alias de la clave y el nombre del archivo del almacén de claves en realidad no parecen importarle al teléfono. Si tienes curiosidad, cambié el alias con keytool-iui que obtuve de aquí: http://code.google.com/p/keytool-iui/

Para responder al PO, diría que es útil si trabajas en una gran empresa con múltiples divisiones escribiendo su propia aplicaciones. Así que Wilson's Widgets podría tener un keystore de wilsonwidgets.keystore, y podría haber un departamento interno con una clave "widgetmakers", y un departamento con una clave "widgetdelivery", y otro departamento con una clave "hrdepartment". Cada departamento podría evitar que el otro departamento actualice su aplicación, pero la compañía misma tiene todas las claves almacenadas en un almacén de claves que se puede respaldar en una ubicación.

Personalmente, firmo cada aplicación con un almacén de llaves diferente, todas en el mismo almacén de claves. Lo hago así que si Google decide comprar una de mis aplicaciones, puedo romper esa única clave y dárselas sin tener que venderlas por completo o regenerar las claves para las otras aplicaciones. Siendo realistas ... solo estoy perdiendo tiempo y esfuerzo ...suspiro

+1

Tenga en cuenta que al firmar las aplicaciones con diferentes claves sacrificará la interoperabilidad de "permisos basados ​​en firmas" entre sus aplicaciones. No pude encajar mi comentario aquí, así que lo publiqué como respuesta. Estoy de acuerdo con votarte de todos modos –

6

Tenga en cuenta que al firmar las aplicaciones con diferentes claves está sacrificando la interoperabilidad de "permisos basados ​​en firmas" entre sus aplicaciones.

Extracto de Android - Signing Your Applications - Signing Strategies

El sistema Android proporciona la aplicación de permisos basados ​​en firmas, para que una aplicación puede exponer funcionalidad a otra aplicación que está firmado con un certificado especificado. Al firmar varias aplicaciones con el mismo certificado y usando controles de permisos basados ​​en firmas , sus aplicaciones pueden compartir código y datos de manera segura .

+0

Acabo de recibir 2 votos por votos sin comentarios. ¡Gracias! La comunidad SO aprecia tus contribuciones. –

+0

¿Pero realmente necesitan interoperabilidad? Al igual que podemos entender para Gmail y Inbox. Necesitan hablar entre ellos. Pero, ¿calcula Calculator y dice que Whatsapp necesita interoperabilidad? Para los 2 tipos diferentes de aplicaciones que quizás nunca deseen comunicarse entre sí, ¿cuál es la ventaja de firmarlas con la misma clave? – kirtan403

+0

"¿Pero realmente necesitan interoperabilidad?" Eso es para que tú decidas. Solo quiero que tengas la información para que puedas tomar una decisión informada. Trabajé para una compañía de medios que tenía docenas de estaciones de TV y Radio. Cada uno tenía múltiples aplicaciones (transmisión en vivo, clima, tráfico, alarma, etc.) porque fueron desarrollados por diferentes equipos o vendedores. Necesitaban interoperar. NO QUIERE lanzar aplicaciones, pero luego se da cuenta de que la interoperación es imposible sin que los usuarios instalen una aplicación firmada de manera diferente (aka: no es una actualización, vincule al usuario a una nueva instalación) –