Determinar el certificado de firma de un APK
He creado un APK firmado de Eclipse para Android. Quiero saber qué tipo de certificado RSA se utiliza en ese APK firmado como RSA-1024 o RSA 2048.
¿Cómo puedo saber que desde el archivo APK?
- Solicitud HTTP de SSL de Android mediante cert auto-firmado y CA
- OkHttp certificado de confianza
- ¿Por qué vuelve Volley a SSLV3?
- Error de libcurl CURLE_SSL_CACERT_BADFILE en android
- Certificados WebView y SSL
EDIT Título cambiado de "¿Qué certificado RSA se utiliza en APK firmado en Eclipse? ¿Cómo saber tamaño de clave RSA (1024/2048)?"
- Error de certificado de cliente con Jelly beans
- Android - Error al conectar con URI de inicio de sesión
- Cliente SSL en Android
- Alerta de seguridad de Google Play para TrustManager inseguro
- Javax.net.ssl.SSLException: Error de lectura: ssl = 0x9524b800: Error de E / S durante la llamada al sistema, Conexión restablecida por pares
- Ssl en android tema extraño
- Reutilizando sesiones SSL en Android con HttpClient
- Charles ssl certificado de descarga no "debido a fallos de red"
¿Qué certificado RSA se utiliza en APK firmado en Eclipse?
Bajo Eclipse durante la depuración (y en ausencia de otra clave), firmará con la clave predeterminada de depuración de Android.
Eclipse lo crea si no está presente. La clave se agrega a debug.keystore
, con una contraseña de tienda y clave de android . Consulte Firmar en modo de depuración en la firma de Android de su aplicación .
Usted puede firmar con algunas herramientas, incluyendo keytool
o jarsigner
. Pero creo que usted necesita utilizar otra herramienta para examinar el certificado en el APK.
Puede utilizar OpenSSL para volcar los bits relevantes desde su PKCS # 7, pero necesita extraer manualmente los archivos relevantes del APK.
Para firmar, uso jarsigner
cuando trabajo de la línea de comando. Por ejemplo, en Windows con la clave de depuración:
jarsigner -verbose -keystore C:\Users\<user>\.android\debug.keystore \ -storepass android -keypass android -digestalg SHA1 \ -sigalg SHA1withRSA <package name>.apk androiddebugkey
Eclipse se comporta de forma similar bajo el IDE.
No puede utilizar jarsigner
para volcar la información. Por ejemplo, lo siguiente imprimirá el nombre subjectPublicKeyInfo
, pero no imprimirá el bloque subjectPublicKeyInfo
:
$ jarsigner -verbose -certs -verify Test.apk
Del mismo modo, no puede utilizar keytool
porque no imprime el bloque subjectPublicKeyInfo
:
$ keytool -printcert -file META-INF/CERT.RSA
Para determinar el certificado en el APK, debe examinar un par de archivos. Los archivos de interés se encuentran en el directorio META_INF
del APK. Las firmas están en un archivo .SF
junto con un archivo .RSA
(o .DSA
archivo .DSA
) para cada firmante. El archivo .RSA
del firmante (o el archivo .DSA
) son sólo formato PKCS # 7.
Digo "las firmas están en …" porque los elementos individuales del APK están firmados, y no el APK entero. Así que classes.dex
obtiene firmado, AndroidManifest.xml
obtiene firmado, cada icono en res/
obtiene firmado, etc
Nota: mientras jarsigner
admite varias firmas, Android solo admite un firmante (si lo recuerdo correctamente).
He aquí un ejemplo con un APK llamado CrackMe.apk que usa OpenSSL.
$ mkdir APK-test $ mv CrackMe.apk APK-test $ cd APK-test
A continuación, descomprima el APK. Es sólo un archivo ZIP con metadatos adicionales en META-INF/
.
$ unzip -a CrackMe.apk $ ls AndroidManifest.xml META-INF res CrackMe.apk classes.dex resources.arsc
A continuación, eche un vistazo en el directorio META-INF
.
$ cd META-INF/ $ ls CERT.RSA CERT.SF MANIFEST.MF
Las firmas están en CERT.SF
, y el firmante está en CERT.RSA
.
Por último, utilice OpenSSL para analizar 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
También puede usar -pubkey
cuando utilice x509
para extraer el formato PEM de clave pública:
$ 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-----
Si está interesado en el código de validación APK de Android, consulte collectCertificates
de PackageParser.java
.
- Jackson ObjectMapper Definiciones de definiciones conflictivas (Android.Graphics.Bitmap)
- Android studio v0.3.2, gradle, google maps v2.0 No encontró la clase "com.google.android.gms.maps.MapFragment