8 votes

Signature d'un apk en tant que système en utilisant les clés trouvées dans source/build/target/product/security/

Comme le titre l'indique, j'essaie de signer mon application en utilisant platform.x509.pem et platform.pk8. Le problème est que je reçois des erreurs lorsque j'utilise keytool-importkeypairs pour les ajouter comme ceci :

keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

Et je reçois également une erreur lorsque j'essaie de signer directement l'APK en utilisant SignApk.jar comme ceci :

java -jar SignApk.jar platform.x509.pem platform.pk8 test-app.apk test-app-signed.apk

Erreur de Keytool-importkeypairs :

Error decrypting key
3074042056:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
3074042056:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO
unable to load private key
3074091208:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: ANY PRIVATE KEY
Importing "platform" with unable to load certificate
3073755336:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE
keytool error: java.lang.Exception: Source keystore file exists, but is empty: /tmp/keytool-importkeypair.vDOP/p12

Sources utilisées : Apk avec des privilèges système , Comment signer une application Android avec la signature système ? (SO) y Comment mettre à jour l'Android dev phone 2 de 1.6 à 2.1
Aucune des méthodes décrites dans les liens ci-dessus ne fonctionne maintenant, comme vous pouvez le constater. Merci d'avance.

12voto

Nikolay Elenkov Points 32843

Vérifiez d'abord le format des fichiers (avec cat ), l'erreur suggère qu'ils ne sont pas dans le format attendu (ASN.1/PEM).

Plus important encore, l'utilisation de ces touches a rarement un sens. Ce sont juste échantillon et toute ROM personnalisée qui se respecte utilisera ses propres touches privé clés. Autrement, n'importe qui peut signer son APK avec la clé de l'APK. public dans l'AOSP et obtiennent tous les privilèges qu'ils veulent. Ce qui est, inutile de le dire, une très mauvaise chose . Si vous avez besoin de développer une application qui utilise les privilèges du système et que vous voulez qu'elle fonctionne sur tous (ou la plupart) des téléphones rootés et des ROMs personnalisées, la bonne façon de procéder est de demander l'accès Root avec su et exécuter ce que vous devez faire dans un shell Root. Si l'utilisateur vous en donne la permission, bien sûr.

EDIT :

Pour déboguer l'erreur d'importation, exécutez cette procédure étape par étape. Cela fonctionne avec les clés AOSP par défaut.

$ openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem
$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -password pass:android -name platform 
$ keytool -importkeystore -deststorepass android -destkeystore test.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android 
$ keytool -list -v -keystore test.keystore

Ce qu'il fait :

  1. Convertit la clé binaire au format PKCS#8 en clé PEM ( openssl pkcs8 )
  2. Crée un fichier PKCS#12 qui comprend à la fois la clé privée et le certificat ( openssl pkcs12 )
  3. Étant donné que le système keytool peut lire les fichiers PKCS#12 comme keystore, il importe votre fichier PKCS#12 pour le convertir effectivement au format natif (BKS ou JKS) ( keytool -importkeystore )
  4. (bonus) Utilisations keytool de lister le contenu afin de s'assurer que tout fonctionne. ( keytool -list )

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