Aplicación cliente / servidor Java / Android. Certificados digitales y CAs

0

Actualmente estoy desarrollando una aplicación para Android que permitirá a los usuarios realizar copias de seguridad de sus datos en un servidor, que también estoy desarrollando en Java. Casi he completado el desarrollo de características como la transferencia de archivos, el registro y el inicio de sesión, etc. (la base de datos MySQL mantiene registros de usuarios y contraseñas), etc. Me he detenido en mi desarrollo al intentar implementar funciones de seguridad. Quiero usar la criptografía asimétrica para la autenticación y la criptografía simétrica para cifrar la comunicación entre el cliente y el servidor. Así que aquí está el trato:

La comunicación entre el cliente y el servidor se realizará mediante AES. Esto se basa en una clave precompartida entre ambas partes. Esta clave precompartida se generará en el lado del cliente cada vez que se inicie una sesión y se enviará al servidor, encriptada utilizando la clave pública del servidor. De esa manera, solo el servidor que posee la clave privada podrá descifrar la clave precompartida y leer la comunicación. Donde estoy un poco confundido es compartir la clave pública del servidor. Ahora sé que la mejor manera de hacer esto es usar un certificado digital que contenga la clave pública de los servidores. También sé que este certificado debe provenir de una CA de confianza.

Mi pregunta es, ¿cómo hago para obtener un certificado digital para mi servidor? ¿Mi aplicación de Android solicitará este certificado del servidor o de la CA? Mi idea inicial es que tiene que recibir este certificado de una CA, ya que si lo recibe del servidor, puede ser fraudulento. ¿Cuál es el proceso y la forma correcta de hacer esto? En cualquier lugar que lea, solo se trata de la conexión HTTPS del cliente al servidor web. Estoy escribiendo un servidor en java que se comunicará a través de sockets con mi aplicación de Android. ¿Cómo hago para crear, recibir y verificar certificados en relación con CA confiables?

Gracias

    
pregunta George Windonski 07.04.2016 - 17:03
fuente

1 respuesta

0

Usted dice:

  

Mi idea inicial es que tiene que recibir este certificado de una CA, ya que si lo recibe del servidor, puede ser fraudulento.

Sin embargo, aquí radica el problema con su pensamiento: certificados X.509 están diseñados de tal manera que son manipulables resistente. Si el servidor cambia el certificado, no es válido (con una probabilidad aceptable).

Puede hacerlo de la misma manera que lo hace TLS y dejar que el servidor presente al cliente el certificado para validar. Debido a que está firmado por una CA en la que el cliente confía, puede ser aceptado.

Además, el descargo de responsabilidad habitual:

¿Por qué no usas TLS? Para eso es. Haz ahora tu propio cripto .

    
respondido por el Tobi Nary 07.04.2016 - 17:12
fuente

Lea otras preguntas en las etiquetas