Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Qué tan seguros son los certificados SSL de clientes en una aplicación para móviles?

Me gustaría tener una comunicación segura entre mi aplicación Android / iOS y mi servicio de back-end accesible por Internet, así que estoy investigando HTTPS / SSL.

Si creo certificados autofirmados, a continuación, poner un certificado de cliente en la aplicación y hacer que el servicio de back-end para exigir que el certificado de cliente, esto es realmente seguro ?

He aquí por qué estoy preguntando. Parece que el certificado de cliente podría ser "hackeado" al interrogar al .apk. El certificado de cliente es sólo una constante de cadena, ¿verdad? Eso significa que cualquier persona podría utilizar el certificado del cliente para tener acceso a mi backend. ¿Es el .apk (y el equivalente de iOS) lo suficientemente opaco para evitar que se descubra el certificado de cliente ?

5 Solutions collect form web for “¿Qué tan seguros son los certificados SSL de clientes en una aplicación para móviles?”

El certificado es inofensivo. Es la clave privada que necesita protección, y sólo es tan seguro como el dispositivo en sí, no es más seguro. Distribuir el certificado y la clave privada con la aplicación sólo significa que cualquier persona que tiene la aplicación tiene la clave, por lo que no le proporciona ninguna seguridad en absoluto. Creo que necesitas algún tipo de paso de registro posterior a la instalación.

¿Está haciendo la autenticación del lado del cliente con certificados sobre SSL? No es que realmente importe para esta pregunta. Cualquier clave privada que almacenes en tu aplicación es accesible para un atacante. Cada cliente debe tener su propio certificado y el par de claves, para evitar un compromiso masivo. Su servidor también debe hacer cumplir las protecciones, asegurando que un cliente comprometido no puede solicitar nada.

Esto es cierto para cualquier esquema de autenticación. Si incrusta contraseñas, claves API, claves de descifrado, lo que sea. Se supone que cualquier cosa en el dispositivo es accesible.

La seguridad añadida de certificados en parte proviene de no haber nada a la fuerza bruta. Si usted fue la ruta de nombre de usuario / contraseña para cada cliente, las contraseñas se pueden adivinar. Lo mismo con las claves API (aunque sean más largas y más duras). Con los certificados, es una clase totalmente diferente de ataques, y un problema considerablemente más difícil.

Pero, lo más importante, el servicio de back-end no debe permitir que la aplicación haga algo que normalmente no haría.

Ahora, tratando con los certificados, usted va a tener una serie de otros problemas. Es probable que desee firmar cada certificado de cliente con su certificado CA autenticado. Administrar ese certificado de CA puede ser problemático, dependiendo de su caso de uso. ¿Vas a generar estos certificados de clientes sobre la marcha, o manualmente usted mismo? Es decir, ¿es una aplicación que un millón de personas pueden descargar y necesita un sistema automatizado para generarlas? ¿O es una aplicación privada / interna que personalmente manejará la generación de certificados?

Normalmente, los certificados SSL de cliente se almacenan en almacenes de claves (BKS formateado en el caso de Android) y el almacén de claves se incluye como un recurso dentro de su APK. Los almacenes de claves están encriptados y protegidos con una contraseña. Por lo tanto, ese certificado de cliente no se puede extraer fácilmente de un APK, ya que se almacena en forma cifrada.

Ahora … ¿qué haces con la contraseña? Aquí está el quid de la cuestión y usted tiene dos alternativas.

Si desea que su aplicación pueda comunicarse con el servidor (por lo tanto, para poder acceder al certificado) sin la interacción del usuario, tendrá que incrustar la contraseña en su aplicación y, a continuación, sí, un atacante podría ingeniería inversa de su código Para encontrarlo, tome el almacén de claves y, a continuación, descifrarlo para recuperar el certificado. Puede aplicar técnicas como ocultar su código para que sea más difícil para un atacante hacerlo, pero esto sólo ralentizará a alguien y no lo evitará.

Su alternativa es solicitar al usuario una contraseña cada vez que la aplicación se comunique con el servidor y utilizarla para descifrar el almacén de claves (o preguntar cuándo se iniciará la aplicación y almacenar el certificado en caché durante un período de tiempo determinado). La ventaja aquí es que si alguien invierte ingenieros en su APK, encontrarán el almacén de claves cifrado y ninguna contraseña para que su certificado sea seguro. La desventaja es que el usuario proporcione la contraseña.

¿Cuál es el mejor enfoque? Depende completamente de la sensibilidad de los datos que le interesan y del nivel de riesgo que está dispuesto a aceptar. Sólo usted puede contestar a esa pregunta.

Daniel Guillamot, algunos trucos que he venido:

Me encantaría saber más si alguien tiene otras ideas.

APK se puede acceder y copiar, por lo que poner nada en ella no ayudará. Activación y tal vez la obligación del certificado para el dispositivo después de la instalación sería necesario. La vinculación puede realizarse, por ejemplo, colocando el IMEI del dispositivo en una de las extensiones de certificado y pasando el IMEI junto con el certificado por su aplicación (o, mejor, pase IMEI después de la autenticación y el establecimiento del canal seguro).

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.