Actualmente tengo un servicio de seguridad de aplicaciones que se ejecuta en mi empresa y que, en su mayor parte, satisface las necesidades comerciales.Persistencia de sesión SSL y cookies seguras
El problema al que me enfrento actualmente es que el servicio se ha basado tradicionalmente (ingenuamente) en que el IP de origen del usuario permanezca constante como protección contra el secuestro de sesión: las aplicaciones web de la empresa no están disponibles directamente para el público y era en el pasado, era perfectamente aceptable para mí requerir que la dirección de un usuario permanezca constante a lo largo de una sesión determinada.
Desafortunadamente, este ya no es el caso y, por lo tanto, me veo obligado a cambiar a una solución que no dependa de la fuente IP. Preferiría implementar una solución que realmente cumpla con la intención del diseñador original (es decir, evitar el secuestro de la sesión).
Mi investigación hasta ahora ha aparecido this, que básicamente dice "sal a tu hash de token de autenticación con la clave de sesión SSL".
A primera vista, parece una solución perfecta, pero me queda la sospecha de que la implementación de este esquema en el mundo real no es práctica debido a la posibilidad de que el cliente y el servidor puedan hacerlo en cualquier momento arbitrariamente: opte por renegociar la sesión SSL y, por lo tanto, cambie la clave.
Este es el escenario que estoy imaginando: Sesión de
- SSL establecida y la clave acordada.
- El cliente se autentica en el servidor a nivel de la aplicación (es decir, a través del nombre de usuario y la contraseña).
- El servidor escribe una cookie segura que incluye la clave de sesión SSL.
- Se produce algo que provoca una renegociación de la sesión. Por ejemplo, creo que IE hace esto en un temporizador con o sin un motivo.
- El cliente envía una solicitud al servidor que contiene la antigua clave de sesión (dado que no había conocimiento de nivel de aplicación de la renegociación, no había oportunidad de escribir un nuevo hash actualizado en el cliente).
- Server rechaza la credencial del cliente debido a desmenuzar el fracaso partido, etc.
Es éste un problema real o se trata de un malentendido por mi parte debido a una (por decir lo menos) a menos que perfecta comprensión de ¿Cómo funciona SSL?
Pero esta solución caché no resolvería el problema de que el cliente de repente utiliza una nueva clave de sesión SSL que la aplicación no sabe nada. El cliente debería decir "ahora uso una nueva clave de sesión SSL" o el servidor tiene que informar a la aplicación sobre un cambio clave. – Gumbo
No, el cliente solo enviaría una cookie basada en la clave de sesión anterior (la renegociación de la sesión no borraría la cookie). La sal solo está ahí para que sea difícil de adivinar, podría ser cualquier cosa. La clave de sesión SSL es útil, del tamaño correcto y adecuadamente entrópica. – MarkusQ
@MarkusQ, no estoy seguro de cómo resuelve el problema si realmente copio la cookie de la máquina A a la máquina B y luego me disfrazo como máquina A (sobre una nueva sesión SSL) – vladr