El artículo Cómo crear tu propia autoridad certificante (CA) explica cómo crear tu propia autoridad certificante para generar y firmar certificados para utilizar con SSL. Aquí presento un script para verificar periodicamente la validez de los certificados x509. La función del script es notificar por correo electrónico cuando un certificado está próximo a expirar, para poder renovarlo con tiempo y no sufrir problemas o interrupciones de los servicios que utilizan SSL (evitar dolores de cabeza).

Las variables que se deben configurar dentro del script son las siguientes:

  • REMITENTE: dirección de correo electrónico donde se notificará cuando un certificado esté próximo a expirar
  • CERTIFICADOS: nombres de archivo de los certificados. Por ejemplo, si los certificados se encuentran en el directorio /CA/certs, se debe especificar /CA/certs/*.crt
  • DIAS: cantidad de días de anticipación. Por ejemplo, si se utiliza el valor 30, el script enviará un mail 30 días antes de que expire un certificado (puede ser menor cantidad de días que el valor ingresado, dependiendo de si el script se ejecuta una vez por día o una vez por semana)

verificar_certificados.sh:

#!/bin/bash

REMITENTE="admin@pepe.com"
CERTIFICADOS="/CA/certs/*.crt"
DIAS=30

SERVIDOR=$(hostname)
ASUNTO="Advertencia: Certificados por expirar en el servidor $SERVIDOR"
MAIL=""

# verificar todos los certificados
for FILE in $CERTIFICADOS
do

	# obtener la fecha de expiración del certificado
        EXP=$(openssl x509 -enddate -noout -in $FILE)
        EXP=${EXP:9}
        EXP=$(date --date="$EXP" +%Y%m%d)

	# buscar en los próximos $DIAS
        for (( i=0; i<=$DIAS; i++ ))
        do

		# obtener la fecha actual más $i días
                DATE=$(date --date="+$i days" +%Y%m%d)

                if [ "$EXP" = "$DATE" ]; then

			# si la fecha del certificado está dentro de los próximos $DIAS, significa que está próximo a expirar
                        if [ "$i" = "0" ]; then MAIL=$(echo -e "El certificado $FILE expira hoy!\n$MAIL")
                        else MAIL=$(echo -e "El certificado $FILE expira en $i dia(s)\n$MAIL")
                        fi

                fi

        done

done

if [ "${#MAIL}" -gt 0 ]; then

        # si hay certificados por expirar, enviar notificación por mail
        MAIL=$(echo -e "Estado de los certificados SSL:\n$MAIL\n")
        echo -e "$MAIL"  | /usr/bin/mail -s "$ASUNTO" $REMITENTE
        echo "[$(date)]"
        echo -e "$MAIL"

else

        echo "[$(date)]"
        echo "Estado de los certificados SSL: Ok"

fi

Finalmente es necesario agregar una tarea cron para ejecutar automáticamente el script. Se puede realizar de diferentes formas, por ejemplo editar el crontab del usuario o el archivo /etc/crontab, agregar un link simbólico al script dentro del directorio /etc/cron.daily/ o agregar un nuevo archivo de configuración en el directorio /etc/cron.d/. La forma más sencilla es agregar un link simbólico en el directorio /etc/cron.daily/ (suponiendo que la ruta al script es /home/pepe/scripts/verificar_certificados.sh):

ln -s /home/pepe/scripts/verificar_certificados.sh /etc/cron.daily/verificar_certificados

De esta forma se ejecutará automáticamente una vez por día a la hora especificada en el archivo /etc/crontab. No olvidar otorgarle permisos de ejecución al script:

chmod +x verificar_certificados.sh


Tal vez pueda interesarte


Compartí este artículo