Fundamentos sobre certificados digitales (II)

Como comentamos en la entrada Fundamentos sobre certificados digitales el protocolo SSL es un estándar de transmisión de datos seguros sobre Internet empleado en diversos protocolos de la capa de aplicación y protocolos de la capa de transporte (TCP) como medio para establecer conexiones seguras. El protocolo SSL funciona empleando certificados de clave asimétrica del mismo tipo que los expuestos con anterioridad.

Pasemos a describir cual es el funcionamiento básico de SSL, empleando un ejemplo que detalle los pasos para establecer una conexión segura HTTPS entre un cliente y un servidor web dotado de dicha capacidad.

En primer lugar, el cliente establece conexión con el servidor mediante su puerto HTTPS (de forma estándar el 443), para lo cual realiza una solicitud de inicio de sesión segura. A continuación, el servidor devuelve un certificado en formato X.509, que constituye su clave pública. Tras verificar que los datos del certificado son correctos, el cliente procede a generar una clave simétrica aleatoria, que es la que se empleará en la transmisión de datos, cifra esta clave con la clave pública del servidor y la envía al mismo. Tras la recepción, tanto el cliente como el servidor han establecido una conexión segura empleando una clave simétrica para su sesión; en caso de que se finalizara la sesión, bien por cierre de la misma o bien por timeout se desechará dicha clave y se renegociará una nueva en la siguiente conexión. A continuación se muestra un pequeño diagrama de su funcionamiento.

Una vez explicado a grandes rasgos cual es el funcionamiento del protocolo, y entendiendo que el mismo no sólo facilita confidencialidad sino que también ayuda a asegurar la identidad del sitio remoto, la verdadera duda que nos debería asaltar es la siguiente: ¿cómo sé que el certificado descargado es real y no se ha generado de forma fraudulenta?

Actualmente cualquiera puede generar un par de claves pública/privada asociadas al dominio que considere oportuno y asociarlos a SSL, de modo que podría establecer un servicio web con un certificado fraudulento imitando un servidor legítimo y así poder realizar cualquier acción maliciosa contra los clientes que, engañados, accedieran a su servicio.

Ante esta problemática aparecen las Autoridades de Certificación (CA), organismos directamente encargados de generar certificados digitales de cualquier tipo, desde firma digital hasta certificados de servidor SSL. Se trata de entidades autorizadas y reconocidas que generan certificados. En todos y cada uno de los certificados SSL (en base al protocolo X.509) se establece un emisor (issuer) que es la entidad que ha generado el certificado. Verificando el emisor, así como los certificados involucrados en la cadena de confianza se puede asegurar si el certificado lo ha emitido dicha entidad y de este modo se puede clasificar en base a la confianza que se deposita en dicha entidad. En base a este principio, si un certificado se ha emitido por una Autoridad de Certificación reconocida, se establece una cadena de confianza que asegura que dicho certificado es legítimo; es esta información la que emplean los navegadores comerciales.

Esta validación queda reflejada en el diagrama de funcionamiento de SSL en la línea discontinua (y que antes intencionadamente no se ha comentado). Profundizaremos en mayor detalle sobre el funcionamiento de las Autoridades de Certificación, formatos de certificado X.509 y cadena de confianza en próximas entradas.

Por último y para dotar a todos los curiosos que hayan leído esta entrada de un método fácil para identificar certificados no seguros en nuestras conexiones HTTPS con cualquier navegador, plantearemos dos ejemplos para distinguirlos. Utilizaremos Firefox, aunque en todos los navegadores funciona prácticamente igual.

Ejemplo de certificado reconocido: www.bankia.es

Como se puede observar en el área remarcada, aparece un candado verde con la identidad del propietario del certificado. Si pinchamos en dicha área e inspeccionamos el certificado obtendremos un resultado semejante al mostrado en la imagen siguiente, en el que se identifica el propietario del certificado, la Autoridad de Certificación emisora y su periodo de validez.

Ejemplo de Certificado no reconocido (en este caso mantendremos en secreto la identidad del sitio web):

Como se puede observar nuestro navegador, al detectar una irregularidad en el certificado nos solicita nuestro permiso explícito para aceptar dicho certificado a pesar de que sea no confiable.

Y con esto es todo. En próximas entradas del blog trataremos también verificaciones adicionales, como verificar la cadena de confianza de un certificado, saber qué protocolos de cifrado (o de generación de clave asimétrica) se emplean, el funcionamiento de una CA, etc. Es muy importante siempre que se vaya a enviar información confidencial o realizar una compra por Internet verificar en primer lugar si se establece un cifrado, y si el certificado emitido es confiable.

Espero que os haya gustado y quedo a la espera de vuestros comentarios.

Comments

  1. Quedaría comentar los ocsp y las listas de revocación .

  2. Anímate, Damià ;)

  3. David Cutanda says

    No solo queda comentar OCSP y CRL, en próximas entradas se comentará adicionalmente cual es la infraestructura de una PKI (cadena de confianza), reconocimiento de autoridades de certificación, gestión del ciclo de vida del certificado, medidas de seguridad aplicables a estas entidades… En cualquier caso muchas gracias por vuestras sugerencias! :)

  4. Excelente continuación. Me está ayudando muchísimo a comprender mejor como funcionan los certificados. Precisamente hoy en este post -> http://www.csirtcv.gva.es/es/noticias/comprueba-la-calidad-de-la-implementaci%C3%B3n-ssl-de-cualquier-sitio.html hablan de como testear la “calidad” de un certificado digital. ¿La habéis probado antes? -> https://www.ssllabs.com/ssltest/index.html

  5. David Cutanda says

    Hola Carlos, pues la verdad es que no conocía el enlace que nos comentas, y me parece muy práctico; seguiré probándolo ;). Gracias por tu valoración y tu aportación, me alegro mucho de que estas entradas te estén resultando útiles.

  6. Buenas David,

    Muy interesante, como dicen por aquí, estaría bien tratar el tema de la ofuscación de protocolo y los PKI, cosa de la que no cuento con suficiente información y me vendría muy bien.

    Seguiré esto de cerca.

    Saludos

Trackbacks

  1. […] Como comentamos en la entrada Fundamentos sobre certificados digitales el protocolo SSL es un estándar de transmisión de datos seguros sobre Internet empleado en diversos protocolos de la capa de a…  […]