Zum Inhalt

Webinar: Melden Sie sich jetzt für unser kommendes Webinar an!

Jetzt registrieren

Warum funktioniert Ihr Codesignaturzertifikat nicht für die Play App-Signatur?

Warum Ihr Codesignaturzertifikat für die Play App-Signatur nicht funktioniert

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:

Signaturablauf 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.

mit einem separaten Upload-Schlüssel

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

Erstellen Sie einen privaten Schlüssel

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

privater Schlüssel verschlüsselt

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.

Enterprise Code-Signing-Lösung

Holen Sie sich mit unserer Code-Signing-Lösung eine Lösung für alle Ihre kryptografischen Software-Code-Signing-Anforderungen.

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

Erstellen Sie einen CSR
Laden Sie TXT-Dateien hoch

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

Zertifikat mit 365 Tagen Gültigkeit erstellen

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.

.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.

Zertifikatsdetails

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üsselAktivieren Sie diese Schlüsselverwendungserweiterungen
TLS-Webserver-AuthentifizierungDigitale Signatur, Schlüsselverschlüsselung oder Schlüsselvereinbarung
TLS-Webclient-AuthentifizierungDigitale Signatur und/oder Schlüsselvereinbarung
Signieren Sie (herunterladbaren) ausführbaren CodeDigitale Unterschrift
E-Mail-SchutzDigitale 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-TunnelDigitale 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üsselAktivieren Sie diese Schlüsselverwendungserweiterungen
IPSEC-BenutzerDigitale Signatur und/oder Schlüsselverschlüsselung bzw. Schlüsselvereinbarung
ZeitstempelnDigitale 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

Anwendungsfall für Code-Signierung

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

Übersicht über OpenSSL-Befehle

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

erforderliches Code Signing-Zertifikat

Dieses Zertifikat kann jetzt erfolgreich zum Hochladen des Android-Pakets in die Google Play App Signing Console verwendet werden.