Que es el protocolo SSL
Por triliton
  
Jueves, 20/04/2017
Introducción
El protocolo SSL (Secure Sockets Layer) fue diseñado con el objeto de proveer privacidad y confiabilidad a la comunicación entre dos aplicaciones. Este se compone de dos capas:
SSL Record Protocol. Está ubicada sobre algún protocolo de transporte confiable (como por ejemplo TCP) y es usado para encapsular varios tipos de protocolos de mayor nivel.
SSL Handshake Protocol. Es uno de los posibles protocolos que pueden encapsularse sobre la capa anterior y permite al cliente y al servidor autenticarse mutuamente, negociar un algoritmo de cifrado e intercambiar llaves de acceso.
Una de las ventajas del SSL es que es independiente del protocolo de aplicación, ya que es posible ubicarlo por encima del mismo en forma transparente.

Propiedades
Las conexiones realizadas por medio de este protocolo tienen las siguientes propiedades básicas:
Privada. Después de un proceso inicial de "handshake" en el cual se define una clave secreta, se envía la información encriptada por medio de algún método simétrico (DES, RC4).
Segura. La identidad de cada extremo es autenticada usando métodos de ciftrado asimétricos o de clave pública (RSA, DSS).
Confiable. El transporte del mensaje incluye un control de la integridad del mismo usando una MAC cifrada con SHA y MD5.

Objetivos
Los objetivos del protocolo SSL son, en orden de prioridad:

Descripción
SSL es un protocolo estratificado, por lo que en cada capa se le agregan a los mensajes campos con distintos tipos de contenido, como el largo de los mismos, algún tipo de descripción y la información propiamente dicha. Éste toma los mensajes a transmitir, los fragmenta en bloques de un tamaño conveniente, los comprime en caso de ser necesario, les aplica una MAC, los cifra y el resultante de todo esto lo transmite al otro extremo. El proceso inverso implica el descifrado, verificación, descompresión, rearmado y entrega a los clientes de las capas superiores de los datos recibidos.
Una sesión SSL posee diferentes estados y es responsabilidad del SSL Hanshake Protocol la coordinación de los mismos entre el cliente y el servidor para que ambos funcionen en forma consistente, a pesar del hecho que no estén exactamente en paralelo. Además, cada sesión SSL puede tener múltiples conexiones seguras y cada parte puede tener múltiples sesiones seguras.

El estado de las sesiones incluye los siguientes elementos:

El estado de las sesiones incluye los siguientes elementos:
Otro tipo de información que puede ser intercambiada son las alertas, de las cuales se encarga la capa SSL Record Layer. Los mensajes de alerta poseen niveles de importancia y una descripción de las mismas. Algunas pueden llegar a provocar que una sesión sea cerrada. Como ocurre con otros mensajes, se encuentran encriptados y comprimidos.

Los mensajes de alerta pueden ser de los siguientes tipos

Los parámetros de cifrado del estado de una sesión son generados por el protocolo SSL Handshake Protocol, el cual funciona por encima del SSL Record Layer. Cuando un cliente y un servidor inician una conexión, se ponen de acuerdo en la versión del protocolo y el algoritmo de cifrado, en ocasiones se autentican entre sí, y usan técnicas de cifrado de clave pública para generar los secrets compartidos. Estos procesos son llevados a cabo por el protocolo de hanshake, el cual puede ser resumido como: El cliente envía un mensaje Client Hello al cual el servidor debe responder con un mensaje Server Hello, en caso contrario ocurrirá un error fatal y la conexión fallará. Estos mensajes son usados para establecer los siguientes atributos: Protocol Version (versión del protocolo), Session ID (identificador de la sesión), Cipher Suite (conjunto de cifrado), y Compression Method (método de compresión). Adicionalmente, se intercambian dos valores generados al azar: ClientHello.random y ServerHello.random.
Luego, el servidor enviará sus certificados en caso que deba autenticarse y un mensaje de intercambio de claves si se le es requerido. Después de esto solicitará los certificados al cliente (sólo si es necesario), enviará un mensaje Server Hello Done, indicando que la fase de saludo inicial ha terminado y esperará la respuesta del cliente. El cliente enviará su certificado o un mensaje de alerta en caso de no poseerlo y su mensaje de intercambio de clave, cuyo contenido dependerá del algoritmo de clave pública seleccionado en la primera instancia. Si el cliente envió un certificado con posibilidad de ser firmado, un certificado de verificación firmado digitalmente será enviado en esta instancia.

Aquí, un mensaje de cambio de Cipher Spec es enviado por el cliente, guardándolo en estado pendiente. Inmediatamente después envía el mensaje terminado bajo los nuevos algoritmos, claves y secrets. En respuesta, el servidor enviará su propio mensaje de cambio de Cipher Spec, lo transferirá de pendiente a corriente y enviará el mensaje de terminado bajo la nueva Cipher Spec. En este punto, el proceso de handshake se ha completado y las partes pueden comenzar a intercambiar información.

Cuando el cliente y el servidor deciden retomar una sesión previa o duplicar una existente en lugar de negociar nuevos parámetros de seguridad, el flujo de mensajes es el siguiente:

El cliente envía un ClientHello usando la SessionID de la sesión que será retomada. Entonces el servidor controla su cache de sesiones y si la encuentra y está dispuesto a restablecerla bajo el estado especificado, enviará un ServerHello con el mismo valor de ServerID. En este punto, ambos cliente y servidor deben enviar mensajes de cambio de Cipher Spec proceder directamente a los mensajes terminados. Una vez que el proceso termina, el cliente y el servidor pueden comenzar a intercambiar datos de la capa de aplicación. Si no se encuentra la SessionID en el cache, el servidor genera una nueva SessionID y se realiza un proceso de handshake completo.

Los mensajes con datos de las aplicaciones son llevados por la capa SSL Record Layer en forma transparente y son fragmentados, comprimidos y encriptados de acuerdo al estado de la conexión.


Por triliton