web-dev-qa-db-fra.com

Comment savoir quel magasin de clés a été utilisé pour signer une application?

J'ai une application signée et plusieurs fichiers de clés. J'aimerais mettre à jour l'application. Je dois donc déterminer laquelle des clés a été utilisée.

Comment puis-je faire correspondre le fichier de clés utilisé à l'origine pour signer mon application avec les différents fichiers de clés que j'ai sur ma machine?

221
xliiv

Commencez par décompresser le fichier APK et extrayez le fichier /META-INF/Android_.RSA (ce fichier peut également ê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 digitales 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 l'outil de clé pour imprimer tous les alias de votre magasin de clés de signature:

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

Vous obtiendrez une liste des alias et leur empreinte digitale 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 magasin de clés et avec l'alias "Android_key".

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

359
azgolfer

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

Signature d'un APK

keytool -list -printcert -jarfile app.apk

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

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

Signature d'un magasin de clés

keytool -list -v -keystore release.jks

La sortie révélera les alias (entrées) du fichier de clés release.jks, avec les empreintes de certificat (MD5, SHA1 et SHA256).

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

278
Paul Lammertsma

Pour donner suite à la réponse de Paul Lammertsma, cette commande imprimera les noms et les signatures de tous les fichiers APK du répertoire en cours (j'utilise sh car, plus tard, je dois diriger 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 vous souciez 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
16
Artem Russakovskii

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

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

Cela affichera uniquement le DN. Par conséquent, si vous avez deux certificats avec le même DN, vous devrez peut-être comparer par empreinte digitale.

11
Nikolay Elenkov

Il existe de nombreux logiciels gratuits pour examiner les certificats et les magasins de clés tels que KeyStore Explorer .

Décompressez l'apk et ouvrez le fichier META-INF/?. RSA. ? doit être CERT ou Android ou peut être autre chose. Il affichera toutes les informations associées à votre apk.

6
mhanifa