2011-05-09 35 views
5

Estoy desarrollando una aplicación de Android habilitada para red que usa certificados de cliente SSL para autenticar y asegurar las conexiones a mi servidor.Cómo y qué certificado de servidor usar con autenticación de certificado de cliente SSL de Android

Tengo dos preguntas: (1) ¿debo usar un certificado de servidor autofirmado o uno comercial? Y (2) ¿debo incluir el certificado del servidor dentro del archivo apk que instalan los usuarios o debo tener la aplicación conectada a mi servidor para obtener el certificado del servidor a través de la red (con el fin de hacer que el dispositivo confíe en el certificado del servidor)?

Cuando pregunto qué debo "hacer", me pregunto cuáles son los beneficios y las desventajas de cada opción.

Ahora estoy usando un certificado autofirmado incluido con el archivo apk. Cuando el usuario ejecuta la aplicación por primera vez, lee el certificado autofirmado incluido en el almacén de confianza para que el dispositivo se conecte a mi servidor sin quejas. Supongo que si utilizo un certificado comercial, mi pregunta n. ° 2 podría ser irrelevante, ya que el dispositivo puede confiar en el cert del servidor sin problemas.

Otro detalle posiblemente relevante: esta aplicación no se está distribuyendo a través del mercado de Android. Los usuarios descargarán la aplicación de mi servidor, por lo que puedo incluir el certificado de servidor que desee, incluido uno diferente para cada usuario si lo necesito.

Tengo mis propias ideas acerca de las diversas ventajas y desventajas de cada posible respuesta a mis dos preguntas, pero estoy interesado en lo que otros - con suerte la seguridad mental - tienen que decir al respecto.

¡Gracias de antemano!

+1

+1 ya que me enfrento con un problema similar. ¿En qué dirección terminaste? –

+0

Elegí el certificado autofirmado por los siguientes motivos: (1) el beneficio de un cert comercial es el reconocimiento del navegador. Mi aplicación de Android es mi creación, así que puedo incluir cualquier certificado de raíz que desee, por lo tanto, usar un certificado comercial no me da ninguna ventaja marginal. Por otro lado, (2) un certificado comercial introduce un riesgo, ya que ahora no solo soy vulnerable al ataque contra mi seguridad, sino también contra la autoridad de certificación. Si el CA es pirateado, pierde su clave privada o es engañado para que emita un certificado de servidor con mi nombre de dominio, podría sufrir. Poca posibilidad, pero ¿por qué tomarlo? Por último pero no menos importante (3) el dinero. –

Respuesta

1

No veo ninguna razón para no auto-firmar. Sin embargo, habría aumentado un poco y habría creado mi propia autoridad de certificación. Esto le permite asegurarse de que solo se conectará a servidores que tengan certificados firmados por su CA personalizada, que es mucho mejor (es decir, seguridad criptográfica real) que una simple verificación de huellas dactilares del certificado en el servidor.

Aquí hay un ejemplo de cómo crear una CA personalizada utilizando los enlaces OpenSSL de Ruby. El procedimiento es el mismo en la mayoría de los idiomas. https://github.com/augustl/ruby-openssl-cheat-sheet/blob/master/certificate_authority.rb

Por supuesto, también puede usar un certificado de cliente que debe estar firmado por su CA personalizada para que su servidor acepte la solicitud. Tenga en cuenta que esto solo será oscuro: un atacante podrá extraer la clave privada y el certificado CA firmado de su aplicación. Si su aplicación puede realizar solicitudes al servidor, cualquiera puede :)

+0

Si firmo mi propio certificado de servidor, entonces, por definición, estoy actuando como autoridad de certificación. En cuanto a la extracción de claves privadas, el problema que describes no se aplica a mi aplicación, ya que la aplicación genera su propia clave privada la primera vez que el usuario la ejecuta. Lo único que se distribuye con la aplicación es el certificado del servidor y, opcionalmente, un token único insertado en la aplicación para evitar que las personas compartan la aplicación entre ellos. –

Cuestiones relacionadas