J'ai récemment été confronté à un problème de vérification de paquet APK. J'utilise très peu l'OS Android, en fait je l'utilise presque jamais. Sur le système Android virtualisé que j'ai, je n'utilise presque qu'aucune application, en fait je n'en utilise qu'une. Cette application c'est Signal.

Le problème est le suivant : le système Android est dé-googlisé le plus possible, en effectuant un maximum de paramétrages, et du coup il est implicitement hors de question d'utiliser le Store (Magasin) à applications fourni par Google Inc. De toutes façon je ne peux pas, je n'ai pas de nom d'utilisateur Google (comprenez par là que je n'ai pas d'adresse Gmail).

Et donc en partant du principe que l'OS n'est pas pourri jusqu'à la moelle, je dois télécharger manuellement chaque paquet APK que je souhaite installer. Ça va, j'ai connu pire.

Mais qui dit téléchargement de paquet, dit vérifications minimales. C'est le minimum syndical après tout. En plus, le site de l'éditeur fourni toutes les informations requises pour vérifier, alors pourquoi se priver ?

Comment extraire les informations de signature de certificat depuis un paquet APK ?

unzip -p archive.apk META-INF/CERT.RSA | openssl pkcs7 -inform DER -print_certs | openssl x509 -in - -text -noout

Comment vérifier la signature d'un paquet APK pour Android ?

jarsigner -verify archive.apk

(jarsigner est disponible dans le RPM java-1.8.0-openjdk-devel qu'il faudra installer)

Comment vérifier la somme de contrôle (CHECKSUM) du certificat présent dans l'archive ?

unzip -p archive.apk META-INF/CERT.RSA | openssl pkcs7 -inform DER -print_certs | openssl x509 -in - -fingerprint -sha256 -noout

Note pour la précédente commande : remplacer l'option -sha256 par -sha512 ou -sha1 selon l'empreinte fournie par l'éditeur du paquet.

Quelle joie de constater que ça matche avec ce qui est affiché sur le site de l'éditeur. J'espère que ce petit pense-bête vous sera utile, moi à chaque mise à jour de Signal, je rame comme d'hab... :D