Grundlegendes zu Keystore, Zertifikaten und Alias

95

Ist der Schlüsselspeicher das eigentliche Zertifikat oder ist der Alias ​​das Zertifikat?

Wenn ich meine App mit einem anderen Alias ​​signiere, werden dann Updates auf dem Markt durcheinander gebracht? Oder müsste ich meine App mit einem anderen Keystore signieren, um die Dinge durcheinander zu bringen? Und woher sind die Informationen unter Alias?

Roger
quelle

Antworten:

127

Die von Keytool generierte Keystore-Datei speichert Paare von privaten und öffentlichen Schlüsseln. Jedes im Schlüsselspeicher gespeicherte Paar oder Eintrag wird durch einen eindeutigen Alias ​​referenziert. In Kürze:

Schlüsselspeichereintrag = privat + öffentliches Schlüsselpaar = durch einen Alias ​​gekennzeichnet

Der Schlüsselspeicher schützt jeden privaten Schlüssel mit seinem individuellen Kennwort und die Integrität des gesamten Schlüsselspeichers mit einem (möglicherweise anderen) Kennwort.

Wenn Sie beispielsweise eine Android-Anwendung mit der Option "Signiertes Anwendungspaket exportieren" des Eclipse Android-Tools signieren, werden Sie aufgefordert, zuerst einen Schlüsselspeicher und dann einen einzelnen Alias ​​/ Eintrag / Paar aus diesem Schlüsselspeicher auszuwählen. Nachdem Sie die Kennwörter für den Keystore und den ausgewählten Alias ​​angegeben haben, wird die App signiert und der öffentliche Schlüssel (das Zertifikat) für diesen Alias ​​in die APK eingebettet.

Um Ihre Frage zu beantworten, können Sie ein Update für eine Anwendung, die mit dem Alias ​​'foo' signiert wurde, nur freigeben, indem Sie das Update erneut mit demselben Alias ​​signieren. Wenn Sie den Schlüsselspeicher verlieren, in dem Ihr Alias ​​gespeichert ist, können Sie keine aktualisierte Version Ihrer App veröffentlichen.

Es gibt jedoch eine Möglichkeit, eine App mit einem neuen Alias ​​zu signieren. Dabei wird jedoch ein vorhandener Alias ​​im Keystore mit keytool -keyclone geklont :

Erstellt einen neuen Schlüsselspeichereintrag mit demselben privaten Schlüssel und derselben Zertifikatskette wie der ursprüngliche Eintrag.

Der ursprüngliche Eintrag wird durch einen Alias ​​identifiziert (standardmäßig "mykey", falls nicht angegeben). Der neue (Ziel-) Eintrag wird durch dest_alias identifiziert. Wenn in der Befehlszeile kein Zielalias angegeben wird, wird der Benutzer dazu aufgefordert.

Wenn sich das Kennwort für den privaten Schlüssel vom Kennwort für den Schlüsselspeicher unterscheidet, wird der Eintrag nur geklont, wenn ein gültiger Tastaturpass angegeben wird. Dies ist das Kennwort, mit dem der mit dem Alias ​​verknüpfte private Schlüssel geschützt wird. Wenn in der Befehlszeile kein Schlüsselkennwort angegeben wird und sich das Kennwort für den privaten Schlüssel vom Kennwort für den Schlüsselspeicher unterscheidet, wird der Benutzer dazu aufgefordert. Falls gewünscht, kann der private Schlüssel im geklonten Eintrag mit einem anderen Kennwort geschützt werden. Wenn in der Befehlszeile keine neue Option angegeben wird, wird der Benutzer aufgefordert, das Kennwort des neuen Eintrags einzugeben (und kann festlegen, dass es dem privaten Schlüssel des geklonten Eintrags entspricht).

Mehr Informationen:

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

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

Julio Gorgé
quelle
3
Die Dev-Site schlägt vor, für alle Ihre Apps dasselbe Zertifikat zu verwenden. Bedeutet dies also, dass ich, solange ich denselben Keystore verwende, einen beliebigen Alias ​​mit einem beliebigen Kennwort verwenden kann und Updates nicht durcheinander gebracht werden, da es sich nur um eine Referenz handelt? Der eigentliche Keystore ist der wichtige Teil?
Roger
1
Ich habe meine Antwort umgeschrieben, um genauer zu sein. Kurz gesagt, Sie müssen tatsächlich denselben Alias ​​verwenden, um alle Aktualisierungen Ihrer Anwendung zu signieren.
Julio Gorgé
2
@Julio Wäre es also die beste Vorgehensweise, für alle verschiedenen Apps, die Sie veröffentlichen möchten, denselben Alias ​​zu verwenden, wie auf der Entwickler-Website vorgeschlagen? Ich sehe keinen Grund, einen separaten Alias ​​für alle Ihre Apps zu erstellen.
Tony Chan
@ JulioGorgé-Hey, ich wollte nur wissen, dass bei R-Alias-Namen zwischen Groß- und Kleinschreibung unterschieden wird.
Name ist Nilay
@ JulioGorgé meinst du den gleichen Alias ​​oder den gleichen Schlüssel. Alias ​​ist nur ein Name, ich kann den Alias ​​umbenennen. Sie können ein Update veröffentlichen, solange die Schlüssel (öffentliche Schlüssel, um genau zu sein) in der App übereinstimmen.
Dheeraj Bhaskar