Tengo un cliente (una aplicación móvil) y un servidor, la aplicación se conecta al servidor a través de SSL.
El servidor utiliza un certificado autofirmado y el cliente tiene un archivo (no estoy completamente seguro de qué, algo que ver con bks y la verificación del nombre de host) que valida el certificado.
Por lo que he leído, esto debería evitar los ataques MITM, en cuyo caso, aparte del acceso físico al cliente o el acceso / pirateo físico al servidor, el token de sesión es imposible de usar en un ataque de repetición.
Debido a que los usuarios no desean iniciar sesión ni una vez al mes, el token dura para siempre (a menos que se desconecte o inicie sesión en un nuevo dispositivo), solo puedo pensar en una forma de evitar esto, que es en cada solicitud se devuelve un token nuevo, pero luego un atacante podría robar la sesión de las víctimas.
Entonces, preguntas:
1) ¿Un certificado autofirmado con algún tipo de validación en el cliente (suponiendo que ninguno haya sido manipulado) protege contra ataques MITM?
2) Si no, ¿es posible evitar los ataques de reproducción con tokens de sesión persistentes o detener el secuestro si los tokens se renuevan constantemente?
No me preocupa la manipulación en el lado del cliente como datos, ya que aunque los datos de los usuarios son privados, no se pueden usar para causar más daño.
EDITAR: para aclarar, me refiero a los ataques de repetición usando los tokens de sesión, básicamente estoy tratando de averiguar si usar SSL (para evitar que los atacantes obtengan el token de sesión) es suficiente para evitar los ataques de repetición, o si necesito más validación en los tokens / clientes de sesión, y si es así, ¿qué?