306 votes

Comment puis-je savoir quel keystore a été utilisé pour signer une application ?

J'ai une application qui est signée et plusieurs fichiers keystore. J'aimerais mettre à jour l'application, et j'ai donc besoin de savoir laquelle des clés a été utilisée.

Comment puis-je faire correspondre le keystore utilisé pour signer initialement mon application avec les différents keystores que je possède sur mon ordinateur ?

0 votes

Je ne sais pas si vous pouvez le trouver ou non, mais si vous signez l'application avec une mauvaise clé, la console du développeur (où vous publiez les applications) vous dira que c'est une mauvaise clé. Vous pouvez les essayer tous.

0 votes

Il y a une clé publique "developer console" > "Edit Profile". Puis-je l'utiliser pour m'aider ?

0 votes

Comment recréer le fichier keystore s'il a été supprimé accidentellement ?

468voto

azgolfer Points 6806

Tout d'abord, décompressez l'APK et extrayez le fichier /META-INF/ANDROID_.RSA (ce fichier peut aussi être CERT.RSA, mais il ne doit y avoir qu'un seul fichier .RSA).

Puis lancez cette commande :

keytool -printcert -file ANDROID_.RSA

Vous obtiendrez des empreintes de certificat comme ceci :

     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

Ensuite, utilisez à nouveau le keytool pour imprimer tous les alias de votre keystore de signature :

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

Vous obtiendrez une liste d'alias et leur empreinte de certificat :

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 ! nous pouvons maintenant déterminer que l'apk a été signé avec ce keystore, et avec l'alias 'android_key'.

Keytool fait partie de Java, donc assurez-vous que votre PATH contient le répertoire d'installation de Java.

1 votes

Je vous remercie pour cela. J'ai ajouté un outil pour faire cela à mon projet github. github.com/RichardBronosky/ota-tools/blob/master/

0 votes

Bonjour, je ne comprends pas cette commande ~ keytool -list -keystore my-signing-key.keystore , qu'est-ce que my-signing-key.keystore ?

2 votes

@Thoman my-signing-key.keystore est le nom du fichier keystore contenant les clés utilisées pour signer l'apk.

417voto

Paul Lammertsma Points 12817

Rapport de signature de Gradle

Le moyen le plus simple d'obtenir les informations relatives à la signature de chacune des variantes de votre application est le suivant en utilisant le rapport de signature de Gradle .

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

Signature d'un APK ou d'un AAB

Vous pouvez également utiliser l'outil de gestion des clés et des certificats de Java 7. keytool pour vérifier la signature d'un keystore ou d'un APK sans extraire de fichiers.

# APK file
keytool -printcert -jarfile app.apk

# AAB file
keytool -printcert -jarfile app.aab

La sortie révélera le propriétaire/émetteur de la signature et les empreintes MD5, SHA1 et SHA256 du fichier APK. app.apk ou le fichier AAB app.aab .

(Notez que le -jarfile a été introduit dans Java 7 ; voir la documentation pour plus de détails).

Signature d'un keystore

De même, vous pouvez vérifier la signature du keystore utilisé pour signer votre application.

keytool -list -v -keystore release.jks

La sortie révèlera les alias (entrées) dans le fichier keystore. release.jks avec les empreintes digitales du certificat (MD5, SHA1 et SHA256).

Notez que si vous utilisez Signature de l'application Play si votre clé de téléchargement peut être différente de la clé utilisée par Google Play pour signer votre application. Dans ce cas, vous pouvez trouver la signature de l'application à partir de la console Google Play, sur le site Web de Google Play. Communiqué de presse > Configuration > Intégrité des applications page.

Ce processus est documenté sur le site des développeurs de Google :
https://developers.google.com/Android/guides/client-auth

En conclusion

Si les empreintes SHA1 entre l'APK et le keystore correspondent, vous pouvez être sûr que cette application est signée avec la clé.

1 votes

@goRGon Utilisez-vous Java 7 ou une version ultérieure ?

0 votes

Non. Java 7 a apporté trop de problèmes =) Donc il ne fonctionne que sur Java 7 ? Pourriez-vous le mentionner dans votre réponse ?

2 votes

@goRGon En effet, le -jarfile a été introduit avec Java 7. J'ai mis à jour la réponse.

20voto

Artem Russakovskii Points 7341

Pour compléter la réponse de Paul Lammertsma, cette commande imprimera les noms et les signatures de tous les APKs dans le répertoire actuel (j'utilise sh parce que plus tard je dois envoyer la sortie vers grep) :

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

Exemple de sortie :

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

Ou si vous ne vous souciez que de SHA1 :

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

Exemple de sortie :

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

14voto

Nikolay Elenkov Points 32843

Un moyen beaucoup plus simple de visualiser le certificat de signature :

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

Cela ne montrera que le DN, donc si vous avez deux certificats avec le même DN, vous devrez peut-être comparer par empreinte digitale.

0 votes

Qu'est-ce que DN ? J'ai surtout obtenu beaucoup de lignes comme celle-ci : X.509, CN={prénom et nom} [le certificat est valide de {date du} à {date_to}].

0 votes

DN signifie "Distinguished Name" (nom distinctif). Dans votre cas, il s'agit de la partie "CN={prénom et nom de famille}".

11voto

Nic Dahlquist Points 490

Vous pouvez le faire avec le apksigner qui fait partie du SDK Android :

apksigner verify --print-certs my_app.apk

Vous pouvez trouver apksigner dans le répertoire build-tools. Par exemple : ~/Library/Android/sdk/build-tools/29.0.1/apksigner

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X