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?
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.
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.
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.)
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é.
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
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.
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.