HTTPS: SSL/TLS Handshake

  • Posted on: 17 January 2024
  • By: ReYDeS

Los parámetros criptográficos sobre el estado de sesión son producidos por el protocolo TLS Handshake, el cual opera sobre la capa de registro TLS. Cuando un cliente y un servidor TLS comienzan a comunicarse por primera vez, acuerdan una versión de protocolo, seleccionan algoritmos criptográficos, opcionalmente se autentican entre sí, y utilizan técnicas para encriptación de clave pública, con el propósito de generar secretos compartidos.

A continuación se detallan el proceso TLS Handshake:

Mensaje "Client Hello": El cliente inicia el handshake enviando un mensaje "hello" hacia el servidor. El mensaje incluirá cual versión de TLS admite el cliente, la suites de encriptación soportados, y una cadena de bytes aleatorios conocida como "client random “.

Mensaje 'Server Hello': En respuesta al mensaje “Client Hello”, el servidor envía un mensaje conteniendo el certificado SSL del servidor, la suite de encriptación seleccionada por el servidor, y el "server random", otra cadena aleatoria de bytes generada por el servidor.

Autenticación: El cliente verifica el certificado SSL del servidor con la autoridad certificadora quien lo emitió. Esto confirma el servidor es quien dice ser, y el cliente está interactuando con el propietario real del dominio.

“premaster secret”: El cliente envía una cadena aleatoria más de bytes, el "premaster secret". Este se cifra con la llave pública, y solo el servidor puede desencriptarlo con la llave privada. (El cliente obtiene la llave pública desde el certificado SSL del servidor).

Llave privada utilizada: El servidor desencripta el “premaster secret”.

Llaves de sesión creadas: Tanto el cliente cuanto el servidor generan llaves de sesión a partir del “client random”, el “server random”, y el “premaster secret” estro. Deberían llegar a los mismos resultados.

El cliente está listo: El cliente envía un mensaje "finished", el cual está encriptado con una llave de sesión.

El servidor está listo: El servidor envía un mensaje "finished" encriptado con una llave de sesión. Se logra un encriptado simétrico seguro: Se completa el handshake, y la comunicación continúa utilizando las llaves de sesión.

Anotar el flujo y el proceso exactos del handshake dependen de la versión de SSL/TLS, como de l suite de encriptación seleccionada. El flujo descrito corresponde a la versión TLS 1.2, y utiliza una negociación de llaves basada en RSA en lugar de Diffie-Helman.

Fuentes:

https://datatracker.ietf.org/doc/html/rfc5246

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor Independiente en Ciberseguridad
Correo Electrónico: ReYDeS@gmail.com
Twitter: https://twitter.com/Alonso_ReYDeS
LinkedIn: https://pe.linkedin.com/in/alonsocaballeroquezada/
Facebook: https://www.facebook.com/alonsoreydes
Youtube: https://www.youtube.com/c/AlonsoCaballero