344 Stimmen

Wie kann ich herausfinden, welcher Schlüsselspeicher zum Signieren einer Anwendung verwendet wurde?

Ich habe eine Anwendung, die signiert ist, und mehrere Keystore-Dateien. Ich möchte die App aktualisieren und muss daher herausfinden, welcher der Schlüssel verwendet wurde.

Wie kann ich den Keystore, mit dem meine Anwendung ursprünglich signiert wurde, mit den verschiedenen Keystores auf meinem Rechner abgleichen?

486voto

azgolfer Punkte 14889

Entpacken Sie zunächst die APK und extrahieren Sie die Datei /META-INF/ANDROID_.RSA (diese Datei kann auch CERT.RSA heißen, aber es sollte nur eine .RSA-Datei geben).

Geben Sie dann diesen Befehl ein:

keytool -printcert -file ANDROID_.RSA

So erhalten Sie die Fingerabdrücke der Zertifikate:

     MD5:  B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB
     SHA1: 16:59:E7:E3:0C:AA:7A:0D:F2:0D:05:20:12:A8:85:0B:32:C5:4F:68
     Signature algorithm name: SHA1withRSA

Verwenden Sie dann erneut das Keytool, um alle Aliase Ihres signierenden Schlüsselspeichers auszudrucken:

keytool -list -keystore my-signing-key.keystore

Sie erhalten eine Liste von Aliasen und deren Zertifikatsfingerabdruck:

android_key, Jan 23, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB

Voila! Wir können nun feststellen, dass die apk mit diesem Keystore und dem Alias "android_key" signiert wurde.

Keytool ist Teil von Java, also stellen Sie sicher, dass Ihr PATH das Java-Installationsverzeichnis enthält.

478voto

Paul Lammertsma Punkte 36529

Gradle Signing Report

Der einfachste Weg, die Signierinformationen für jede Variante Ihrer Anwendung auszugeben, ist Verwendung des Gradle Signing Report .

./gradlew signingReport

> Task :app:signingReport
Variant: debug
Config: debug
Store: ~/.android/debug.keystore
Alias: AndroidDebugKey
MD5: A5:88:41:04:8D:06:71:6D:FE:33:76:87:AC:AD:19:23
SHA1: A7:89:E5:05:C8:17:A1:22:EA:90:6E:A6:EA:A3:D4:8B:3A:30:AB:18
SHA-256: 05:A2:2C:35:EE:F2:51:23:72:4D:72:67:A5:6C:8C:58:22:2A:00:D6:DB:F6:45:D5:C1:82:D2:80:A4:69:A8:FE
Valid until: Wednesday, August 10, 2044

Signatur einer APK oder AAB

Alternativ können Sie auch das Schlüssel- und Zertifikatsverwaltungsprogramm von Java 7 verwenden keytool um die Signatur eines Keystore oder einer APK zu überprüfen, ohne Dateien zu extrahieren.

# APK file
keytool -printcert -jarfile app.apk

# AAB file
keytool -printcert -jarfile app.aab

Die Ausgabe zeigt den Eigentümer/Aussteller der Signatur sowie die MD5-, SHA1- und SHA256-Fingerabdrücke der APK-Datei an. app.apk oder AAB-Datei app.aab .

(Beachten Sie, dass die -jarfile Argument wurde in Java 7 eingeführt; siehe die Dokumentation für weitere Einzelheiten).

Signatur eines Schlüsselspeichers

In ähnlicher Weise können Sie die Signatur des Schlüsselspeichers überprüfen, mit dem Sie Ihre Anwendung signiert haben.

keytool -list -v -keystore release.jks

Die Ausgabe zeigt die Aliase (Einträge) in der Keystore-Datei an release.jks mit den Fingerabdrücken der Zertifikate (MD5, SHA1 und SHA256).

Beachten Sie, dass Sie bei der Verwendung von Play App Signing Ihr Upload-Schlüssel kann sich von dem Schlüssel unterscheiden, der von Google Play zum Signieren Ihrer App verwendet wird. In diesem Fall können Sie die Signatur der App in der Google Play-Konsole auf der Seite Freigabe > Einrichtung > Integrität der Anwendung Seite.

Dieser Vorgang ist auf der Google-Entwicklerseite dokumentiert:
https://developers.google.com/Android/guides/client-auth

Zusammenfassend

Wenn die SHA1-Fingerabdrücke zwischen der APK und dem Keystore übereinstimmen, können Sie sicher sein, dass die App mit dem Schlüssel signiert ist.

21voto

Artem Russakovskii Punkte 20909

Um auf Paul Lammertsmas Antwort aufzubauen, wird dieser Befehl die Namen und Signaturen aller APKs im aktuellen Verzeichnis ausgeben (ich verwende sh, weil ich die Ausgabe später an grep weiterleiten muss):

find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}"' \;

Beispielhafte Ausgabe:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
Signer #1:

Signature:

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
         MD5:  D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
         SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
         Signature algorithm name: MD5withRSA
         Version: 1

APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
Signer #1:

Signature:

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
         MD5:  D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
         SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
         Signature algorithm name: MD5withRSA
         Version: 1

Oder wenn Sie sich nur für SHA1 interessieren:

find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}" | grep SHA1' \;

Beispielhafte Ausgabe:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00

15voto

Nic Dahlquist Punkte 965

Sie können dies mit der Option apksigner das Teil des Android-SDK ist:

apksigner verify --print-certs my_app.apk

Sie können apksigner im Verzeichnis build-tools finden. Zum Beispiel: ~/Library/Android/sdk/build-tools/29.0.1/apksigner

14voto

Nikolay Elenkov Punkte 52201

Eine viel einfachere Möglichkeit, das Signierzertifikat anzuzeigen:

jarsigner.exe -verbose -verify -certs myapk.apk

Dabei wird nur der DN angezeigt. Wenn Sie also zwei Zertifikate mit demselben DN haben, müssen Sie möglicherweise anhand des Fingerabdrucks vergleichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X