Seguridad Web con SSL / TLS

22 octubre 2015

Antes de comenzar la realización de la Práctica 2: Creación de Certificados SSL con Java y Tomcat, conviene tener claros algunos conceptos, vistos con profundidad en durante las clases teóricas:

El Protocolo SSL / TLS

SSL (Secure Sockets Layer) es un protocolo que se sirve de certificados digitales para poder establecer comunicaciones seguras a través de Internet. Basado en las especificaciones de SSL, ha surgido el protocolo TLS (Transport Layer Security) de manera que ambos son totalmente compatibles.

Ambos protocolos permiten confiar la información personal a sitios web ajenos, ya que la información que se les envía se oculta mediante métodos criptográficos cuando se navega en sitios seguros. SSL / TLS es utilizado por bancos, comercios electrónicos o cualquier tipo de servicio web que requiera el envío de datos personales o contraseñas. Evidentemente, no todas las páginas web usan SSL, por este motivo, hay que tener cuidado cuando se navegue por sitios web que no emplean estos protocolos de seguridad.

Concepto de Cifrado

El cifrado es el proceso mediante el cual se transforma la información que se envía, de forma que NO todos los usuarios puedan entenderla. Esta transformación se realiza en base a un elemento único conocido como clave, de esta forma nadie, excepto el poseedor de esta clave, puede leerla. El proceso inverso al cifrado se conoce como descifrado.

Clave Pública y Clave Privada

Las claves pública y privada son un par de claves digitales, asociadas a una persona física o a una entidad o empresa, generadas mediante métodos criptográficos. Este par de claves se genera de manera que:

  • Un mensaje codificado con la clave pública sólo se puede decodificar con la clave privada.
  • Un mensaje codificado con la clave privada sólo se puede descifrar si se conoce la clave pública.

Las claves se pueden aplicar en cualquier orden, Se puede codificar con una u otra indistintamente; y decodificar con la otra. Por ejemplo:

  • A codifica con la clave pública de B un mensaje y se lo envía. Sólo B podrá descifrarlo con su clave privada. De esta forma se asegura la Confidencialidad.
  • A codifica un mensaje con su clave privada y lo envía. Sólo podrán descifrarlo quienes conozcan su clave pública. De esta forma se asegura la Autenticidad.

Firma Digital

Del mismo modo que la firma de nuestro puño y letra, es un elemento que nos identifica y distingue del resto de  personas. De manera que al firmar con ella, se adquieren derechos y obligaciones. La firma digital se genera en base a la clave privada de quien firma, y por lo tanto, es única, y al serlo, garantiza la autenticidad.

De este modo, la firma digital es un método para conseguir autenticidad en comunicaciones basado en el empleo de claves asimétricas (privada y pública).

Procedimiento:

  • Un emisor A encripta un texto con su clave privada
  • Envía por un medio inseguro el mensaje original y el cifrado
  • Cualquier receptor B del mismo puede comprobar que el emisor ha sido A y no otro que lo suplante.
  • ¿Cómo? Desencriptando el texto cifrado con la clave pública de A y comprobando que coincide con el texto sin cifrar.
  • Sólo A conoce su clave privada, por lo que B puede estar seguro de la autenticidad del emisor del mensaje.

Autoridad Certificadora (AC)

Una Autoridad Certificadora (AC, o CA de sus siglas en inglés) es una entidad de confianza, cuya finalidad es garantizar que el poseedor de un certificado digital sea quien dice ser, lo que proporciona confianza a ambas partes en una comunicación segura mediante SSL/TLS. Algunos ejemplos de autoridad certificadora son:

Certificado Digital SSL/TLS

El Certificado Digital es un documento digital único que garantiza la vinculación entre una persona física o entidad/empresa con su clave pública. Dicho documento contiene información sobre su propietario, como puede ser el nombre, la dirección, e-mail, organización a la que pertenece…, y su clave pública. Del mismo modo, el certificado también contiene información acerca del propio documento, como su periodo de validez, número de serie único, nombre de la Autoridad Certificadora que lo emitió, firma digital de la AC cifrada con su clave privada, y más información de cómo se puede usar dicho certificado.

Ahora que se tienen claros estos conceptos, se puede entender el funcionamiento básico del protocolo SSL / TLS.

¿Cómo funciona el protocolo SSL / TLS?

Vamos a verlo con un ejemplo ficticio, supongamos que queremos conectar con el sitio web del banco BBVA bajo una conexión segura. En ese caso, teclearemos en la barra de direcciones de nuestro navegador www.bbva.es. Al acceder al la página del banco veremos que la conexión ya se ha establecido de forma segura bajo el protocolo HTTPS (una combinación entre el protocolo HTTP y el protocolo SSL / TLS), y aparecerá un candado cerrado junto a la URL del sitio.

01

La conexión segura se ha establecido de forma transparente al usuario, pero los pasos que han sucedido para establecer dicha conexión son los siguientes:

1.- El navegador web del usuario realiza una petición al sitio del banco BBVA. En esta petición se envía un mensaje donde comunica que quiere establecer una conexión segura, incluyendo datos sobre la versión del protocolo SSL/TLS que soporta, ademas de otros parámetros necesarios realizar para la conexión.

2.- Tras analizar la información enviada por el navegador del usuario, el servidor web del banco responde con un mensaje informando que va a establecer la conexión segura con los datos de SSL/TLS proporcionados. Una vez que el navegador del usuario y el servidor del banco conocen los parámetros de conexión, el sitio del BBVA presenta su certificado digital al navegador web para identificarse como un sitio de confianza.

SSL_pasos1y2

3.- Cuando el navegador obtiene el certificado del servidor del BBVA, hace varias verificaciones antes de dar su confianza a la página web:

  • Lo primero que hace es verificar la integridad del certificado. Esta operación se realiza descifrando la firma digital que incluye el certificado mediante la clave pública de la Autoridad Certificadora AC y, la compara con una firma del certificado que obtiene en este momento. Si las dos firmas coinciden, significa que el certificado está integro, y por lo tanto, es válido.
  • Después revisa que el certificado sigue vigente, comprobando su periodo de validez. Esto lo hace revisando la fecha de emisión y la fecha de expiración que incluye el certificado.
  • A continuación hace una verificación del emisor del certificado. Para ello, el navegador se vale de una lista de Certificados Raíz almacenados que contienen las claves públicas de las autoridades de certificación conocidas y de confianza. Es posible acceder a esta lista de Autoridades de Certificación de confianza de tu navegador, para el caso de Google Chrome, desde Configuración Avanazada –> Administrar Certificados…

02

  • Buscando la AC en esta lista, el navegador comprueba que el certificado sea de confianza. Si no lo es, mostrará un aviso al usuario, informándole de que el certificado ha sido emitido por una entidad en la que no puede confiar.

SSL_paso3

4.- Tras comprobar que el certificado es de confianza, el navegador transmite al servidor una clave de encriptación única, codificada con la clave pública del servidor.

SSL_paso4

5.- Por último, se produce el desencriptado de la clave de encriptación por el servidor, utilizando su clave privada, y el establecimiento de la conexión segura mediante criptografía simétrica.

SSL_paso5