Lokaler Check, der das Ablaufdatum für ein Zertifikat prüft und 30 Tage vor Ablauf alarmiert.

CheckMK kann Zertifikate für Webserver mit dem Http Check prüfen, was okay ist für alles, was per http erreichbar ist. Dieser Check hier läuft lokal und prüft das Ablaufdatum in der angegebenen Zertifikatsdatei mit openssl. Der Einsatzzweck ist in diesem Fall das Prüfen der mit easyrsa ausgestellten Zertifikate und des CA-Zertifikats.

So richtig “professionell” würde man natürlich eine CRL (das Generieren ist quasi ein No-Brainer, siehe Doku) irgendwo ablegen, wo Systeme und Applikationen die prüfen können, aber solange die Anzahl der ausgestellten Zertifikate überschaubar ist und man die mit einem Monitoring Tool prüfen kann, geht das auch ohne.

#!/bin/bash

# check local certificate lifetime using openssl
# djonz oct 2022

# vars:
# certificate location and number of days before an expiry warning should be issued
CACERT=/usr/share/easy-rsa/pki/ca.crt
WARN=30

if [[ ! -f $CACERT ]]; then
    echo "2 \"CA Lifetime\" - Error. Certificate file not found"
    exit 1
fi

# convert days to seconds and check certificate end date
DAYSEC=$(($WARN*86400))
readarray -t CERTINFO <<< `openssl x509 -in $CACERT -noout -enddate -checkend $DAYSEC`

# normalize openssl date output and get current date
TMPDATE=`echo "${CERTINFO[0]}" | awk -F "=" '{print $2}'`
ENDDATE=`date --date "$TMPDATE"`
TODAY=`date`

# second line contains "will expire" or "will not expire"
EXPIRES="${CERTINFO[1]}"

if [[ "$EXPIRES" =~ "will not" ]]; then
    echo "0 \"CA Lifetime\" - OK. Certificate expires $ENDDATE"
else
    if [[ "$ENDDATE" < "$TODAY" ]]; then
        echo "1 \"CA Lifetime\" - Attention. Certificate is about to expire $ENDDATE"
    else
        echo "2 \"CA Lifetime\" - Attention. Certificate expired $ENDDATE"
    fi
fi

Prüfen der ausgestellten Zertifikate: Durch die von der CA ausgestellten Zertifikate loopen und alarmieren/warnen, wenn eins von denen ausläuft.