Skip to content

Instantly share code, notes, and snippets.

@victoraguilarc
Last active April 2, 2018 13:29
Show Gist options
  • Save victoraguilarc/58e9556582389afe419819f91d2c4073 to your computer and use it in GitHub Desktop.
Save victoraguilarc/58e9556582389afe419819f91d2c4073 to your computer and use it in GitHub Desktop.
Bash para agregar a un cronjob para renovar los certificados let'sencrypt
#!/bin/bash
# Basado en
# https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04
# Agrega este script como cron job:
# sudo crontab -e
# 30 2 1-15 * 6 /path/to/script/le-renews.sh >> /opt/letsencrypt/le-renews.log
# Esto se ejcuta los primeros sabados de cada mes a las 2:30am
# sudo service cron restart
# Configuración
email="[email protected]";
domains="xiberty.com"; # List de dominios separados por comas
exp_limit=30;
web_service="nginx";
# Root required
if [[ $EUID -ne 0 ]]; then
echo "Setup - Este script debe ejecutarse como usuario root";
exit 0;
fi;
# Obtiene el certificado solo para el primer dominio de la lista
domain=`echo $domains | sed 's/,.*//'`;
cert_file="/etc/letsencrypt/live/$domain/fullchain.pem";
if [ ! -f $cert_file ]; then
echo "[ERROR] certificado no encontrado para el dominio: $domain.";
exit 0;
fi;
# Revisar la fecha
exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)
if [ "$days_exp" -gt "$exp_limit" ] ; then
echo "El certificado esta actualizado, no necesita ser renovado ($days_exp dias restantes).";
exit 0;
fi;
# Actualizar el certificado
echo "El certificado para [$domain] esta cerca de expirar. Ejecutando el script de renovación..."
certbot renew --pre-hook "service $web_service stop" --post-hook "service $web_service start"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment