¿Hay alguna forma de comprobar si la firma de una aplicación está depurada o publicada?
Actualmente estoy desarrollando servicios RPC para que los desarrolladores los utilicen, pero me gustaría asegurarme de que puedo distinguir entre la clave de depuración de otra aplicación y su clave pública. ¿Hay alguna manera de comprobar la clave de otra aplicación y decir si es una clave de depuración y no una clave de aplicación publicada?
El propósito de esto es ser capaz de decir cuando su aplicación está en desarrollo o liberar el estado, ya que tengo que ser capaz de decir si deben acceder a mi servidor de desarrollo o mi servidor de producción.
- ¿Qué protege las contraseñas de AccountManager de Android de ser leídas por otras aplicaciones?
- ¿Cómo puedo verificar si otra aplicación del sistema es genuina?
- ¿Cómo se puede comprobar el permiso en tiempo de ejecución sin lanzar SecurityException?
- Seguridad de aplicaciones móviles híbridas
- XmlHttpRequest problema de publicación doble en Android
- ¿Cómo la emulación de tarjeta basada en software (HCE) garantiza la seguridad NFC?
- Prácticas recomendadas (lo mejor para Android): autenticar a un usuario con acceso a Facebook o Google
- ¿Cómo verifica facebook la autenticidad de la aplicación con hash clave?
- Cómo detener el ataque hack / DOS en la API web
- ¿Cómo puedo restringir el acceso a mi API REST sólo a clientes autorizados?
- Xamarin Código de Seguridad
- ¿Cómo guarda de forma segura una orden en la nube, si no puede verificar el pago desde la nube?
- Proteger una API REST para su uso por clientes Android
De forma predeterminada, el androiddebugkey utilizado por Eclipse (por ejemplo) tiene una fecha y una hora de notAfter
que es como máximo 1 año en el futuro; un valor tan corto no es aceptado por el Android Market. ¿Podría utilizarlo para diferenciar entre las creaciones firmadas por el desarrollador? O .. usted podría comprobar el publickey que la aplicación utiliza – que firmar las solicitudes RPC con el android.content.pm.Signature de su aplicación?
PackageInfo pkgInfo = getPackageManager (). GetPackageInfo (getPackageName (), PackageManager.GET_SIGNATURES); Para (Firma appSignature: pkgInfo.signatures) { // javax.security - NO java.security! X509Certificate appCertificate = X509Certificate.getInstance (appSignature.toByteArray ()); // appCertificate.getNotAfter () puede darle la fecha y la hora en que expira el cert // appCertificate.getPublicKey () puede darle la clave pública con la que firma las solicitudes RPC. // appCertificate.getSubjectDN () le dará un Director llamado "CN = Android Debug, O = Android, C = US" para cualquier certificado de depuración que no haya sido hecho a mano por el desarrollador. }
static final String DEBUGKEY = " key "; public static boolean signedWithDebugKey(Context context, Class<?> cls) { boolean result = false; try { PackageInfo pinfo = context.getPackageManager().getPackageInfo("your package name",PackageManager.GET_SIGNATURES); Signature sigs[] = pinfo.signatures; Log.d(TAG,sigs[0].toCharsString()); if (DEBUGKEY.equals(sigs[0].toCharsString())) { result = true; Log.d(TAG,"package has been signed with the debug key"); } else { Log.d(TAG,"package signed with a key other than the debug key"); } } catch (android.content.pm.PackageManager.NameNotFoundException e) { return false; } return result; }
Ejecute este código por primera vez con debugkey, esto siempre devolverá false, pero obtendrá la clave codificada en el Logcat. Copiar esa clave codificada, y reemplazar el valor "clave" de DEBUGKEY, y funcionará bien.
- Enumeración de carpetas y archivos con Google Drive SDK V2
- ¿Ha cambiado el código de idioma estadounidense? Google Speech Api v2 no devuelve el resultado correcto