En este tema, aprenderemos cómo configurar SSL/TLS en NGINX para asegurar la comunicación entre el servidor y los clientes. SSL (Secure Sockets Layer) y TLS (Transport Layer Security) son protocolos que proporcionan seguridad en la transmisión de datos a través de redes.

Conceptos Clave

  1. Certificado SSL/TLS: Un archivo que contiene la clave pública y la identidad del servidor.
  2. Clave Privada: Un archivo que debe mantenerse seguro y nunca compartirse. Se utiliza para descifrar los datos cifrados con la clave pública.
  3. Certificado Intermedio: Certificados adicionales que forman una cadena de confianza entre el certificado del servidor y una autoridad de certificación (CA) raíz.

Pasos para Configurar SSL/TLS en NGINX

  1. Obtener Certificados SSL/TLS

Puedes obtener certificados SSL/TLS de una autoridad de certificación (CA) como Let's Encrypt, Comodo, o DigiCert. Para este ejemplo, usaremos Let's Encrypt.

Usando Certbot para Obtener Certificados

Certbot es una herramienta fácil de usar para obtener certificados SSL/TLS de Let's Encrypt.

sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx

Certbot configurará automáticamente NGINX para usar los certificados obtenidos.

  1. Configuración Manual de SSL/TLS en NGINX

Si prefieres configurar SSL/TLS manualmente, sigue estos pasos:

a. Instalar OpenSSL

sudo apt-get update
sudo apt-get install openssl

b. Generar una Clave Privada y una Solicitud de Firma de Certificado (CSR)

openssl req -new -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.csr

c. Enviar el CSR a una CA

Envía el archivo CSR a una CA para obtener el certificado SSL/TLS.

d. Configurar NGINX para Usar SSL/TLS

Edita el archivo de configuración de NGINX para incluir las directivas SSL/TLS.

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

  1. Reiniciar NGINX

Después de configurar SSL/TLS, reinicia NGINX para aplicar los cambios.

sudo systemctl restart nginx

Ejemplo Completo de Configuración

Aquí tienes un ejemplo completo de un archivo de configuración de NGINX con SSL/TLS habilitado:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;

    ssl_certificate /etc/nginx/ssl/nginx.crt;
    ssl_certificate_key /etc/nginx/ssl/nginx.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    location / {
        root /var/www/html;
        index index.html index.htm;
    }

    error_page 404 /404.html;
    location = /404.html {
        internal;
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }
}

Ejercicio Práctico

Ejercicio 1: Configurar SSL/TLS en un Servidor NGINX

  1. Objetivo: Configurar SSL/TLS en un servidor NGINX utilizando Certbot.
  2. Pasos:
    • Instala Certbot y el plugin de NGINX.
    • Obtén un certificado SSL/TLS para tu dominio.
    • Verifica que NGINX esté configurado correctamente y que el sitio sea accesible a través de HTTPS.

Solución

  1. Instalar Certbot y el plugin de NGINX:

    sudo apt-get update
    sudo apt-get install certbot python3-certbot-nginx
    
  2. Obtener un certificado SSL/TLS:

    sudo certbot --nginx
    
  3. Verificar la configuración:

    • Abre tu navegador y visita https://example.com.
    • Verifica que el sitio cargue correctamente y que el certificado SSL/TLS esté activo.

Conclusión

En esta sección, hemos aprendido cómo configurar SSL/TLS en NGINX para asegurar la comunicación entre el servidor y los clientes. Hemos cubierto tanto la configuración automática usando Certbot como la configuración manual. Asegurarse de que las comunicaciones sean seguras es crucial para proteger la información sensible y mantener la confianza de los usuarios.

En el próximo tema, exploraremos cómo implementar prácticas básicas de seguridad en NGINX para fortalecer aún más la seguridad de nuestro servidor.

© Copyright 2024. Todos los derechos reservados