5.4. Seguridad. HTTPS

El protocolo https es idéntico al protocolo http con la excepción de que la transferencia de información entre el cliente (navegador web) y el servidor (servidor web) viaja a través de Internet cifrada utilizando robustos algoritmos de cifrado de datos proporcionados por el paquete OpenSSL. Durante la transmisión, se utilizan algoritmos de cifrado simétricos, pero para intercambiar las claves de cifrado, hay una sesión inicial de cifrado asimétrico.

Protocolo HTTPS

Los algoritmos de cifrado utilizados reúnen las características necesarias para garantizar que la información que sale desde el servidor hacia el cliente, esté cifrada y solamente pueda ser descifrada por el cliente y que la información que sale desde el cliente hacia el servidor, esté cifrada y solamente pueda ser descifrada por el servidor. Si durante la transferencia de la información un “hacker” hiciera copia de los paquetes de datos e intentara descifrarlos, los algoritmos garantizarían que no podría hacerlo por fuerza bruta (probando todas las claves posibles) en un plazo mínimo de varios años.

CONFIGURACIÓN

La configuración de una web protegida con HTTPS, independientemente del servidor que utilicemos, se realiza básicamente con los siguientes pasos:

  1. Activar los módulos correspondientes (en el caso de Apache).

  2. Generar un certificado para el servidor. Recuerda conceptos certificado, clave pública/privada (https://dinahosting.com/ayuda/ficheros-de-un-certificado-crt-key-csr-ca-pem-pfx/) → Durante la ejecución de comando contestaremos algunas preguntas como el nombre del servidor, el país, etc…
    • ¿Ubicación de los certificados?

    • ¿Propietario/Permisos?

  3. Crear virtual host seguro.Incluyendo la clave privada y el certificado en la configuración

  4. Redirigir HTTP a HTTPS → (OPCIONAL, aunque recomendable)

  5. Activar el nuevo sitio creado → (a2ensite si estamos en Apache, ln -s en NginX)

En los siguientes enlaces puedes encontrar unos sencillos tutoriales:

5.4.1. Ejemplo en producción

Los ejemplos vistos se adaptan a un entorno de pruebas como el nuestro. Si estuvieras tratando con un entorno 'real' deberías obtener un certificado por parte de una `autoridad certificadora (CA) `_, además de disponer de un nombre de dominio público real en Internet. Puedes realizar todo esto con alternativas gratuitas podrías tener las siguientes opciones 1:

  1. Cualquier instancia en la nube gratuita tipo AWS Free Tier, Google Cloud Free Tier o Azure Free Account.

  2. CA gratuita como Let’s Encrypt, y su probrama certbot, para emitir un certificado válido.

  3. El dominio público visible en la web usando una alternativa gratuita tipo no-ip o freeom.

        flowchart TD
    A[Crear instancia pública AWS/AZZURE + CONF. SERVICIO]
    B[¿Grupo se seguridad?. Abrir puertos 22, 80 y 443]
    C[Obtener IP pública. IP Elástica]
    D[Configurar DNS → IP EC2. DynDNS,No-ip, Freenom]
    E[Usar certificado **Let's Encrypt**, usando **Certbot**. ¿APACHE/NGINX?]
    F[Configurar HTTPS]

    A --> B
    A --> C
    B --> D
    C --> D
    D --> E --> F

    %% Enlaces
    click A "https://aws.amazon.com/ec2/" "AWS EC2"
    click C "https://docs.aws.amazon.com/es_es/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html" "AWS Elastic IP"
    click E "https://letsencrypt.org/es/docs/" "Documentación Let's Encrypt"
    
¿Sabrías?
Una vez revisado todo lo explicado en este apartado: ¿Podrías dotar de una capa de seguridad a los servidores web configurados en las prácticas realizadas hasta ahora en este tema?




  1. Fuente: Puedes encontrar como hacerlo paso a paso en este manual de referencia:josejuansanchez.org/iaw/practica-https