Cómo asegurar Nginx con Let’s Encrypt en Ubuntu 16.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, permitiendo así el cifrado de HTTPS en los 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, utilizaremos Certbot para obtener un certificado SSL gratuito para Nginx en Ubuntu 16.04 y configurar su certificado para que se renueve automáticamente.

Este tutorial usa el archivo de configuración Nginx predeterminado en lugar de un archivo de bloque de servidor separado. Recomendamos crear nuevos archivos de bloque del servidor Nginx para cada dominio, ya que ayuda a evitar algunos errores comunes y mantiene los archivos predeterminados como una configuración de respaldo según lo previsto.

Prerrequisitos

Para seguir este tutorial, necesitarás:

  • Se configuró un servidor Ubuntu 16.04 siguiendo una configuración inicial del servidor, que incluye un usuario sudo no root y un firewall.
  • Un nombre de dominio totalmente registrado. A lo largo de este tutorial se utilizará example.com. Puedes comprar un nombre de dominio en Namecheap, obtener uno gratis en Freenom o usar el registrador de dominio de tu elección.
  • Ambos de los siguientes registros DNS configurados para su servidor. En internet puedes encontrar algún tutorial para obtener detalles sobre cómo agregarlos.
    • Un registro A con example.com apuntando a la dirección IP pública de tu servidor.
    • Un registro A con www.example.com apuntando a la dirección IP pública de tu servidor.

Paso 1 – Instalar Certbot

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

Certbot está en desarrollo muy activo, por lo que los paquetes de Certbot proporcionados por Ubuntu tienden a estar desactualizados. Sin embargo, los desarrolladores de Certbot mantienen un repositorio de software de Ubuntu con versiones actualizadas, por lo que usaremos ese repositorio en su lugar.

Primero, tienes que agregar el repositorio.

Tendrás que pulsar ENTER para aceptar. Luego, actualiza la lista de paquetes para obtener la información del paquete del nuevo repositorio.

Y finalmente, instala el paquete Nginx de Certbot con apt-get.

Certbot ya está listo para usarse, pero para que configure SSL para Nginx, necesitamos verificar parte de la configuración de Nginx.

Paso 2 – Configurar Nginx

Certbot puede configurar automáticamente SSL para Nginx, pero necesitas poder encontrar el bloque del servidor correcto en su configuración. Para ello, busca una directiva server_name que coincida con el dominio para el que estás solicitando un certificado.

Si estás comenzando con una instalación nueva de Nginx, puedes actualizar el archivo de configuración predeterminado. Ábrelo con nano o con tu editor de texto favorito.

Busca la línea existente en server_name y reemplaza el guión bajo _, con tu nombre de dominio:

Debes guardar el archivo y salir del editor.

Luego, verifica la sintaxis de tus ediciones de configuración.

Si recibes algún error, vuelve a abrir el archivo y verifica si hay errores tipográficos, luego pruébalo nuevamente.

Una vez que la sintaxis de tu configuración sea correcta, vuelve a cargar Nginx para cargar la nueva configuración.

Certbot ahora podrá encontrar el bloque del servidor correcto y actualizarlo. A continuación, actualizaremos nuestro firewall para permitir el tráfico HTTPS.

Paso 3 – Permitir HTTPS a través del Firewall

Si tienes el firewall ufw habilitado, tal como lo 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 la instalación de ufw.

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:

Además, para permitir el tráfico HTTPS, podemos permitir el perfil completo de Nginx y luego eliminar la asignación redundante del perfil HTTP de Nginx:

El estado debería verse así en este momento:

Ahora estamos listos para ejecutar Certbot y obtener nuestros certificados.

Paso 4 – Obtención de un certificado SSL

Certbot proporciona una variedad de formas de obtener certificados SSL, a través de varios complementos. El complemento Nginx se encargará de reconfigurar Nginx y volver a cargar la configuración cuando sea necesario:

Esto se ejecuta certbot con el complemento —nginx, y se usa –d para especificar los nombres para los cuales queremos que el certificado sea válido.

Si es la primera vez que se ejecuta certbot, se te solicitará 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 de Let’s Encrypt, luego ejecutará un desafío para verificar que tu controlas el dominio para el que solicitas un certificado.

Si tienes éxito, certbot te preguntará cómo deseas configurar tus ajustes de HTTPS.

Selecciona tu elección y luego pulsa ENTER. La configuración se actualizará y Nginx se volverá a cargar para seleccionar la nueva configuración. Certbot finalizará con un mensaje que te informará que el proceso se realizó correctamente y dónde se almacenan tus certificados:

Tus certificados son descargados, instalados y cargados. Intenta volver a cargar tu sitio web utilizando https:// y observa el indicador de seguridad de tu navegador. Debe indicar que el sitio está bien asegurado, generalmente con un icono de candado verde. Si pruebas tu servidor utilizando la prueba de servidor de Labs SSL , obtendrás una calificación de 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 animar a los usuarios a automatizar su proceso de renovación de certificados. El paquete certbot que instalamos se encarga de esto ejecutando “certbot renew” dos veces al día a través de un temporizador systemd. En distribuciones no sistemáticas, esta funcionalidad es proporcionada por un script colocado en /etc/cron.d. Esta tarea se ejecuta dos veces al día y renovará cualquier certificado que esté dentro de los treinta días de vencimiento.

Para probar el proceso de renovación, puede hacer un ensayo en seco con certbot:

Si no ves errores, estás listo. Cuando sea necesario, Certbot renovará tus certificados y recargará Nginx para recoger los cambios. Si el proceso de renovación automática falla, Let’s Encrypt enviará un mensaje al correo electrónico que especificaste, advirtiéndote cuando tu certificado está a punto de caducar.

Conclusión

En este tutorial, instalaste el cliente de Let’s Encrypt certbot, descargaste certificados SSL para tu dominio, configuraste Nginx para usar estos certificados y configuraste 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.