Quale certificato RSA viene utilizzato nell'APK firmato in Eclipse?
In Eclipse durante il debug (e in assenza di un'altra chiave), si firma con la chiave di debug Android predefinita.
Eclipse lo crea se non è presente. La chiave viene aggiunta a debug.keystore
, con un negozio e password chiave di android. Vedi Accesso alla modalità di debug su Android Signing Your Application.
È possibile iscriversi con un paio di strumenti, tra cui keytool
o jarsigner
. Ma credo che sia necessario utilizzare un altro strumento per esaminare il certificato nell'APK.
È possibile utilizzare OpenSSL per eseguire il dump dei bit rilevanti dal suo PKCS # 7, ma è necessario estrarre manualmente i file pertinenti dall'APK.
per la firma, io uso jarsigner
quando si lavora da riga di comando. Ad esempio, in Windows con il codice di debug:
jarsigner -verbose -keystore C:\Users\<user>\.android\debug.keystore \
-storepass android -keypass android -digestalg SHA1 \
-sigalg SHA1withRSA <package name>.apk androiddebugkey
Eclipse esegue simile per voi sotto l'IDE.
È non uso jarsigner
possibile per scaricare le informazioni. Ad esempio, il seguente sarà stampare il nome distinto, ma non lo farà stampa il blocco subjectPublicKeyInfo
:
$ jarsigner -verbose -certs -verify Test.apk
Allo stesso modo, è non può uso keytool
perché non stampare il blocco subjectPublicKeyInfo
sia :
$ keytool -printcert -file META-INF/CERT.RSA
Per determinare il certificato nel APK, è n per vedere un paio di file. I file di interesse si trovano nella directory META_INF
dell'APK. Le firme si trovano in un file .SF
insieme a un file .RSA
(o al file .DSA
) per ciascun firmatario. Il file .RSA
del firmatario (o il file .DSA
) è solo in formato PKCS # 7.
Dico "le firme sono in ..." perché i singoli elementi dell'APK sono firmati e non l'intero APK.Così classes.dex
ottiene firmato, AndroidManifest.xml
ottiene firmato, ogni icona nel res/
viene firmato, ecc
Nota: mentre jarsigner
supporta firme multiple, Android supporta solo un firmatario (se ricordo bene).
Ecco un esempio con un APK chiamato CrackMe.apk utilizzando OpenSSL.
$ mkdir APK-test
$ mv CrackMe.apk APK-test
$ cd APK-test
Quindi decomprimere l'APK. È solo un file ZIP con metadati aggiuntivi in META-INF/
.
$ unzip -a CrackMe.apk
$ ls
AndroidManifest.xml META-INF res
CrackMe.apk classes.dex resources.arsc
Avanti, date un'occhiata nella directory META-INF
.
$ cd META-INF/
$ ls
CERT.RSA CERT.SF MANIFEST.MF
Le firme sono in CERT.SF
, e il firmatario è in CERT.RSA
.
Infine, utilizzare OpenSSL per analizzare CERT.RSA
.
$ openssl pkcs7 -in CERT.RSA -inform DER -print_certs | openssl x509 -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1346030704 (0x503acc70)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=US, ST=NY, L=New York, O=Unknown, OU=Unknown, CN=Example, LLC
Validity
Not Before: Aug 27 01:25:04 2012 GMT
Not After : Dec 5 01:25:04 2035 GMT
Subject: C=US, ST=NY, L=New York, O=Unknown, OU=Unknown, CN=Example, LLC
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (3072 bit)
Modulus:
00:8d:a8:9a:34:84:d5:72:4f:e8:e7:69:78:e4:17:
13:93:e8:c5:23:a0:93:a7:f8:6c:58:3d:f0:ed:30:
...
c1:2d:5e:9f:a4:79:56:19:7d:26:4d:27:6a:3e:26:
c0:fd:6a:ed:24:e9:62:80:73:8d
Exponent: 65537 (0x10001)
Signature Algorithm: sha1WithRSAEncryption
80:c0:ac:a5:65:13:f3:2d:dd:d5:71:82:7c:2e:72:63:72:cf:
76:49:4b:09:3c:12:e7:d6:9b:3d:53:8b:d4:e0:9c:ff:f2:d6:
...
80:4d:9b:15:3f:82:1a:72:b2:4b:fd:05:2b:e7:36:f0:43:98:
80:b7:8f:6c:fd:64
È inoltre possibile utilizzare -pubkey
quando si utilizza x509
per estrarre il formato PEM chiave pubblica:
$ openssl pkcs7 -in CERT.RSA -inform DER -print_certs | openssl x509 -noout -pubkey
-----BEGIN PUBLIC KEY-----
MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAjaiaNITVck/o52l45BcT
k+jFI6CTp/hsWD3w7TAoGMA4RyH1pNcLD3ZZLXqdCPGKzKf107YhmiSp9K3DALG+
AHorHroKsnmGJFXglIEOLAq7gBVrfxOiBAxr0HW4MLXXGMvr2Asq4AkJAbFFmApU
5I3bGv3DCApHBbH6B10V5gTT0VzbkxHAejqNJVIHBmi6ueKLKh5ytJeRZufgD3ZX
+uEszGfJrD48woXkqSlCOyxHSi4PWyHLm95OXYkvlBSudNt5q9yDuy+KkJgrSHLC
jwxISkM2JzEoWYhqNqRgosBv6pg16+97YPeE6tHoG6dHazjCClhr5oZxw/7t6969
8rZ8m/fcLf3cOtcApqOFhCViq0ddADrOxMD2Qsp/xHx1kUg7eprE6dOEvQKr4oT5
oBiJkOStnAQFWRw/GDFTqpvDsYSOKn64/1cJ/+NEeLw4y+HCTMcNAsPknBQlXxNc
hzX0zSqrJ+vBLV6fpHlWGX0mTSdqPibA/WrtJOligHONAgMBAAE=
-----END PUBLIC KEY-----
Se interessato al codice di validazione APK Android, vedi collectCertificates
da PackageParser.java
.
Perché hai bisogno di saperlo? Inoltre, perché non cerchi semplicemente il sito web degli sviluppatori Android invece di fare una domanda qui? – Squonk
Stiamo sviluppando app in Android nativo e Action Script. Stiamo ricevendo errore di Open SSL da Google. In Action Script abbiamo selezionato una opzione del certificato RSA. Quindi vogliamo sapere quale certificato è utilizzato in Android nativo. Grazie. :) –
Generate il certificato che include una coppia di chiavi come da istruzioni sul sito Android. Quindi dovresti sapere la risposta. –