Conceptos básicos

HTTP(HyperText Transfer Protocol: Protocolo de transferencia de hipertexto) es un protocolo de capa de aplicación utilizado en sistemas de información distribuidos, colaborativos e hipermedia. En términos simples, es un método para publicar y recibir páginas HTML, utilizado para transmitir información entre navegadores web y servidores de sitios web.

HTTP funciona por defecto en el puerto 80 del protocolo TCP; los usuarios acceden a sitios webhttp://Los que comienzan con http:// son servicios HTTP estándar.

El protocolo HTTP envía contenido en texto plano y no ofrece ningún tipo de cifrado de datos. Si un atacante intercepta los mensajes de transmisión entre el navegador web y el servidor del sitio web, puede leer la información directamente. Por lo tanto, el protocolo HTTP no es adecuado para transmitir información confidencial, como números de tarjeta de crédito, contraseñas y otra información de pago.

HTTPS(Hypertext Transfer Protocol Secure: Protocolo seguro de transferencia de hipertexto) es un protocolo de transmisión para comunicaciones seguras a través de una red informática. HTTPS se comunica a través de 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 servidores web y proteger la privacidad e integridad de los datos intercambiados.

HTTPS funciona por defecto en el puerto 443 del protocolo TCP. Su flujo de trabajo generalmente es el siguiente:

  • 1. Protocolo de enlace de tres vías TCP (SYN)
  • 2. El cliente verifica el certificado digital del servidor
  • 3. El algoritmo DH negocia la clave del algoritmo de cifrado simétrico y la clave del algoritmo hash
  • 4. Se completa la negociación del túnel de cifrado seguro SSL
  • 5. La página web se transmite de forma cifrada, utilizando el algoritmo de cifrado simétrico y la clave negociados para garantizar la confidencialidad de los datos; se utiliza el algoritmo hash negociado para la protección de la integridad de los datos, garantizando que los datos no sean alterados.

Hasta junio de 2018, el 34,6% de los sitios web en el top 1 millón de Alexa usaban HTTPS como valor predeterminado; el 43,1% de los 141.387 sitios web más populares de Internet tenían HTTPS implementado de forma segura; y el 45% de las cargas de página (registradas a través de Firefox) usaban HTTPS. En marzo de 2017, el 0,11% del total de dominios registrados en China usaba HTTPS.

Según las estadísticas de Mozilla, desde enero de 2017, más de la mitad del tráfico de sitios web está cifrado.

Diferencia entre HTTP y HTTPS

  • HTTP transmite en texto plano, los datos no están cifrados y la seguridad es deficiente. HTTPS (SSL+HTTP) cifra el proceso de transmisión de datos y ofrece una mejor seguridad.
  • Usar el protocolo HTTPS requiere solicitar un certificado a una CA (Certificate Authority, autoridad de certificación de certificados digitales). Generalmente hay pocos certificados gratuitos, por lo que tiene un costo. Ejemplos de autoridades certificadoras: Symantec, Comodo, GoDaddy y GlobalSign, entre otras.
  • La velocidad de respuesta de las páginas HTTP es más rápida que la de HTTPS, principalmente porque HTTP utiliza el protocolo de enlace de tres vías TCP para establecer la conexión; el cliente y el servidor necesitan intercambiar 3 paquetes, mientras que HTTPS, además de los 3 paquetes TCP, necesita otros 9 paquetes para el protocolo de enlace SSL, por lo que en total son 12 paquetes.
  • http y https utilizan métodos de conexión completamente diferentes y puertos distintos: el primero usa el 80 y el segundo el 443.
  • HTTPS es en realidad el protocolo HTTP construido sobre SSL/TLS, por lo que HTTPS consume más recursos del servidor que HTTP.

Protocolo de enlace de tres vías TCP

En el protocolo TCP/IP, el protocolo TCP establece una conexión confiable mediante el protocolo de enlace de tres vías.

  • Primer apretón de manos: el cliente intenta conectarse al servidor y le envía un paquete SYN (Synchronize Sequence Numbers, números de secuencia de sincronización), con syn=j. El cliente entra en el estado SYN_SEND y espera la confirmación del servidor.
  • Segundo apretón de manos: el servidor recibe el paquete SYN del cliente y lo confirma (ack=j+1), a la vez que envía al cliente un paquete SYN (syn=k), es decir, un paquete SYN+ACK. En este momento, el servidor entra en el estado SYN_RECV.
  • Tercer apretón de manos: el cliente recibe el paquete SYN+ACK del servidor y envía un paquete de confirmación ACK (ack=k+1). Una vez enviado este paquete, el cliente y el servidor entran en el estado ESTABLISHED, completando el protocolo de enlace de tres vías.

Simplificación:

Cómo funciona HTTPS

Todos sabemos que HTTPS puede cifrar la información para evitar que terceros obtengan datos confidenciales, por lo que muchos servicios de alto nivel de seguridad, como sitios web de bancos o correos electrónicos, adoptan el protocolo HTTPS.

1. El cliente inicia una solicitud HTTPS

No hay mucho que decir al respecto: el usuario escribe una URL https en el navegador y se conecta al puerto 443 del servidor.

2. Configuración del servidor

Un servidor que utiliza el protocolo HTTPS debe tener un certificado digital, que puede ser autogenerado o solicitado a una organización. La diferencia es que el certificado emitido por uno mismo requiere que el cliente lo verifique para poder continuar el acceso, mientras que usar un certificado solicitado a una empresa de confianza no mostrará una página de advertencia (StartSSL es una buena opción, tiene 1 año de servicio gratuito).

Este certificado es en realidad un par de clave pública y clave privada. Si no entiendes bien la clave pública y la clave privada, imagina una llave y un candado: solo tú en el mundo tienes esa llave. Puedes darle el candado a otros, y otros pueden usarlo para cerrar con llave cosas importantes y enviártelas. Como solo tú tienes la llave, solo tú puedes ver lo que está encerrado con ese candado.

3. Transmisión del certificado

Este certificado es en realidad la clave pública, pero contiene mucha información, como la autoridad emisora del certificado, la fecha de caducidad, etc.

4. El cliente analiza el certificado

Este trabajo lo realiza el TLS del cliente. Primero verifica si la clave pública es válida, por ejemplo, la autoridad emisora, la fecha de caducidad, etc. Si se detecta alguna anomalía, aparece un cuadro de advertencia que indica que hay un problema con el certificado.

Si el certificado no tiene problemas, se genera un valor aleatorio y luego se cifra con el certificado. Como se dijo anteriormente, es como cerrar el valor aleatorio con un candado; a menos que se tenga la llave, no se puede ver el contenido encerrado.

5. Transmisión de la información cifrada

Lo que se transmite aquí es el valor aleatorio cifrado con el certificado. El propósito es que el servidor obtenga ese valor aleatorio; a partir de entonces, la comunicación entre el cliente y el servidor podrá cifrarse y descifrarse utilizando dicho valor.

6. El servidor descifra la información

Después de descifrar con la clave privada, el servidor obtiene el valor aleatorio (clave simétrica) enviado por el cliente. Luego cifra simétricamente el contenido usando ese valor. El llamado cifrado simétrico consiste en mezclar la información y la clave privada mediante algún algoritmo; a menos que se conozca la clave privada, no se puede obtener el contenido. Precisamente tanto el cliente como el servidor conocen esta clave privada, así que mientras el algoritmo de cifrado sea lo suficientemente robusto y la clave privada sea lo suficientemente compleja, los datos serán lo suficientemente seguros.

7. Transmisión de la información cifrada

Esta información es cifrada por el servidor con la clave privada y puede ser restaurada en el cliente.

8. El cliente descifra la información

El cliente utiliza la clave privada generada anteriormente para descifrar la información enviada por el servidor, obteniendo así el contenido descifrado. Durante todo el proceso, incluso si un tercero intercepta los datos, no puede hacer nada al respecto.