Cómo utilizar el modo independiente de Certbot para recuperar los certificados SSL de Let’s Encrypt en Debian 9

Introducción

Let’s Encrypt es un servicio que ofrece certificados SSL gratuitos a través de una API automatizada. El cliente más popular de Let’s Encrypt es EFF’s de Certbot

Certbot ofrece una variedad de formas para validar tu dominio, buscar certificados y configurar automáticamente Apache y Nginx. En este tutorial, analizaremos el modo independiente de Certbot y cómo usarlo para asegurar otros tipos de servicios, como un servidor de correo o un intermediario de mensajes como RabbitMQ.

No discutiremos los detalles de la configuración SSL, pero cuando hayas terminado tendrás un certificado válido que se renovará automáticamente. Además, podrás automatizar la recarga de tu servicio para recuperar el certificado renovado.

Prerrequisitos

Antes de comenzar este tutorial, necesitarás:

  • Un servidor Debian 9 con un usuario no root, habilitado para sudo y un firewall básico configurado, como se detalla en este tutorial de configuración del servidor Debian 9.
  • Un nombre de dominio apuntado a tu servidor. En este tutorial se utilizará un dominio llamado example.com.
  • El puerto 80 o 443 no se debe usar en tu servidor. Si el servicio que estás tratando de asegurar es en una máquina con un servidor web que ocupa tanto de esos puertos, tendrás que utilizar un modo diferente, como Certbot modo Webroot o modo de desafío basado en DNS.

Paso 1 – Instalando Certbot

Debian 9 incluye el cliente Certbot en su repositorio predeterminado, y debe estar lo suficientemente actualizado para el uso básico. Si necesitas hacer desafíos basados ​​en DNS o usar otras características más recientes de Certbot, debes instalar desde el repositorio stretch-backports como se indica en la documentación oficial de Certbot

Utiliza apt para instalar el paquete certbot:

Puedes probar tu instalación solicitando que certbot muestre su número de versión:

Ahora que tenemos instalado Certbot, ejecutémoslo para obtener nuestro certificado.

Paso 2 – Ejecutando Certbot

Certbot debe responder a un desafío criptográfico emitido por la API de Let’s Encrypt para probar que controlamos nuestro dominio. Utiliza puertos 80 (HTTP) o 443 (HTTPS) para lograr esto. Debes abrir el puerto apropiado en tu firewall:

Reemplaza 443 arriba si ese es el puerto que estás utilizando. Ufw mostrará confirmación de que tu regla fue agregada:

Ahora podemos ejecutar Certbot para obtener nuestro certificado. Usaremos la opción –standalone para decirle a Certbot que maneje el desafío usando su propio servidor web incorporado. La opción –preferred-challenges le indica a Certbot que use el puerto 80 o el puerto 443.

Si estás usando el puerto 80, debes usar –preferred-challenges http. Para el puerto 443 sería –preferred-challenges tls-sni. Finalmente, el indicador –d se usa para especificar el dominio para el que estás solicitando un certificado. Puedes agregar múltiples opciones –d para abarcar múltiples dominios en un certificado.

Al ejecutar el comando, se te solicitará que ingreses una dirección de correo electrónico y debes aceptar los términos del servicio. Después de hacerlo, deberías ver un mensaje que te informa que el proceso se realizó correctamente y dónde se almacenan tus certificados:

Resultado

Tenemos nuestros certificados. Echemos un vistazo a lo que descargamos y cómo usar los archivos con nuestro software.

Paso 3 – Configurando tu aplicación

La configuración de tu aplicación para SSL está fuera del alcance de este artículo, ya que cada aplicación tiene diferentes requisitos y opciones de configuración, pero echemos un vistazo a lo que Certbot ha descargado para nosotros. Puedes usar ls para enumerar el directorio que contiene nuestras claves y certificados:

El archivo README en este directorio tiene más información sobre cada uno de estos archivos. La mayoría de las veces solo necesitarás dos de estos archivos:

privkey.pem: Esta es la clave privada para el certificado. Esto debe mantenerse seguro y en secreto, por lo que la mayoría del directorio /etc/letsencrypt tiene permisos muy restrictivos y es accesible solo por el usuario root. La mayoría de las configuraciones de software se referirán a esto como algo similar a ssl-certificate-key o ssl-certificate-key-file.

fullchain.pem: Este es nuestro certificado, incluido con todos los certificados intermedios. La mayoría del software utilizará este archivo para el certificado actual, y te referirá a él en tu configuración con un nombre como ‘ssl-certificate’.

Para obtener más información sobre los otros archivos presentes, consulta la sección “¿Dónde están mis certificados?” De los documentos de Certbot.

Algunos programas necesitarán sus certificados en otros formatos, en otras ubicaciones o con otros permisos de usuario. Es mejor dejar todo en el directorio letsencrypt, y no cambiar ningún permiso allí (de todos modos, los permisos solo se sobrescribirán en la renovación), pero a veces eso no es una opción.

En este caso, deberás escribir un script para mover archivos y cambiar los permisos según sea necesario. Este script deberá ejecutarse cada vez que Certbot renueve los certificados, de lo que hablaremos a continuación.

Paso 4 – Administración de las renovaciones automáticas 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 al agregar un script de renovación a /etc/cron.d. Este script se ejecuta dos veces al día y renovará cualquier certificado que esté dentro de los treinta días de vencimiento.

Con la renovación automática de nuestros certificados, todavía necesitamos una forma de ejecutar otras tareas después de una renovación.

Necesitamos al menos reiniciar o recargar nuestro servidor para recuperar los nuevos certificados, y como se mencionó en el Paso 3, es posible que tengamos que manipular los archivos de certificados de alguna manera para que funcionen con el software que estamos usando. Este es el propósito de la opción renew_hook de Certbot.

Para agregar un renew_hook, actualizamos el archivo de configuración de renovación de Certbot. Certbot recuerda todos los detalles de cómo obtuvo el certificado por primera vez, y se ejecutará con las mismas opciones al momento de la renovación. Sólo tenemos que añadir en nuestro hook.

Editando el archivo

Debes abrir el archivo de configuración con tu editor favorito:

Se abrirá un archivo de texto con algunas opciones de configuración. Añade tu hook en la última línea:

Actualiza el comando anterior a lo que necesites ejecutar para recargar tu servidor o ejecuta tu script de archivos personalizado. Por lo general, en Debian, usarás principalmente systemctl para recargar un servicio. Guarda y cierra el archivo, luego ejecuta Certbot dry run para asegurarte de que la sintaxis sea correcta:

Si no ves errores, estás listo. Certbot está configurado para renovarse cuando sea necesario y ejecutar los comandos necesarios para obtener tu servicio utilizando los nuevos archivos.

Conclusión

En este tutorial, instalamos el cliente Certbot Let’s Encrypt, descargamos un certificado SSL en modo independiente y habilitamos renovaciones automáticas con renew hooks. Esto debería darte un buen comienzo al usar los certificados de Let’s Encrypt con servicios que no sean tu servidor web típico.

Para más información, puedes consultar la documentación de Certbot.