Comprensione del keystore, dei certificati e degli alias


95

Il keystore è il certificato effettivo o l'alias è il certificato?

Se utilizzo un alias diverso per firmare la mia app, rovinerà gli aggiornamenti sul mercato? O dovrei firmare la mia app con un keystore diverso per rovinare le cose? E da dove sono visualizzabili le informazioni sotto alias?

Risposte:


127

Il file keystore generato da Keytool memorizza coppie di chiavi private e pubbliche. Ogni coppia o voce memorizzata nel keystore è referenziata da un alias univoco. In breve:

Voce keystore = coppia di chiavi privata + pubblica = identificata da un alias

Il keystore protegge ogni chiave privata con la sua password individuale e protegge anche l'integrità dell'intero keystore con una password (possibilmente diversa).

Ad esempio, quando si firma un'applicazione Android utilizzando l'opzione Esporta pacchetto di applicazioni firmate dello strumento Eclipse Android, viene prima chiesto di selezionare un keystore, quindi viene chiesto di selezionare un singolo alias / voce / coppia da quel keystore. Dopo aver fornito le password sia per il keystore che per l'alias scelto, l'app viene firmata e la chiave pubblica (il certificato) per quell'alias viene incorporata nell'APK.

Ora, per rispondere alla tua domanda, puoi solo rilasciare un aggiornamento a un'applicazione che è stata firmata con l'alias "foo" firmando di nuovo l'aggiornamento con lo stesso alias. La perdita del keystore in cui è archiviato il tuo alias ti impedirebbe di rilasciare una versione aggiornata della tua app.

C'è tuttavia un modo per firmare un'app con un nuovo alias, ma implica la clonazione di un alias esistente nel keystore utilizzando keytool -keyclone :

Crea una nuova voce del keystore, che ha la stessa chiave privata e la stessa catena di certificati della voce originale.

La voce originale è identificata da alias (che per impostazione predefinita è "mykey" se non fornito). La nuova voce (destinazione) è identificata da dest_alias. Se non viene fornito alcun alias di destinazione nella riga di comando, all'utente viene richiesto.

Se la password della chiave privata è diversa dalla password del keystore, la voce verrà clonata solo se viene fornito un keypass valido. Questa è la password utilizzata per proteggere la chiave privata associata all'alias. Se non viene fornita alcuna password della chiave sulla riga di comando e la password della chiave privata è diversa dalla password del keystore, all'utente viene richiesta. La chiave privata nella voce clonata può essere protetta con una password diversa, se lo si desidera. Se non viene fornita l'opzione -new nella riga di comando, all'utente viene richiesta la password della nuova voce (e può scegliere di lasciare che sia la stessa della chiave privata della voce clonata).

Maggiori informazioni:

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

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


3
Il sito di sviluppo suggerisce di utilizzare lo stesso certificato per tutte le tue app. Quindi questo significa che, fintanto che sto usando lo stesso keystore, posso usare qualsiasi alias con qualsiasi password e non rovinerà gli aggiornamenti, poiché è solo un riferimento? Il keystore reale è la parte importante?
Roger

1
Ho riscritto la mia risposta per essere più accurata. In breve, devi infatti utilizzare lo stesso alias per firmare tutti gli aggiornamenti della tua applicazione.
Julio Gorgé

2
@ Julio Quindi, la best practice sarebbe quella di utilizzare lo stesso alias per tutte le diverse app che desideri pubblicare, come suggerisce il sito di sviluppo? Non vedo un motivo per creare un alias separato per tutte le tue app.
Tony Chan

@ JulioGorgé-Hey, volevo solo sapere che R alias-name fa distinzione tra maiuscole e minuscole .. ??
nome è Nilay

@ JulioGorgé intendi lo stesso alias o la stessa chiave. Alias ​​è solo un nome, posso rinominare l'alias. Puoi rilasciare un aggiornamento fino a quando le chiavi (chiavi pubbliche per essere precisi) nell'app corrispondono.
Dheeraj Bhaskar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.