Crear Script para renovar certificado Let’s Encrypt automáticamente.

Una de las tantas tareas que los administradores de sistemas debemos de realizar es renovar cada cierto tiempo los certificados de nuestros sitios web.

En mi caso, como seguramente sea el de muchos, utilizo Let’s Encrypt .

Estos certificados requieren la renovación cada 90 días por lo que antes de transcurrido ese período de tiempo debemos renovar el certificado, de lo contrario nuestro sitio web nos dará una advertencia al ingresar de que el sitio puede ser potencialmente peligroso.

Para evitar este tipo de errores podemos recurrir al viejo y querido cron.

Cron en resumen «es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes).» Wikipedia.

En primer lugar vamos a crear una carpeta en nuestra raíz para guardar nuestros scripts.

Como root ejecutamos :

cd /

con este comando nos dirigimos a la raíz del sistema

Luego creamos el directorio:

mkdir scripts

Ahora nos dirigimos al directorio en cuestión con el siguiente comando:

cd scripts

Y creamos nuestro archivo para el script:

nano actualizacion.sh

Cuando nos abra el editor pegamos el siguiente texto:

#!/bin/bash

service apache2 stop && letsencrypt renew && service apache2 start

Guardamos los cambios presionando al mismo tiempo Control y O, luego salimos presionando Control y X

Ahora regresamos al directorio raíz con el siguiente comando:

cd ..

Y le otorgamos permisos de ejecución a nuestro script con el siguiente comando:

chmod a+x /scripts/actualizacion.sh

Lo siguiente que haremos será probar que nuestro script funciona, siempre teniendo en cuenta que Let’s Encrypt permite renovar los certificados únicamente cuando restan 30 días para su vencimiento.

Ejecutamos el siguiente comando:

/scripts/actualizacion.sh

Si todo corre bien nos renovará el certificado y tendremos un mensaje parecido a este:

Congratulations, all renewals succeeded. The following certs have been renewed:

Por último vamos a agregar este script como una tarea de cron para que mensualmente lo ejecute y así de esta manera tendremos siempre vigente el certificado.

En terminal y como root ejecutamos:

crontab -e

Se nos abrirá un archivo similar a este:

# Edit this file to introduce tasks to be run by cron.## Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task#
# To define the time you can provide concrete values for# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
## Notice that tasks will be started based on the cron's system# daemon's notion of time and timezones.
## Output of the crontab jobs (including errors) is sent through# email to the user the crontab file belongs to (unless redirected).
## For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
## For more information see the manual pages of crontab(5) and cron(8)
## m h dom mon dow command

Debajo de la última línea agregamos lo siguiente:

@monthly root /scripts/actualizacion.sh

Presionamos Control y O para guardar y luego Control y X para salir.

Si queremos ver las tareas asignadas a cron podemos ejecutar:

crontab -l

Con esto ya no tendremos que preocuparnos por los vencimientos de nuestros certificados de Let’s Encrypt ya que gracias a este sencillo script y ejecutado mes a mes por cron siempre estarán al día.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *