keytool: Keystore-Management und App-Signierung für Android
June 29, 2020
Dieses Dokument bietet eine Übersicht der wichtigsten keytool-Befehle für das Management von Keystores und das Signieren von Android-Anwendungen. Der Fokus liegt auf dem korrekten Umgang mit dem App Signing Key und dem Upload Key im Kontext von Google Play App Signing.
App Signing Key vs. Upload Key
Google Play App Signing verwendet zwei Schlüssel, um die Sicherheit Ihres App-Signaturprozesses zu erhöhen:
- App Signing Key: Dies ist der kryptographische Schlüssel, mit dem Google Play Ihre App signiert, bevor sie an Nutzer ausgeliefert wird. Dieser Schlüssel wird sicher in der Infrastruktur von Google verwaltet und darf niemals kompromittiert werden.
- Upload Key: Dies ist ein separater Schlüssel, den Sie generieren und für das Signieren Ihrer App-Bundles oder APKs verwenden, bevor Sie diese in die Play Console hochladen.
Hauptunterschiede
| Eigenschaft | App Signing Key | Upload Key |
|---|---|---|
| Zweck | Signiert die finale App für Endnutzer | Signiert den Upload in die Play Console |
| Verwaltung | Wird von Google Play sicher verwaltet | Liegt in der Verantwortung des Entwicklers |
| Wiederherstellung | Kann nicht ersetzt werden | Kann bei Verlust zurückgesetzt werden |
| Sicherheit | Höchste Sicherheitsstufe, bleibt bei Google | Dient als zusätzliche Schutzschicht |
Neuen Keystore erzeugen
Verwenden Sie diesen Befehl, um ein neues Schlüsselpaar in einem Keystore zu generieren.
keytool -genkeypair -v -keyalg RSA -keysize 4096 -validity 10000 \
-keystore KEYSTORE_OUTPUT_FILE.keystore -alias KEY_ALIAS
-genkeypair: Erzeugt ein neues Schlüsselpaar (privater und öffentlicher Schlüssel).-keyalg RSA: Definiert den Algorithmus. RSA ist der Standard für Android.-keysize 4096: Die Schlüsselgröße in Bits (2048 ist ebenfalls verbreitet).-validity 10000: Die Gültigkeitsdauer des Zertifikats in Tagen (ca. 27 Jahre).-keystore: Der Dateiname für den zu erstellenden Keystore.-alias: Ein eindeutiger Name für den Schlüssel innerhalb des Keystores.
Hinweis: Seit JDK 9 ist
PKCS12das Standard-Keystore-Format. Hierbei müssen das Keystore-Passwort und das Schlüssel-Passwort identisch sein.
Vollautomatische Erstellung (ohne interaktive Abfragen)
Für den Einsatz in Skripten können alle Informationen als Parameter übergeben werden:
keytool -genkeypair -v -keyalg RSA -validity 10000 \
-dname "cn=FIRSTNAME LASTNAME, ou=ORG_UNIT, o=ORG, c=COUNTRY_CODE" \
-keystore "KEYSTORE_OUTPUT_FILE.keystore" \
-storepass "KEYSTORE_PASSWORD" \
-alias "KEY_ALIAS"
Keystore-Details anzeigen
Dieser Befehl listet den Inhalt eines Keystores auf, einschließlich des Typs (PKCS12 oder JKS) und der Zertifikats-Fingerprints (SHA-1, SHA-256).
keytool -list -v -keystore KEYSTORE_OUTPUT_FILE.keystore
Upload-Zertifikat exportieren (PEM)
Für die Konfiguration eines eigenen Upload Keys in der Google Play Console muss das zugehörige Zertifikat im PEM-Format exportiert werden.
keytool -export -rfc \
-keystore IHR_UPLOAD_KEYSTORE.jks \
-alias IHR_UPLOAD_KEY_ALIAS \
-file upload_certificate.pem
Passwörter ändern
Alias-Passwort ändern
keytool -keypasswd -keystore KEYSTORE_NAME.keystore \
-alias KEY_ALIAS -storepass KEYSTORE_PASSWORD \
-keypass ALTES_KEY_PASSWORT -new NEUES_KEY_PASSWORT
Keystore-Passwort ändern
keytool -storepasswd -keystore KEYSTORE_NAME.keystore \
-storepass ALTES_STORE_PASSWORT -new NEUES_STORE_PASSWORT
Keystore-Format konvertieren (JKS zu PKCS12)
Ältere Keystores im JKS-Format können in das modernere PKCS12-Format konvertiert werden.
keytool -importkeystore \
-srckeystore alter_keystore.jks \
-destkeystore neuer_keystore.keystore \
-deststoretype pkcs12
Best Practices
- Backups: Erstellen Sie stets sichere Offline-Backups Ihres Keystores.
- Schlüsseltrennung: Verwenden Sie immer die von Google Play empfohlene Trennung von App Signing Key und Upload Key.
- Passwortsicherheit: Vermeiden Sie die Speicherung von Passwörtern in der Shell-History oder in Klartextdateien.
- CI/CD-Integration: Verwalten Sie Keystore-Passwörter über sichere Environment-Variablen oder Secret-Management-Systeme.