En este artículo, habremos explicado los pasos necesarios para asegurar Nginx con let's encrypt en CentOS 8. Antes de continuar con este tutorial, asegúrese de haber iniciado sesión como usuario con sudo
privilegios Todos los comandos de este tutorial deben ejecutarse como un usuario no root.
Let's Encrypt es una autoridad de certificación que proporciona certificados SSL gratuitos para el sitio web, que opera desde abril de 2016 y cuenta con el respaldo de empresas y organizaciones de Internet de todo el mundo, como Mozilla, Cisco, Chrome. , Akamai, etc.
Prerrequisito:
- Sistema operativo con CentOS Linux
- Dirección IPv4 del servidor con privilegios de superusuario (acceso raíz)
- Terminal Gnome para escritorio Linux
- Cliente PuTTy SSH para Windows o macOS
- Powershell para Windows 10/11
- Familiarizarse con los comandos DNF
Proteja Nginx con Let's Encrypt en CentOS
Paso 1. El primer comando actualizará las listas de paquetes para garantizar que obtenga la versión y las dependencias más recientes.
sudo dnf install epel-release sudo dnf update sudo dnf install mod_ssl openssl
Antes de instalar el dominio Let's Encrypt SSL se debe acceder bien y utilizar el host virtual Nginx. Lea el tutorial sobre cómo instalar Nginx en CentOS 8.
Paso 2. Instale Certbot.
El paquete certbot no está incluido en los repositorios estándar de CentOS 8, pero se puede descargar desde el sitio web del proveedor:
sudo wget -P /usr/local/bin https://dl.eff.org/certbot-auto sudo chmod +x /usr/local/bin/certbot-auto
Luego, genere un nuevo conjunto de parámetros DH de 2048 bits usando el siguiente comando:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Para obtener un certificado SSL para el dominio, vamos a utilizar el complemento Webroot que funciona creando un archivo temporal para validar el dominio solicitado en el directorio ${webroot-path}/.well-known/acme-challenge:
sudo mkdir -p /var/lib/letsencrypt/.well-known sudo chgrp nginx /var/lib/letsencrypt sudo chmod g+s /var/lib/letsencrypt
Para evitar la duplicación de código, cree los siguientes dos fragmentos que se incluirán en todos los archivos de bloque del servidor Nginx:
sudo mkdir /etc/nginx/snippets
$ nano /etc/nginx/snippets/letsencrypt.conf location ^~ /.well-known/acme-challenge/ { allow all; root /var/lib/letsencrypt/; default_type "text/plain"; try_files $uri =404; }
$ nano /etc/nginx/snippets/ssl.conf ssl_dhparam /etc/ssl/certs/dhparam.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 30s; add_header Strict-Transport-Security "max-age=63072000" always; add_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff;
Una vez que se crean los fragmentos, abra el bloque del servidor de dominio e incluya el fragmento letsencrypt.conf, como se muestra a continuación:
$ nano /etc/nginx/conf.d/example.com.conf server { listen 80; server_name example.com www.example.com; include snippets/letsencrypt.conf; }
Vuelva a cargar la configuración de Nginx para que los cambios surtan efecto:
sudo systemctl reload nginx
Luego, ejecute este comando para obtener un certificado y haga que Certbot edite su configuración de Nginx automáticamente para servirlo, activando el acceso HTTPS en un solo paso:
sudo /usr/local/bin/certbot-auto certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d your-domain.com -d www.your-domain.com
Finalmente, pasos, edite su bloque de servidor de dominio de la siguiente manera:
$ nano /etc/nginx/conf.d/example.com.conf server { listen 80; server_name www.your-domain.com your-domain.com; include snippets/letsencrypt.conf; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name www.your-domain.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; return 301 https://example.com$request_uri; } server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem; include snippets/ssl.conf; include snippets/letsencrypt.conf; # . . . other code }
Vuelva a cargar el servicio Nginx para que los cambios surtan efecto:
sudo systemctl reload nginx
Paso 4. Comprobación del estado de su certificado.
Puede asegurarse de que Certbot creó su certificado SSL correctamente utilizando la Prueba de servidor SSL de la empresa de seguridad en la nube Qualys. Abra el siguiente enlace en su navegador web preferido, reemplazando your-domain.com
con su dominio base:
https://www.ssllabs.com/ssltest/analyze.html?d=your-domain.com
Felicitaciones, ha aprendido a proteger Nginx con let's encrypt en CentOS 8. Si tiene alguna pregunta, deje un comentario a continuación.