¿Por qué el HTTP no es seguro? | HTTP vs. HTTPS

Las solicitudes y respuestas HTTP se envían en texto plano, lo que significa que cualquiera puede leerlas. El HTTPS corrige este problema mediante la encriptación TLS/SSL.

Objetivos de aprendizaje

Después de leer este artículo podrás:

  • Entender cómo funciona el HTTP
  • Más información acerca de por qué el HTTP no es seguro
  • Explicar las diferencias entre HTTP y HTTPS
  • Más información sobre cómo conseguir un certificado SSL para HTTPS

Copiar enlace del artículo

HTTP vs. HTTPS: ¿Cuáles son las diferencias?

HTTPS es HTTP con encriptación. La única diferencia entre ambos protocolos es que HTTPS utiliza TLS (SSL) para encriptar las solicitudes y respuestas de HTTP normales. Como resultado, HTTPS es mucho más seguro que HTTP. Un sitio web que utiliza HTTP tiene http:// en su URL, mientras que un sitio web que utiliza HTTPS tiene https://.

HTTP vs HTTPS

¿Qué es HTTP?

HTTP significa Protocolo de transferencia de hipertexto, y es un protocolo, o un orden y sintaxis estipulados para presentar la información, que se usa para transferir datos a través de una red. La mayor parte de la información que se envía por Internet, incluidos los contenidos de los sitios web y las llamadas a las API, utiliza el protocolo HTTP. Hay dos tipos principales de mensajes HTTP: solicitudes y respuestas.

En el modelo OSI (ver ¿Qué es el modelo OSI?), HTTP es un protocolo de la capa 7.

¿Qué es una solicitud HTTP? ¿Qué es una respuesta HTTP?

Las solicitudes HTTP las genera el navegador de un usuario cuando este interactúa con las propiedades de la web. Por ejemplo, si un usuario hace clic en un hipervínculo, el navegador enviará una serie de peticiones "HTTP GET" para el contenido que aparece en esa página. Si alguien busca en Google "¿Qué es el HTTP?" y este artículo aparece en los resultados de la búsqueda, cuando haga clic en el enlace, su navegador creará y enviará una serie de solicitudes HTTP para obtener la información necesaria para representar la página.

Todas estas solicitudes HTTP se dirigen a un servidor de origen o a un servidor proxy de caché, y ese servidor generará una respuesta HTTP. Las respuestas HTTP son respuestas a las solicitudes HTTP.

¿Cómo es una solicitud HTTP típica?

Una solicitud HTTP no es más que una serie de líneas de texto que siguen el protocolo HTTP. Una solicitud GET podría tener este aspecto:


GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

Esta sección de texto, que la genera el navegador del usuario, se envía a través de Internet. El problema es que se envía tal cual en texto plano, que cualquiera que esté vigilando la conexión puede leer. (Quienes no estén familiarizados con el protocolo HTTP pueden encontrar este texto difícil de entender, pero cualquiera con un conocimiento básico de los comandos y la sintaxis del protocolo puede leerlo con facilidad).

Esto es especialmente problemático cuando los usuarios envían datos confidenciales mediante un sitio web o una aplicación web. Puede ser una contraseña, un número de tarjeta de crédito o cualquier otro dato introducido en un formulario, y en HTTP todos estos datos se envían en texto plano para que cualquiera pueda leerlos. (Cuando un usuario envía un formulario, el navegador lo traduce en una solicitud HTTP POST en lugar de una solicitud HTTP GET).

Cuando un servidor de origen recibe una solicitud HTTP, envía una respuesta HTTP, que es similar:


HTTP/1.1 200 OK
Date: Wed, 30 Jan 2019 12:14:39 GMT
Server: Apache
Last-Modified: Mon, 28 Jan 2019 11:17:01 GMT
Accept-Ranges: bytes
Content-Length: 12
Vary: Accept-Encoding
Content-Type: text/plain

Hello World!

Si un sitio web usa HTTP en lugar de HTTPS, todas las solicitudes y respuestas pueden ser leídas por cualquiera que esté vigilando la sesión. En esencia, un agente malicioso puede limitarse a leer el texto de la solicitud o la respuesta, y saber exactamente qué información está pidiendo, enviando o recibiendo alguien.

¿Qué es HTTPS?

La S de HTTPS significa "seguro." HTTPS utiliza TLS (o SSL) para encriptar las solicitudes y respuestas HTTP, así que en el ejemplo anterior, en lugar del texto, un atacante vería un montón de caracteres que parecen aleatorios.

En lugar de:


GET /hello.txt HTTP/1.1
User-Agent: curl/7.63.0 libcurl/7.63.0 OpenSSL/1.1.l zlib/1.2.11
Host: www.example.com
Accept-Language: en

El atacante ve algo así:


t8Fw6T8UV81pQfyhDkhebbz7+oiwldr1j2gHBB3L3RFTRsQCpaSnSBZ78Vme+DpDVJPvZdZUZHpzbbcqmSW1+3xXGsERHg9YDmpYk0VVDiRvw1H5miNieJeJ/FNUjgH0BmVRWII6+T4MnDwmCMZUI/orxP3HGwYCSIvyzS3MpmmSe4iaWKCOHQ==

En HTTPS, ¿cómo encripta TLS/SSL las solicitudes y respuestas HTTP?

TLS utiliza una tecnología denominada encriptación de clave pública: hay dos claves, una pública y otra privada, y la clave pública se comparte con los dispositivos clientes mediante el certificado SSL del servidor. Cuando un cliente abre una conexión con un servidor, los dos dispositivos utilizan la clave pública y la privada para acordar nuevas claves, conocidas como claves de sesión, para encriptar las comunicaciones posteriores entre ellos.

Todas las solicitudes y respuestas HTTP se encriptan entonces con estas claves de sesión, para que el que intercepte las comunicaciones solo pueda ver una cadena de caracteres aleatoria, y no el texto plano.

Para más información sobre cómo funcionan la encriptación y las claves, ver ¿Qué es la encriptación?

¿Cómo ayuda el HTTPS a autenticar los servidores web?

Autenticación significa verificar que una persona o máquina es quien dice ser. En HTTP no hay verificación de la identidad: se basa en un principio de confianza. Los arquitectos de HTTP no es que tomaran la decisión de confiar implícitamente en todos los servidores web, simplemente tenían otras prioridades diferentes a la seguridad en ese momento. Pero en la Internet moderna, la autenticación es fundamental.

Igual que un DNI confirma la identidad de una persona, una clave privada confirma la identidad del servidor. Cuando un cliente abre un canal con un servidor de origen (por ejemplo, cuando un usuario navega por un sitio web), la posesión de la clave privada que coincide con la clave pública del certificado SSL de un sitio web demuestra que el servidor es realmente el anfitrión legítimo del sitio web. Esto evita o ayuda a bloquear una serie de ataques que son posibles cuando no hay autenticación, como:

¿Cómo permite Cloudflare que los sitios web adopten HTTPS?

Cloudflare lanzó el Universal SSL en 2014 y fue la primera empresa en hacer certificados SSL gratuitos. Cualquier sitio web que esté suscrito a los servicios de Cloudflare puede habilitar HTTPS y dejar de usar HTTP con un solo clic. Esto hace que la encriptación TLS esté ampliamente disponible, para proteger a los usuarios y los datos de los usuarios en todo Internet.

Para más información sobre HTTP vs. HTTPS, consulta ¿Qué es el contenido mixto? Para comprobar que un sitio web ofrece HTTPS, visita el Centro de diagnóstico de Cloudflare.