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