- Was ist ein Upload-Schlüssel?
- Warum Upload-Schlüssel verwenden?
- Aber wie erstellen wir einen Upload-Schlüssel?
- Aber was sind Schlüsselverwendungserweiterungen?
- Wie viele Schlüsselverwendungserweiterungen sind verfügbar und welche sollte ich wählen?
- Wie füge ich nun KU- und EKU-Erweiterungen zu meinem Zertifikat hinzu?
In der modernen Welt, Google Play App wird häufig von Entwicklern verwendet, um ihre Anwendungen mit Google Android zu veröffentlichen. Bei der Veröffentlichung müssen jedoch einige Nuancen beachtet werden, um die Sicherheit zu erhöhen. Eine davon ist ein selbstsigniertes Zertifikat.
Selbstsignierte Zertifikate werden in der TLS-Welt im Allgemeinen nicht verwendet (außer zu Testzwecken). Im Codesign werden sie jedoch weiterhin verwendet. Insbesondere in der Android-Welt wird der selbstsignierte Schlüssel als „Upload-Schlüssel“ verwendet. Lassen Sie uns untersuchen, wie wir den „Upload-Schlüssel“ sicher generieren, aber bevor es …
Was ist ein Upload-Schlüssel?
Der Upload-Schlüssel ist die neue Methode zum Hochladen von APKs (Android Package Kit) in die Google Play App Signing, um sie für Nutzer zu veröffentlichen. Der Upload-Schlüssel stellt das Vertrauen zwischen Ihrem Unternehmen und Google her, um ein Android-Paket hochzuladen. Das Android-Paket muss vor dem Hochladen in die Play Console mit dem Upload-Schlüssel signiert werden. Er unterscheidet sich grundlegend vom App-Signaturschlüssel, mit dem das Android-Paket für die Verteilung signiert wird.
Daher verwendet Play App Signing zwei Schlüssel: den App-Signaturschlüssel und den Upload-Schlüssel. In diesem Artikel beziehen wir uns nur auf den Upload-Schlüssel.
Nachfolgend sehen Sie eine Abbildung zur Veranschaulichung des Signaturablaufs in Android:

Warum Upload-Schlüssel verwenden?
Wenn Sie Ihren App-Signaturschlüssel weiterhin für Ihre Releases verwenden, besteht das Risiko, dass der Schlüssel aufgrund menschlicher Fehler verloren geht. Angenommen, Sie verwenden einen separaten Upload-Schlüssel zum Signieren der Binärdateien, die Sie auf Ihrem Computer erstellen.
In diesem Fall kann der Upload-Schlüssel selbst dann nicht von böswilligen Dritten verwendet werden, wenn er kompromittiert ist, um APKs zu erstellen, die Ihre eigenen imitieren. Daher empfiehlt sich die Verwendung eines separaten Upload-Schlüssels.

Verwenden Sie aus Sicherheitsgründen immer die Option „Schlüssel aus Java Keystore exportieren und hochladen“.
Aber wie erstellen wir einen Upload-Schlüssel?
Zum Generieren eines Upload-Schlüssels werden selbstsignierte Zertifikate verwendet. Wir erläutern zunächst die vereinfachte Methode zur Erstellung eines selbstsignierten Schlüssels über OpenSSL und erläutern anschließend die Schwachstelle und Lösung dieses Ansatzes:
Eine einfache Möglichkeit, einen selbstsignierten Schlüssel über OpenSSL zu erstellen
Generierung des privaten Schlüssels
Zuerst erstellen wir einen privaten Schlüssel. Der folgende Befehl erstellt mit dem OpenSSL-Befehl einen 4096-Bit-RSA-Private-Key (.key):
openssl genrsa -out upload.key 4096

Wenn wir den privaten Schlüssel verschlüsseln möchten, fügen Sie hinzu: -des3 Option zum Befehl.
openssl genrsa -des3 -out upload.key 4096

Ein Nebeneffekt des passwortbasierten privaten Schlüssels besteht darin, dass Apache bei jedem Start des Webservers die Passphrase abfragt. Dies ist natürlich nicht immer praktikabel, da die Person, die die Daten eingibt, nicht immer in der Nähe ist, um die Passphrase einzugeben, beispielsweise nach einem Neustart oder Absturz.
Erstellen einer Zertifikatsignieranforderung
Sie benötigen einen Certificate Signing Request (CSR), wenn Sie Ihr Zertifikat signieren lassen möchten. Der CSR enthält Ihren öffentlichen Schlüssel und weitere Informationen (Organisation, Land usw.).
Lassen Sie uns aus unserem vorhandenen privaten Schlüssel eine CSR (upload.csr) erstellen:
openssl req -key upload.key -new -out upload.csr


Erhalten des Zertifikats von CSR und generiertem Schlüssel
Sobald die CSR und der private Schlüssel generiert sind, besteht der nächste Schritt darin, das Zertifikat zu erstellen. Der folgende Befehl generiert das Zertifikat mit einer Gültigkeit von 365 Tagen:
openssl x509 -req -days 365 -in upload.csr -signkey upload.key -out upload.crt

Das erhaltene Zertifikat liegt im .crt-Format vor und enthält keinen privaten Schlüssel. Wir benötigen jedoch ein .pfx-Format (da es einen privaten Schlüssel enthält), um Dateien zu signieren. Mit dem folgenden Befehl konvertieren wir es in das .pfx-Format:
openssl pkcs12 -inkey upload.key -in upload.crt -export -out upload.pfx
Sobald das Passwort eingegeben wurde, wird eine PFX-Datei generiert.

Diese PFX-Datei soll dann das Android Bundle signieren.
Klingt gut, oder? Die mit diesem Zertifikat signierten Dateien werden jedoch nicht im Playstore akzeptiert. Das liegt daran, dass das selbstsignierte Zertifikat keine Erweiterungen für die Schlüsselverwendung und erweiterte Schlüsselverwendung enthält. Um dies zu überprüfen, öffnen Sie Zertifikate in der MMC (Microsoft Management Console) und laden Sie das Zertifikat-Snap-In. Klicken Sie nach dem Öffnen des Zertifikats auf die Registerkarte Details.

Aber was sind Schlüsselverwendungserweiterungen?
Schlüsselverwendungserweiterungen (KU) definieren den Zweck des in einem Zertifikat enthaltenen öffentlichen Schlüssels. Ein einzelner Schlüssel sollte nur für einen Zweck verwendet werden.
Wie viele Schlüsselverwendungserweiterungen sind verfügbar und welche sollte ich wählen?
Gemäß RFC 5280 (Schlüsselverwendung), die folgenden Schlüsselverwendungserweiterungen sind verfügbar:
- Digitale Unterschrift
- Nicht-Zurückweisung
- Schlüsselverschlüsselung
- Datenverschlüsselung
- Schlüsselvereinbarung
- Zertifikatssignierung
- CRL-Signierung
- Nur verschlüsseln
- Nur entziffern
Ähnlich verhält es sich mit der erweiterten Schlüsselverwendung (EKU). Je nach Anwendungsfall müssen die folgenden Werte ausgewählt werden:
| Erweiterter Schlüssel | Aktivieren Sie diese Schlüsselverwendungserweiterungen |
|---|---|
| TLS-Webserver-Authentifizierung | Digitale Signatur, Schlüsselverschlüsselung oder Schlüsselvereinbarung |
| TLS-Webclient-Authentifizierung | Digitale Signatur und/oder Schlüsselvereinbarung |
| Signieren Sie (herunterladbaren) ausführbaren Code | Digitale Unterschrift |
| E-Mail-Schutz | Digitale Signatur, Nichtabstreitbarkeit und/oder Schlüsselverschlüsselung bzw. Schlüsselvereinbarung |
| IPSEC-Endsystem (Host oder Router) | Digitale Signatur und/oder Schlüsselverschlüsselung bzw. Schlüsselvereinbarung |
| IPSEC-Tunnel | Digitale Signatur und/oder Schlüsselverschlüsselung bzw. Schlüsselvereinbarung |
Ähnlich verhält es sich mit der erweiterten Schlüsselverwendung (EKU). Je nach Anwendungsfall müssen die folgenden Werte ausgewählt werden:
| Erweiterter Schlüssel | Aktivieren Sie diese Schlüsselverwendungserweiterungen |
|---|---|
| IPSEC-Benutzer | Digitale Signatur und/oder Schlüsselverschlüsselung bzw. Schlüsselvereinbarung |
| Zeitstempeln | Digitale Signatur, Nichtabstreitbarkeit. |
Daher benötigen wir für den Anwendungsfall der Code-Signierung Digitale Signatur als Schlüsselverwendung und Code Signing als erweiterte Schlüsselverwendung

Wie füge ich nun KU- und EKU-Erweiterungen zu meinem Zertifikat hinzu?
Um sie hinzuzufügen, müssen wir den folgenden Befehl in OpenSSL ausführen:
openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out server.pem -days 365 -subj /CN=Cert_Name/C=US/OU=Ihre_OU/O=Ihr_Org_Name -addext „keyUsage = digitalSignature“ -addext „extendedKeyUsage = Code Signing“
Kennzahlen:
CN = Allgemeiner Name des Zertifikats (im Allgemeinen der Organisationsname bei der Code-Signierung)
C= Ländername
OU = Organisationseinheit (z. B. Engineering, IT usw.)
O=Name der Organisation

Und dies wird die erforderliche Codesignatur Zertifikat mit Key Usage und Enhanced Key Usage Erweiterung

Dieses Zertifikat kann jetzt erfolgreich zum Hochladen des Android-Pakets in die Google Play App Signing Console verwendet werden.
- Was ist ein Upload-Schlüssel?
- Warum Upload-Schlüssel verwenden?
- Aber wie erstellen wir einen Upload-Schlüssel?
- Aber was sind Schlüsselverwendungserweiterungen?
- Wie viele Schlüsselverwendungserweiterungen sind verfügbar und welche sollte ich wählen?
- Wie füge ich nun KU- und EKU-Erweiterungen zu meinem Zertifikat hinzu?
