Cómo proteger Nginx con Let's Encrypt en Debian 10
Introducción
Let's Encrypt es una autoridad de certificación (CA) que ofrece una forma sencilla de obtener e instalar certificados TLS/SSL gratuitos, lo que permite el cifrado HTTPS en servidores web. Simplifica el proceso al proporcionar un cliente de software, Certbot, que intenta automatizar la mayoría (si no todos) de los pasos necesarios. Actualmente, todo el proceso de obtención e instalación de un certificado está completamente automatizado tanto en Apache como en Nginx.
En este tutorial, utilizará Certbot para obtener un certificado SSL gratuito para Nginx en Debian 10 y configurará su certificado para que se renueve automáticamente.
En este tutorial se utilizará un archivo de bloque de servidor Nginx independiente en lugar del archivo predeterminado. Recomendamos crear nuevos archivos de bloque de servidor Nginx para cada dominio, ya que esto ayuda a evitar errores comunes y mantiene los archivos predeterminados como una configuración de respaldo.
Prerrequisitos
Para seguir este tutorial, necesitarás:
-
Un servidor Debian 10, configurado siguiendo este tutorial de configuración inicial de servidor para Debian 10, junto con un
sudousuario no root y un firewall. -
Un nombre de dominio completamente registrado. Puedes comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom o utilizar el registrador de dominios que prefieras.
-
Los dos siguientes registros DNS están configurados para su servidor. Puede consultar esta introducción a DigitalOcean DNS para obtener detalles sobre cómo agregarlos.
- Un registro A que
your_domainapunta a la dirección IP pública de su servidor. - Un registro A que apunta a la dirección IP pública de su servidor.
www.your_domain
- Un registro A que
-
Nginx se instala siguiendo Cómo instalar Nginx en Debian 10. Asegúrese de tener un bloque de servidor para su dominio. Este tutorial lo utilizará como ejemplo.
/etc/nginx/sites-available/your_domain
Paso 1: Instalación de Certbot
El primer paso para utilizar Let's Encrypt para obtener un certificado SSL es instalar el software Certbot en su servidor.
La instalación del python3-certbot-nginxpaquete desde los repositorios de Debian nos permitirá instalar y usar el complemento nginx de Cerbot. Trabajar con Python 3 y el python3-certbot-nginxpaquete aumenta la longevidad de nuestra configuración: Python 2 quedará obsoleto en enero de 2020, por lo que nuestra configuración garantiza la compatibilidad con Python 3. Debian 10 actualmente es compatible con Python 2 y Python 3.
Antes de instalar el python3-certbot-nginxpaquete, actualice su lista de paquetes:
- sudo apt update
A continuación, instale las dependencias del python3-certbot-nginxpaquete, que incluyen los paquetes python3-acme, python3-certbot, python3-mock, python3-openssl, python3-pkg-resources, python3-pyparsingy python3-zope.interface:
- sudo apt install python3-acme python3-certbot python3-mock python3-openssl python3-pkg-resources python3-pyparsing python3-zope.interface
Por último, instala el python3-certbot-nginxpaquete:
- sudo apt install python3-certbot-nginx
Certbot ahora está listo para usarse, pero para que pueda configurar SSL para Nginx, necesitamos verificar parte de la configuración de Nginx.
Paso 2: Confirmación de la configuración de Nginx
Certbot debe poder encontrar el serverbloque correcto en la configuración de Nginx para poder configurar SSL automáticamente. En concreto, busca una server_namedirectiva que coincida con el dominio solicitado.
Si siguió el paso de configuración del bloque de servidor en el tutorial de instalación de Nginx, debería tener un bloque de servidor para su dominio con la directiva ya configurada adecuadamente./etc/nginx/sites-available/your_domainserver_name
Para comprobarlo, abra el archivo de bloque del servidor de su dominio utilizando nanosu editor de texto favorito:
- sudo nano /etc/nginx/sites-available/your_domain
Busque la server_namelínea existente. Debería verse así:
/etc/nginx/sites-available/su_dominio
...server_name your_domain www.your_domain;...
Si es así, salga del editor y continúe con el siguiente paso.
Si no es así, actualícelo para que coincida. Luego guarde el archivo, salga del editor y verifique la sintaxis de las modificaciones de configuración:
- sudo nginx -t
Si recibe un error, vuelva a abrir el archivo de bloque del servidor y verifique si hay errores tipográficos o caracteres faltantes. Una vez que la sintaxis del archivo de configuración sea correcta, vuelva a cargar Nginx para cargar la nueva configuración:
- sudo systemctl reload nginx
Certbot ahora puede encontrar el serverbloque correcto y actualizarlo.
A continuación, actualicemos el firewall para permitir el tráfico HTTPS.
Paso 3: Permitir el acceso a HTTPS a través del firewall
Si tiene el ufwfirewall habilitado, como se recomienda en las guías de requisitos previos, deberá ajustar la configuración para permitir el tráfico HTTPS.
Puede ver la configuración actual escribiendo:
- sudo ufw status
Probablemente se verá así, lo que significa que solo se permite el tráfico HTTP al servidor web:
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)
Para permitir el ingreso de tráfico HTTPS, permita el Nginx Fullperfil y elimine la Nginx HTTPasignación de perfil redundante:
- sudo ufw allow 'Nginx Full'
- sudo ufw delete allow 'Nginx HTTP'
Tu estado ahora debería verse así:
- sudo ufw status
OutputStatus: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereNginx Full ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Nginx Full (v6) ALLOW Anywhere (v6)
A continuación, ejecutemos Certbot y obtengamos nuestros certificados.
Paso 4: obtención de un certificado SSL
Certbot ofrece una variedad de formas de obtener certificados SSL a través de complementos. El complemento Nginx se encargará de reconfigurar Nginx y recargar la configuración cuando sea necesario. Para usar este complemento, escriba lo siguiente:
- sudo certbot --nginx -d your_domain -d www.your_domain
Esto se ejecuta certbotcon el --nginxcomplemento, que se utiliza -dpara especificar los nombres para los cuales queremos que sea válido el certificado.
Si es la primera vez que ejecuta certbot, se le solicitará que ingrese una dirección de correo electrónico y que acepte los términos del servicio. Después de hacerlo, certbotse comunicará con el servidor Let's Encrypt y luego ejecutará un desafío para verificar que controla el dominio para el que está solicitando un certificado.
Si esto tiene éxito, certbotle preguntará cómo desea configurar sus ajustes HTTPS.
OutputPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.-------------------------------------------------------------------------------1: No redirect - Make no further changes to the webserver configuration.2: Redirect - Make all requests redirect to secure HTTPS access. Choose this fornew sites, or if you're confident your site works on HTTPS. You can undo thischange by editing your web server's configuration.-------------------------------------------------------------------------------Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Seleccione su opción y luego presione ENTER. La configuración se actualizará y Nginx se recargará para recoger la nueva configuración. certbotfinalizará con un mensaje que le indicará que el proceso fue exitoso y dónde se almacenan sus certificados:
OutputIMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2019-10-08. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Sus certificados se han descargado, instalado y cargado. Intente volver a cargar su sitio web utilizando https://y observe el indicador de seguridad de su navegador. Debería indicar que el sitio está protegido correctamente, generalmente con un ícono de candado verde. Si prueba su servidor utilizando la Prueba de servidor de SSL Labs, obtendrá una calificación A.
Terminemos probando el proceso de renovación.
Paso 5: Verificación de la renovación automática de Certbot
Los certificados de Let's Encrypt solo son válidos durante noventa días. Esto es para alentar a los usuarios a automatizar el proceso de renovación de sus certificados. El certbotpaquete que instalamos se encarga de esto por nosotros agregando un script de renovación a /etc/cron.d. Este script se ejecuta dos veces al día y renovará automáticamente cualquier certificado que esté dentro de los treinta días posteriores a su vencimiento.
Para probar el proceso de renovación, puede realizar un ensayo con certbot:
- sudo certbot renew --dry-run
Si no ve ningún error, ya está todo listo. Cuando sea necesario, Certbot renovará sus certificados y volverá a cargar Nginx para que se apliquen los cambios. Si el proceso de renovación automática falla, Let's Encrypt le enviará un mensaje al correo electrónico que especificó para advertirle cuando su certificado esté a punto de caducar.
Conclusión
En este tutorial, instaló el cliente Let's Encrypt certbot, descargó certificados SSL para su dominio, configuró Nginx para usar estos certificados y configuró la renovación automática de certificados. Si tiene más preguntas sobre el uso de Certbot, su documentación es un buen lugar para comenzar.

Deja una respuesta