Cómo utilizar el modo independiente de Certbot para recuperar certificados SSL de Let's Encrypt en Debian 10
Introducción
Let's Encrypt es un servicio que ofrece certificados SSL gratuitos a través de una API automatizada. El cliente de Let's Encrypt más popular es el cliente Certbot de EFF.
Certbot ofrece una variedad de formas de validar su dominio, obtener certificados y configurar automáticamente Apache y Nginx. En este tutorial, analizaremos el modo independiente de Certbot y cómo usarlo para proteger otros tipos de servicios, como un servidor de correo o un agente de mensajes como RabbitMQ.
No entraremos en detalles sobre la configuración de SSL, pero cuando hayas terminado tendrás un certificado válido que se renueva automáticamente. Además, podrás recargar automáticamente tu servicio para recoger el certificado renovado.
Prerrequisitos
Antes de comenzar este tutorial, necesitarás:
- Un servidor Debian 10, un usuario no root con
sudo
privilegios y un firewall básico, como se detalla en este tutorial de configuración del servidor Debian 10. - Un nombre de dominio apuntando a su servidor, lo cual puede lograr siguiendo esta documentación sobre la creación de registros DNS en DigitalOcean.
- El puerto
80
o443
no debe estar en uso en su servidor. Si el servicio que intenta proteger está en una máquina con un servidor web que ocupa ambos puertos, deberá utilizar un modo diferente, como el modo webroot de Certbot o el modo de desafío basado en DNS.
Paso 1: Instalación de Certbot
Debian 10 incluye el cliente Certbot en su repositorio predeterminado y debería estar lo suficientemente actualizado para un uso básico. Si necesita realizar desafíos basados en DNS o usar otras funciones más nuevas de Certbot, debe instalarlo desde el buster-backports
repositorio según las instrucciones de la documentación oficial de Certbot.
Actualice su lista de paquetes:
- sudo apt update
Utilice apt
para instalar el certbot
paquete:
- sudo apt install certbot
Puede probar su instalación solicitando certbot
que le muestre su número de versión:
- certbot --version
Outputcertbot 0.31.0
Ahora que tenemos Certbot instalado, ejecutémoslo para obtener nuestro certificado.
Paso 2: Ejecutar Certbot
Certbot debe responder a un desafío criptográfico emitido por la API Let's Encrypt para demostrar que controlamos nuestro dominio. Para ello, utiliza los puertos 80
(HTTP) o 443
(HTTPS). Abra el puerto correspondiente en su firewall:
- sudo ufw allow 80
Sustituya 443
lo anterior si ese es el puerto que está utilizando. ufw
emitirá una confirmación de que se agregó su regla:
OutputRule addedRule added (v6)
Ahora podemos ejecutar Certbot para obtener nuestro certificado. Usaremos la --standalone
opción para indicarle a Certbot que maneje el desafío usando su propio servidor web integrado. La --preferred-challenges
opción le indica a Certbot que use port 80
o port 443
. Si usa port 80
, usará la --preferred-challenges http
opción. Para port 443
, use --preferred-challenges tls-sni
. Finalmente, usaremos la -d
bandera para especificar el dominio para el que estamos solicitando un certificado. Puede agregar múltiples -d
opciones para cubrir múltiples dominios en un certificado.
Usaremos la --preferred-challenges http
opción para demostrarlo, pero debes usar la opción que tenga sentido para tu caso de uso. Ejecuta el siguiente comando con tus opciones preferidas para obtener tu certificado:
- sudo certbot certonly --standalone --preferred-challenges http -d your_domain
Al ejecutar el comando, se le solicitará que ingrese una dirección de correo electrónico y que acepte los términos del servicio. Después de hacerlo, debería ver un mensaje que le indica que el proceso se realizó correctamente 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-08-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. 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
Ya tenemos nuestros certificados. Veamos qué hemos descargado y cómo utilizar los archivos con nuestro software.
Paso 3: configuración de la aplicación
La configuración de su aplicación para SSL queda fuera del alcance de este artículo, ya que cada aplicación tiene diferentes requisitos y opciones de configuración, pero veamos lo que Certbot ha descargado para nosotros. Utilice ls
para enumerar el directorio que contiene sus claves y certificados:
- sudo ls /etc/letsencrypt/live/your_domain
Verá el siguiente resultado:
Outputcert.pem chain.pem fullchain.pem privkey.pem README
El README
archivo de este directorio contiene más información sobre cada uno de estos archivos. Lo más frecuente es que solo necesites dos de estos archivos:
privkey.pem
: Esta es la clave privada del certificado. Debe mantenerse segura y en secreto, por lo que la mayor parte del directorio tiene permisos muy restrictivos y solo el usuario root/etc/letsencrypt
puede acceder a él. La mayoría de las configuraciones de software se referirán a esto como o .ssl-certificate-key
ssl-certificate-key-file
fullchain.pem
:Este es nuestro certificado, incluido con todos los certificados intermedios. La mayoría de los programas utilizarán este archivo para el certificado real y harán referencia a él en su configuración con un nombre comossl-certificate
.
Para obtener más información sobre los demás archivos presentes, consulte la sección ¿Dónde están mis certificados? de la documentación de Certbot.
Algunos programas necesitarán sus certificados en otros formatos o ubicaciones, o con otros permisos de usuario. Es mejor dejar todo en el letsencrypt
directorio y no cambiar ningún permiso allí (de todos modos, los permisos se sobrescribirán al renovarlos), pero a veces esa no es una opción. En ese caso, necesitará escribir un script para mover archivos y cambiar los permisos según sea necesario. Este script deberá ejecutarse siempre que Certbot renueve los certificados, de lo que hablaremos a continuación.
Paso 4: Cómo gestionar las renovaciones automáticas 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 certificados. El certbot
paquete 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á cualquier certificado que esté dentro de los treinta días posteriores a su vencimiento.
Dado que nuestros certificados se renuevan automáticamente, aún necesitamos una forma de ejecutar otras tareas después de una renovación. Necesitamos al menos reiniciar o recargar nuestro servidor para recoger los nuevos certificados y, como se mencionó en el Paso 3, es posible que debamos manipular los archivos de certificado de alguna manera para que funcionen con el software que estamos usando. Este es el propósito de renew_hook
la opción de Certbot.
Para agregar un certificado renew_hook
, debemos actualizar 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. Solo necesitamos agregar nuestro gancho. Abra el archivo de configuración con su editor favorito:
- sudo nano /etc/letsencrypt/renewal/your_domain.conf
Se abrirá un archivo de texto con algunas opciones de configuración. Agregue su gancho en la última línea. En este caso, estamos usando un ejemplo que recargaría un rabbitmq
servicio:
/etc/letsencrypt/renewal/tu_dominio.conf
renew_hook = systemctl reload rabbitmq
Actualice el comando anterior a lo que necesite ejecutar para recargar su servidor o ejecutar su script de manipulación de archivos personalizado. En Debian, normalmente lo usará systemctl
para recargar un servicio.
Guarde y cierre el archivo, luego ejecute una ejecución en seco de Certbot para asegurarse de que la sintaxis sea correcta:
- sudo certbot renew --dry-run
Si no ve ningún error, ya está todo listo. Certbot está configurado para renovarse cuando sea necesario y ejecutar los comandos necesarios para que su servicio utilice los archivos nuevos.
Conclusión
En este tutorial, instalamos el cliente Let's Encrypt de Certbot, descargamos un certificado SSL usando el modo independiente y habilitamos las renovaciones automáticas con ganchos de renovación. Esto debería brindarle un buen comienzo para usar certificados Let's Encrypt con servicios distintos a su servidor web habitual.
Para obtener más información, consulte la documentación de Certbot.
Deja una respuesta