Cómo asegurar Nginx con Let’s Encrypt en Ubuntu 20.04

Introducción

Let’s Encrypt es una Autoridad de certificación (CA) que proporciona una manera fácil de obtener e instalar certificados TLS/SSL gratuitos. Esto permite HTTPS cifrado 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 requeridos. Actualmente, todo el proceso de obtención e instalación de un certificado está totalmente automatizado tanto en Apache como en Nginx.

En este tutorial, utilizarás Certbot para obtener un certificado SSL gratuito para Nginx en Ubuntu 20.04 y configurarás tu certificado para que se renueve automáticamente.

Este tutorial utilizará un archivo de configuración del servidor Nginx separado en lugar del archivo predeterminado. Recomendamos crear nuevos archivos de bloque del servidor Nginx para cada dominio porque ayuda a evitar errores comunes. También porque mantiene los archivos predeterminados como una configuración alternativa.

Prerrequisitos

Para seguir este tutorial, necesitará:

  • Un servidor Ubuntu 20.04 configurado siguiendo este tutorial de configuración básica de servidores con Ubuntu 20.04. Este incluye un usuario no root habilitado para sudo y un firewall.
  • Un nombre de dominio registrado. Este tutorial se usará example.com en todo momento. Puedes comprar un nombre de dominio de Namecheap, obtener uno gratis con Freenom o usar el registrador de dominio que prefieras.
  • Los 2 siguientes registros DNS configurados para tu servidor. Puedes consultar este artículo sobre documentación de DNS para obtener detalles sobre cómo agregarlos.
    • Un registro A con example.com que apunta a la dirección IP pública de tu servidor.
    • Un registro A con www.example.com que apunta a la dirección IP pública de tu servidor.
  • Nginx se instala siguiendo la guía de Cómo instalar Nginx en Ubuntu 20.04. Asegúrate de tener un bloque de servidor para tu dominio. Este tutorial lo usarás como ejemplo ./etc/nginx/sites-available/example.com.

Paso 1 – Instalación de Certbot

El primer paso para usar Let’s Encrypt para obtener un certificado SSL es instalar el software Certbot en tu servidor.

Debes instalar Certbot y tu complemento Nginx con apt:

Certbot ahora está listo para usarse, pero para que puedas configurar automáticamente SSL para Nginx, necesitamos verificar algunas de las configuraciones de Nginx.

Paso 2 – Confirmación de la configuración de Nginx

Certbot necesita poder encontrar el bloque server correcto en tu configuración de Nginx para poder configurar automáticamente SSL. Específicamente, lo haces buscando una directiva server_name que coincida con el dominio para el que solicita un certificado.

Si seguiste el paso de configuración del bloque del servidor en el tutorial de instalación de Nginx, deberías tener un bloque del servidor para tu dominio en /etc/nginx/sites-available/example.com con la directiva server_name ya configurada adecuadamente.

Para verificar, debes abrir el archivo de configuración para tu dominio usando nano o tu editor de texto favorito:

Debes encontrar la línea existente server_name. Debe tener un aspecto como este:

Si es así, debes salir de tu editor y continuar con el siguiente paso.

Si no es así, actualízalo para que coincida. Luego guarda el archivo, sal de tu editor y verifica la sintaxis de tus ediciones de configuración:

Si obtienes un error, vuelve a abrir el archivo de bloque del servidor y verifica si hay errores tipográficos o faltan caracteres. Una vez que la sintaxis del archivo de configuración sea correcta, vuelve a cargar Nginx para cargar la nueva configuración:

Certbot ahora puede encontrar el bloque server correcto y actualizarlo automáticamente.

A continuación, debes actualizar el firewall para permitir el tráfico HTTPS.

Paso 3 – Permitir HTTPS a través del firewall

Si tienes habilitado el firewall ufw, como recomiendan las guías de requisitos previos, deberás ajustar la configuración para permitir el tráfico HTTPS. Afortunadamente, Nginx registra algunos perfiles con ufw durante la instalación.

Puedes ver la configuración actual escribiendo:

Probablemente se verá así, lo que significa que solo se permite el tráfico HTTP al servidor web:

Para permitir adicionalmente el tráfico HTTPS, debes permitir el perfil completo de Nginx y eliminar la asignación redundante de perfil HTTP Nginx:

Tu estado ahora debería verse así:

Paso 4 – Obtención de un certificado SSL

Certbot proporciona una variedad de formas de obtener certificados SSL a través de complementos. El complemento Nginx se encargará de reconfigurar Nginx y volver a cargar la configuración siempre que sea necesario. Para usar este complemento, escribe lo siguiente:

Esto ejecuta certbot con el complemento –nginx y usa –d para especificar los nombres de dominio para los que nos gustaría que el certificado sea válido.

Si es la primera vez que se ejecutas certbot, se te pedirá que ingreses una dirección de correo electrónico y aceptes los términos del servicio. Después de hacerlo, certbot se comunicará con el servidor Let’s Encrypt. Luego ejecutará un desafío para verificar que controles el dominio para el que solicitas un certificado.

Si tiene éxito, certbot te preguntará cómo te gustaría configurar tus ajustes HTTPS.

Selecciona tu elección y luego presiona ENTER. La configuración se actualizará y Nginx se volverá a cargar para elegir la nueva configuración. certbot finalizará con un mensaje que te indicará que el proceso fue exitoso y dónde se almacenan tus certificados:

Tus certificados se descargan, instalan y cargan. Intenta volver a cargar tu sitio web utilizando https:// y observa el indicador de seguridad de tu navegador. Debe indicar que el sitio está asegurado correctamente, generalmente con un ícono de candado. Si pruebas tu servidor usando la  SSL Labs Server Test, obtendrás 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 por noventa días. Esto es para alentar a los usuarios a automatizar su proceso de renovación de certificados. El paquete certbot que instalamos se encarga de esto al agregar un temporizador systemd. Este se ejecutará dos veces al día y renovará automáticamente cualquier certificado dentro de los treinta días posteriores al vencimiento.

Puedes consultar el estado del temporizador con systemctl:

Para probar el proceso de renovación, puedes hacer una ejecución con dry en certbot:

Si no ves errores, ya está todo listo. Cuando sea necesario, Certbot renovará tus certificados y volverá a cargar Nginx para aplicar los cambios.

Si el proceso de renovación automática falla alguna vez, Let’s Encrypt enviará un mensaje al correo electrónico que especificaste, advirtiéndote cuando tu certificado esté por vencer.

Conclusión

En este tutorial, instalaste el cliente certbot de Let’s Encrypt, descargaste certificados SSL para tu dominio y configuraste Nginx para usar estos certificados. También configuraste la renovación automática de certificados. Si tienes más preguntas sobre el uso de Certbot, la documentación oficial es un buen lugar para comenzar.