Introducción a HTTPS

El Protocolo Seguro de Transferencia de Hipertexto (en inglés: Hypertext Transfer Protocol Secure, abreviado HTTPS, a menudo llamado HTTP over TLS, HTTP over SSL o HTTP Secure) es un protocolo de transmisión segura en redes. Antes de presentarlo en detalle, primero introduzcamos el HTTP común que solíamos ver. HTTP es un protocolo que usamos normalmente al navegar por páginas web. Los datos transmitidos mediante el protocolo HTTP no están cifrados, es decir, son texto plano, por lo que usar HTTP para transmitir información privada es muy inseguro. HTTP se comunica por el puerto 80, mientras que HTTPS utiliza el puerto 443. En redes de computadoras, HTTPS se comunica a través del Protocolo de Transferencia de Hipertexto (HTTP), pero utiliza SSL/TLS para cifrar los paquetes de datos. El objetivo principal del desarrollo de HTTPS es proporcionar autenticación de identidad para los servidores web y proteger la privacidad e integridad de los datos intercambiados. Este protocolo fue propuesto por primera vez por Netscape en 1994 y luego se extendió a Internet.

Cómo funciona HTTPS

Antes de transmitir datos, HTTPS requiere un apretón de manos (handshake) entre el cliente (navegador) y el servidor (sitio web). Durante el handshake se establecerá la información de contraseña para cifrar los datos transmitidos entre ambas partes. El protocolo TLS/SSL no es solo un conjunto de protocolos de transmisión cifrada, sino una obra de arte cuidadosamente diseñada por artistas. TLS/SSL utiliza cifrado asimétrico, cifrado simétrico y algoritmos HASH. El proceso de handshake se describe específicamente a continuación:

  • 1) El navegador envía al sitio web un conjunto de reglas de cifrado que soporta.
  • 2) El sitio web selecciona un grupo de algoritmos de cifrado y algoritmos HASH, y devuelve al navegador su información de identidad en forma de certificado. El certificado contiene la dirección del sitio web, la clave pública de cifrado, la entidad emisora del certificado y otra información.
  • 3) Después de que el navegador obtiene el certificado del sitio web, debe hacer lo siguiente: a) Verificar la validez del certificado (si la entidad que emitió el certificado es legal, si la dirección del sitio web contenida en el certificado coincide con la dirección a la que se está accediendo, etc.). Si el certificado es confiable, se mostrará un pequeño candado en la barra del navegador; de lo contrario, se mostrará una advertencia de que el certificado no es confiable. b) Si el certificado es confiable, o si el usuario acepta el certificado no confiable, el navegador generará una contraseña de número aleatorio y la cifrará con la clave pública proporcionada en el certificado. c) Calcular el mensaje de handshake utilizando el algoritmo HASH acordado, cifrar el mensaje con el número aleatorio generado y, finalmente, enviar toda la información generada anteriormente al sitio web.
  • 4) Después de recibir los datos enviados por el navegador, el sitio web debe realizar las siguientes operaciones: a) Usar su propia clave privada para descifrar la información y extraer la contraseña, usar la contraseña para descifrar el mensaje de handshake enviado por el navegador y verificar si el HASH coincide con el enviado por el navegador. b) Usar la contraseña para cifrar un mensaje de handshake y enviarlo al navegador.
  • 5) El navegador descifra y calcula el HASH del mensaje de handshake. Si coincide con el HASH enviado por el servidor, el proceso de handshake finaliza. A partir de entonces, todos los datos de comunicación se cifrarán con la contraseña aleatoria generada anteriormente por el navegador y utilizando un algoritmo de cifrado simétrico.

Aquí, el navegador y el sitio web se envían mutuamente mensajes de handshake cifrados y los verifican, con el fin de garantizar que ambas partes hayan obtenido la misma contraseña y puedan cifrar y descifrar datos normalmente, haciendo una prueba para la transmisión de datos real posterior. Además, los algoritmos de cifrado y HASH que se usan generalmente en HTTPS son los siguientes:

  • Algoritmos de cifrado asimétrico: RSA, DSA/DSS
  • Algoritmos de cifrado simétrico: AES, RC4, 3DES
  • Algoritmos HASH: MD5, SHA1, SHA256

El diagrama de secuencia de comunicación correspondiente a HTTPS es el siguiente:

Diferencias entre el protocolo HTTPS y el protocolo HTTP:

  • El protocolo HTTPS requiere solicitar un certificado a una CA. Normalmente hay pocos certificados gratuitos y es necesario pagar.
  • HTTP es el Protocolo de Transferencia de Hipertexto, la información se transmite en texto plano; HTTPS es un protocolo de transmisión cifrada SSL con seguridad.
  • HTTP y HTTPS utilizan métodos de conexión completamente diferentes y también puertos distintos: el primero usa el 80 y el segundo el 443.
  • La conexión HTTP es muy simple y no tiene estado (stateless).
  • El protocolo HTTPS es un protocolo de red construido sobre SSL + HTTP que permite transmisión cifrada y autenticación de identidad, y es más seguro que el protocolo HTTP.

Certificados SSL

Por lo anterior podemos entender que una parte central de HTTPS es el handshake antes de la transmisión de datos, durante el cual se determina la contraseña de cifrado de los datos. En el proceso de handshake, el sitio web envía al navegador un certificado SSL. El certificado SSL es similar al documento de identidad que usamos en la vida diaria; es una identificación del sitio web que admite HTTPS. El certificado SSL contiene el dominio del sitio web, el período de validez del certificado, la entidad emisora del certificado y la clave pública utilizada para cifrar la contraseña de transmisión, entre otra información. Debido a que la contraseña cifrada con la clave pública solo puede ser descifrada por la clave privada generada al solicitar el certificado, el navegador debe verificar primero si el dominio al que se está accediendo coincide con el dominio vinculado en el certificado, y también verificar la entidad emisora del certificado. Si la verificación falla, el navegador mostrará un aviso de error de certificado. En esta parte, describiré el proceso de verificación de los certificados SSL y los problemas de seguridad a los que los usuarios individuales deben prestar atención al usar certificados SSL cuando visitan sitios web HTTPS.

Tipos de certificados

En realidad, los certificados que utilizamos se dividen en muchos tipos; el certificado SSL es solo uno de ellos. El formato de los certificados está definido por el estándar X.509. El certificado SSL se encarga de transmitir la clave pública y es un certificado PKI (Public Key Infrastructure, Infraestructura de Clave Pública). Los certificados comunes que vemos, según su uso, aproximadamente son los siguientes:

  • 1. Certificado SSL, utilizado para cifrar el protocolo HTTP, es decir, HTTPS.
  • 2. Certificado de firma de código, utilizado para firmar archivos binarios, como controladores del núcleo de Windows, complementos de Firefox, firma de código Java, etc.
  • 3. Certificado de cliente, utilizado para cifrar el correo electrónico.
  • 4. Certificado de doble factor: la llave USB (USB Key) utilizada por la banca en línea profesional contiene este tipo de certificado.

Estos certificados son emitidos por entidades emisoras de certificados certificadas, que llamamos autoridades CA (Certificate Authority). Según si se trata de una empresa o de un individuo, los tipos de certificados que se pueden solicitar son diferentes, y los precios también son diferentes. Los certificados emitidos por las autoridades CA son todos certificados confiables. Para los certificados SSL, si el sitio web visitado coincide con el sitio vinculado al certificado, se puede pasar la verificación del navegador sin que se muestre ningún error.

Solicitud y reglas de los certificados SSL

Los certificados SSL se pueden solicitar a una autoridad CA pagando una tarifa, o también se pueden crear uno mismo. Los certificados emitidos por las autoridades CA son muy costosos y su período de validez generalmente varía de uno a tres años (cuantos más años, mayor el precio). Una vez vencidos, hay que volver a pagar para solicitarlos, por lo que generalmente solo las empresas solicitan certificados. Sin embargo, con el aumento de los sitios web personales, actualmente también existen servicios de certificados SSL para individuos, con precios relativamente más bajos. En China, se puede obtener uno por algo más de 400 yuanes, y en el extranjero incluso hay certificados SSL gratuitos que se pueden solicitar. Al solicitar un certificado SSL, es necesario proporcionar a la autoridad CA el dominio del sitio web, la licencia comercial y la información de identidad del solicitante, entre otros. El dominio del sitio web es muy importante: el solicitante debe demostrar que posee el dominio. Si cualquiera pudiera solicitar certificados SSL para Hotmail.com o Gmail.com, los hackers no tendrían que engañar con certificados falsos.

Además, un certificado generalmente solo está vinculado a un dominio. Si la autoridad CA está de buen humor, puede vincular otro gratis. Por ejemplo, si el dominio vinculado al solicitar el certificado es www.example.com, entonces el certificado solo será confiable cuando la dirección del navegador sea https://www.example.com. Si la dirección es https://tt.example.com o https://login.example.com, el certificado, debido a que el dominio visitado es diferente del dominio vinculado al certificado, seguirá siendo mostrado por el navegador como no confiable.

Las autoridades CA también ofrecen la solicitud de dominios comodín (por ejemplo, *.example.com). Un dominio comodín equivale a estar vinculado a todos los subdominios del dominio principal, por lo que es muy conveniente de usar, pero el precio también es extremadamente alto. Un dominio comodín cuesta aproximadamente 5000 yuanes al año y solo las empresas pueden solicitarlo.

A continuación, veamos la información de un certificado:

Al visitar Hotmail, se redirigirá a login.live.com. En ese momento, el navegador IE mostrará un pequeño candado. Haz clic en el candado y luego en "Ver certificado" para que aparezca la ventana de certificado de la imagen anterior. Aquí podemos ver que este certificado tiene un solo propósito: probar la información de identidad a una computadora remota. Los usos de los certificados son muchos; SSL es solo uno de ellos. En el campo "Emitido para" se encuentra el dominio vinculado al solicitar este certificado; debajo, "Emitido por" es la entidad emisora del certificado. Las dos fechas de abajo son la fecha de solicitud del certificado y la fecha de vencimiento. Aquí podemos notar la información de "Emitido por", que contiene la palabra "Extended Validation SSL", lo que indica que este certificado es un certificado EV SSL (Certificado SSL de Validación Extendida). Una característica de los certificados EV SSL es que pueden hacer que la barra de direcciones del navegador se vuelva verde y muestre el nombre de la empresa a la que pertenece el certificado, como se muestra en la siguiente imagen:

Los certificados EV SSL tienen un costo más alto en comparación con otros certificados.

Lo anterior describe el caso de solicitar un certificado a una autoridad CA. Si un sitio web personal solo busca cifrar la transmisión, también puede crear su propio certificado SSL. Los certificados creados por uno mismo no son confiables para el navegador, y al visitar el sitio se mostrará una advertencia debido a que la verificación del certificado falla.

Proceso de verificación de certificados

Los certificados se organizan en forma de cadena de certificados. Al emitir un certificado, primero debe existir el certificado raíz emitido por la autoridad CA raíz; luego, la autoridad CA raíz emite un certificado de una autoridad CA intermedia; finalmente, la autoridad CA intermedia emite el certificado SSL específico. Podemos entenderlo así: la autoridad CA raíz es como una empresa, y el certificado raíz es su credencial de identidad. Cada empresa tiene diferentes departamentos que emiten certificados para diferentes propósitos. Estos departamentos son las autoridades CA intermedias, que usan certificados intermedios como su propia credencial de identidad. Uno de estos departamentos se encarga específicamente de emitir certificados SSL. Cuando se conectan el certificado raíz, el certificado intermedio y el certificado SSL finalmente solicitado, se forma la cadena de certificados, también llamada ruta de certificados. Al verificar un certificado, el navegador llama a la interfaz del administrador de certificados del sistema para verificar uno por uno todos los certificados en la ruta de certificados. Solo si todos los certificados en la ruta son confiables, el resultado de la verificación completa será confiable. Sigamos usando el certificado de login.live.com como ejemplo. Al ver el certificado, haz clic en la pestaña "Ruta de certificados" y se mostrará la siguiente imagen:

El certificado raíz es el certificado más importante. Si el certificado raíz no es confiable, todos los certificados emitidos por él tampoco lo serán. Durante la instalación del sistema operativo, algunos certificados raíz de autoridades CA confiables se instalan de forma predeterminada. Puedes ejecutar "certmgr.msc" en "Ejecutar" para iniciar el administrador de certificados, como se muestra en la siguiente figura:

El certificado raíz tiene una validez larga y admite muchos usos, lo que facilita la emisión de certificados intermedios de diferentes propósitos. El certificado intermedio tiene un propósito único y su validez es relativamente más corta, pero mucho más larga que la de los certificados SSL específicos.

Si la verificación del certificado SSL falla, según el navegador se mostrarán los siguientes errores:

Hay tres razones por las que falla la verificación del certificado SSL:

  • 1. El certificado SSL no fue emitido por una autoridad CA confiable.
  • 2. El certificado ha caducado.
  • 3. El dominio del sitio web visitado no coincide con el dominio vinculado al certificado.

Estas tres razones son también las que muestra el navegador IE.

Consejo: Si odias a alguna autoridad CA raíz, puedes eliminar su certificado raíz, y así todos los certificados emitidos por ella dejarán de ser confiables.

Problemas de seguridad de los certificados SSL

El ataque más común contra HTTPS es el engaño del certificado SSL, también llamado secuestro SSL, que es un típico ataque de intermediario (man-in-the-middle). Sin embargo, el secuestro SSL no solo se usa con fines de ataque; en algunos casos especiales, podemos aprovecharlo para acceder a la red con mayor fluidez, como mencionaré más adelante.

Si el secuestro SSL se realiza con fines de ataque, si no se presta atención a las advertencias de seguridad del navegador, es fácil caer en la trampa. Cuando hay un atacante en la red que realiza un ataque de secuestro SSL, el atacante necesita falsificar un certificado SSL y enviarlo al navegador. Como el certificado SSL falsificado no es confiable, el navegador mostrará una advertencia.

Aquí hay un malentendido: cuando un certificado SSL no es confiable, no siempre significa que está ocurriendo un secuestro SSL. Hay una excepción: algunos sitios web personales no pueden permitirse comprar un certificado SSL legítimo, por lo que crean su propio certificado SSL para cifrar los datos transmitidos. Si visitas con frecuencia un sitio web personal y sabes de qué se trata, no tienes que preocuparte. Pero si visitas sitios de banca en línea, pagos en línea, hotmail.com, gmail.com, etc., es seguro que estos sitios de tipo empresarial solicitarán certificados SSL legítimos (excepto 12306.cn). Una vez que el certificado SSL no sea confiable, debes dejar de acceder de inmediato. En ese caso, seguramente hay comportamientos anormales en la red. Los usuarios de banda ancha residencial deben prestar especial atención a esto.

Por lo tanto, como usuario individual, debes saber a qué sitio web estás accediendo. Si eres un usuario común con pocos conocimientos de informática, creo que no visitarás con frecuencia sitios web personales que crean sus propios certificados SSL (excepto 12306.cn). Por lo tanto, si no puedes determinar si hay algo anormal en la red, y el certificado tiene problemas, simplemente no vuelvas a acceder a ese sitio.

Consejo: En cuanto a 12306.cn, asegúrate de hacer lo que dice el sitio web: "Para garantizar una compra de boletos fluida, por favor descarga e instala el certificado raíz".

Finalmente, resumamos los problemas a tener en cuenta al usar certificados SSL:

  • 1. A menos que sea necesario, no instales certificados raíz sin permiso. Al instalar un certificado raíz, asegúrate de conocer claramente la fuente del certificado.
  • 2. Para sitios de banca en línea, pagos en línea, correo electrónico importante, etc., asegúrate de que el certificado SSL no tenga problemas. Si el navegador muestra una advertencia de error de certificado SSL, debes rechazar el acceso. Algunos usuarios de banda ancha residencial deben prestar especial atención a esto.
  • 3. Como ahora solicitar un certificado SSL personal es bastante barato, presta atención a los sitios de phishing que tienen certificados SSL legítimos (más comunes en el extranjero). Para los sitios de phishing, asegúrate de revisar bien el dominio. Además, no creas en mensajes de premios y, al mismo tiempo, instala un software de seguridad con protección contra phishing.