Hoy en día existen millones de personas que utilizan Internet y, muchas veces no saben que sus datos están expuestos al navegar por sitios no seguros. A diario visitamos sitios como Facebook, Gmail, Twitter o YouTube. Dichos sitios utilizan el protocolo HTTPS, que cifra los datos de nuestras comunicaciones para hacerlas más seguras.

Qué es HTTPS

HTTPS (Protocolo Seguro de Transferencia Hipertexto) funciona desde el puerto 443 y utiliza un cifrado basado en SSL/TLS con el fin de crear un canal cifrado entre el cliente y el servidor. SSL (Secure Sockets Layer) y TLS (Transmission Layer Security) son dos protocolos utilizados para enviar paquetes cifrados a través de Internet. Se pueden utilizar para más de un protocolo, no sólo con HTTP. HTTP + SSL/TLS = HTTPS.

Por qué usar HTTPS

No es complicado mencionar varias razones por las que es preferible usar HTTPS antes que HTTP. Al cifrar la comunicación entre cliente y servidor, evitamos los ataques man-in-the-middle o eavesdropping, mediante los cuales un atacante podría obtener por ejemplo, nuestro usuario y contraseña de un sitio web porque irían en texto plano.

He montado un WordPress en una máquina virtual y he hecho un ataque man-in-the-middle para ver cómo se transmiten el usuario y la contraseña al acceder con un usuario de prueba. El nombre de usuario ha sido usuariodeprueba y la contraseña passdeprueba. Con Wireshark he “escuchado” la comunicación y he visto la transferencia de mensajes en texto plano.

¿Cómo funciona?

HTTP funciona en la capa de aplicación (séptima capa) del Modelo OSI, que es la capa más alta. Sin embargo, el cifrado que da lugar a HTTPS, se realiza en una capa más baja, mediante SSL/TLS. HTTPS se basa en el sistema de clave pública y clave privada. El administrador de un servidor Web (yo, en el caso de Geeky Blogs) debe crear un certificado de clave pública, el cual debe estar firmado por una autoridad de certificación. Si no está firmado, el navegador Web no lo aceptará y nos dirá que el sitio no es seguro. Si el sitio es seguro, veremos un candado cerrado en la URL del navegador. Por ejemplo en Google Chrome se ve así:

 

Intercambio de claves

La seguridad de las transacciones se basa en el intercambio de claves entre un cliente y un servidor. Las claves pública y privada están relacionadas de tal forma que no podemos usar una sin la otra. Para enviar un mensaje cifrado a un servidor, lo cifro con su clave pública para que él pueda descifrarlo con su clave privada. Sólo quien tenga la privada podrá descifrarlo. Por eso es importante tenerla siempre a buen recaudo.

Tras haber concretado los detalles técnicos que se utilizarán en la transferencia, como por ejemplo la versión del protocolo o los algoritmos de cifrado, el navegador procede a cifrar una clave generada en ese mismo momento con la clave pública del servidor al que se está conectando y se la envía. Al final el cliente y el servidor tienen la misma clave, que se utilizará para cifrar y descifrar los datos de la comunicación.

Debilidades, desventajas y limitaciones

Si un atacante robara el certificado con la clave privada de Watico Soft , podría crear un servidor falso al cual podríamos acceder y entregar sin saberlo todos nuestros datos. Un paso más allá sería que si la clave privada de un CA (Certificate Authority) fuera robada, el ladrón podría crear y firmar certificados falsos para cualquier dominio y hacer que los usuarios se conectasen a servidores falsos sin que se den cuenta.

Al implementar HTTPS en una página Web podemos afirmar que estamos transmitiendo más datos que si se utilizara HTTP. El volumen de tráfico es mayor y se ralentiza la Web al tener que realizar el cifrado. ¿Por qué no usar HTTPS sólo en la página de acceso para introducir los datos del usuario? El usuario y contraseña irían cifrados pero, ¿qué pasaría con las cookies? Si las cookies van en texto plano, cifrar el usuario y la contraseña no vale de nada.