Kann ich dieselbe Keystore-Datei verwenden, um zwei verschiedene Anwendungen zu signieren?

87

Ich muss eine neue Anwendung hochladen. Es ist nur das Design, das etwas anders ist. Gestern habe ich die Keystore-Datei zum Signieren der Anwendung generiert. Kann ich das gleiche verwenden?

Raluca Lucaci
quelle
5
Ja, Sie können (haben Sie es auch versucht, bevor Sie gefragt haben?)
njzk2

Antworten:

92

Sie können dies keystorefür eine beliebige Anzahl von Anwendungen verwenden.

Es ist nicht erforderlich, einen neuen Schlüsselspeicher zu generieren.

Chirag
quelle
6
Und was soll ich für 'Alias' schreiben?
Dr. Jacky
10
Ein Schlüsselspeicher enthält die öffentlichen / privaten Schlüsselpaare, aus denen ein Signaturzertifikat besteht. Ein Schlüsselspeicher kann viele Schlüsselpaare enthalten. Ein 'Alias' ist ein Verweis auf ein bestimmtes Schlüsselpaar im Schlüsselspeicher. Ein Schlüsselspeicher kann alle Ihre Schlüsselpaare enthalten, Sie sollten jedoch ein Schlüsselpaar pro App haben. Verwenden Sie den Namen der App, die Sie signieren, als Alias. Sie können separate Kennwörter für Ihren Schlüsselspeicher und für jedes darin enthaltene Schlüsselpaar festlegen. Sie können diese Kennwörter ändern und Schlüsselpaare aus dem Schlüsselspeicher importieren / exportieren oder Ihrem Schlüsselspeicher neue Schlüsselpaare hinzufügen. Dies geschieht alles mit dem Befehlszeilenbefehl 'keytool'. Schlag es nach.
Brycewjohnson
@brycewjohnson Können neue Paare über eine GUI zum Keystore hinzugefügt werden?
CinCout
42

Ich werde ein Gegenargument zur bisherigen Konsensantwort vorbringen.

Ich bin damit einverstanden, dass für die meisten App-Autoren die meiste Zeit das Teilen des gleichen Schlüsselspeichers / Zertifikats / Passworts zwischen Ihren Apps funktioniert. Entscheidend ist, " dasselbe Zertifikat während der erwarteten Lebensdauer Ihrer Anwendungen zu verwenden ", damit die App selbst ein Upgrade durchführen kann.

Aber ich kann mir einen sehr guten Grund vorstellen, separate Keystores für separate Apps oder Familien von Apps zu haben. Wenn Sie der Meinung sind, dass Sie jemals eine App an eine andere Person verkaufen möchten, damit diese diese als Upgrade des Originals veröffentlichen kann, müssen Sie ihnen Ihren einzigen Keystore und Ihr Kennwort mitteilen. Wahrscheinlich kein großes Problem, aber ein bisschen Sorge für Sie und vielleicht ein Due-Diligence-Problem für einen ausreichend großen Käufer.

Außerdem lese ich wirklich nicht dieselbe Zeile in der Dokumentation wie @ol_v_er. Ich denke die aktuelle Zeile:

Sie sollten alle Ihre Apps während der erwarteten Lebensdauer Ihrer Anwendungen mit demselben Zertifikat signieren.

(Beachten Sie das Fehlen eines Kommas in der aktuellen Version) betont lediglich, dass die Empfehlung "Lebensdauer" für alle Apps gilt und Sie nicht dazu anweist, für alle Ihre Apps dasselbe Zertifikat zu verwenden.

Anne Gunn
quelle
6
Es sollte der richtige Weg sein, für jede App separate Keystores zu führen!
Sufian
42

Die offizielle Dokumentation sagt uns:

Im Allgemeinen besteht die empfohlene Strategie für alle Entwickler darin, alle Ihre Anwendungen während der erwarteten Lebensdauer Ihrer Anwendungen mit demselben Zertifikat zu signieren. Es gibt mehrere Gründe, warum Sie dies tun sollten ...

https://developer.android.com/studio/publish/app-signing.html#considerations

Versuchen Sie also, alle Ihre Anwendungen mit demselben Zertifikat zu signieren.

ol_v_er
quelle
8
Und was soll ich für 'Alias' schreiben?
Dr. Jacky
6
Verwenden Sie zur Vereinfachung auch für alle Ihre Apps dasselbe.
ol_v_er
18

Ich möchte hier einige Klarstellungen hinzufügen, da diese Frage und die Antworten zu Verwirrung bei mir führen. Es ist wichtig zu verstehen, was ein Keystore eigentlich ist.

Ein Keystore ist nur ein Mittel zum sicheren Speichern des öffentlichen / privaten Schlüsselpaars, mit dem Ihre Android-Apks signiert werden. Also ja, Sie können denselben Keystore verwenden , um problemlos mehrere Apks zu signieren. Sie können auch denselben Alias ​​verwenden (jeder Alias ​​ist ein Zertifikat), um mehrere Apks zu signieren. Dies funktioniert. Dies hat jedoch Auswirkungen auf die Sicherheit. Wenn Ihr einzelner Alias ​​gefährdet ist, sind alle Ihre Apps gefährdet.

Wenn Sie jedoch beabsichtigen, eines Tages die Rechte an Ihren Apps zu verkaufen, ist es möglicherweise keine gute Idee, für alle Ihre Apps denselben Alias ​​zu verwenden. Die Verwendung desselben Keystores, sofern Sie für jedes Apk einen anderen Alias ​​verwenden, ist jedoch möglicherweise nicht unbedingt eine schlechte Option. Ich bin sicher, es gibt eine Möglichkeit, ein Zertifikat von einem Schlüsselspeicher in einen anderen zu verschieben, damit Sie Ihrem Käufer sicher die erforderlichen Schlüssel nur für dieses Zertifikat geben können.

Um es ganz klar zu machen, ein Keystore ist genau das, ein Speichermedium für Schlüssel. Es spielt keine eigentliche Rolle beim Signieren einer Apk, sondern dient nur zum Speichern der Schlüssel, die tatsächlich zum Signieren der Apk verwendet werden.

Verweise:

Grundlegendes zu Keystore, Zertifikaten und Alias

https://www.digitalocean.com/community/tutorials/java-keytool-essentials-working-with-java-keystores

Anthony Stivers
quelle
1
Bitte posten Sie keine identischen Antworten auf mehrere Fragen. Schreiben Sie eine gute Antwort und stimmen Sie ab, um die anderen Fragen als Duplikate zu schließen. Wenn die Frage kein Duplikat ist, passen Sie Ihre Antworten auf die Frage an.
Paul Roub
Entschuldigung. Ich bin ein Noob für SO.
Anthony Stivers
1
Ich habe nicht genug Repräsentanten, um für ein Duplikat zu stimmen. Wenn Sie also die folgenden Fragen als Duplikate abstimmen möchten, ist diese Frage meiner Meinung nach am besten geeignet, um das Nicht-Duplikat zu sein. Es ist der erste Rang in Google für die relevanten Keywords und hat die relevantesten Antworten. stackoverflow.com/questions/13023509/… stackoverflow.com/questions/14973205/… stackoverflow.com/questions/10514597/…
Anthony Stivers
Warten! Wie kann ich denselben Keystore mit unterschiedlichem Alias ​​für jede App verwenden?!
Ziad H.
5

Natürlich! Sie können dieselbe Keystore-Datei beliebig oft verwenden. Es ist immer besser, für alle von Ihnen entwickelten Anwendungen dieselbe Keystore-Datei zu verwenden. Dies ist hilfreich, wenn Sie die Anwendung aktualisieren oder ändern möchten. Zu diesem Zeitpunkt müssen Sie Ihre Bewerbung mit demselben Schlüssel signieren.

Rohit
quelle
2

Ich signiere alle meine Apps mit demselben Zertifikat (Keystore). Dies bietet einen Vorteil, wenn ich meine Meinung ändere und möchte, dass meine Apps ihre Daten teilen.

Wie Sie vielleicht wissen, identifiziert Android jede App mit einer UID. Wenn alle Ihre Apps mit demselben Zertifikat signiert sind, können Sie Android auffordern, derselben Benutzer-ID mehr als eine App zuzuweisen und sie in einem einzigen Prozess auszuführen und die Daten gemeinsam zu nutzen.

Von Android Doc Android: sharedUserId

android: sharedUserId

Der Name einer Linux-Benutzer-ID, die für andere Anwendungen freigegeben wird. Standardmäßig weist Android jeder Anwendung eine eigene eindeutige Benutzer-ID zu. Wenn dieses Attribut jedoch für zwei oder mehr Anwendungen auf denselben Wert festgelegt ist, haben alle dieselbe ID - vorausgesetzt, sie sind auch mit demselben Zertifikat signiert. Anwendungen mit derselben Benutzer-ID können auf die Daten des jeweils anderen zugreifen und auf Wunsch im selben Prozess ausgeführt werden

Sujith
quelle