Ich habe alle Zertifikate in einem Verzeichnis liegen und verweise mit der Apachekonfiguration dann auf die da liegenden *.crt Files. Folgendes Script darf dazu als Beispiel dienen.
# #!/bin/bash # DATADIR_prod="/apache/ssl" DATADIR_test="/apache/ssl/migrated_to_LetsEncryptCertificates" DATADIR="$DATADIR_prod" OPENSSL="/usr/bin/openssl" DATE="/bin/date" # 7 Tage vor Ablauf wird gewarnt: WARNSEC_7=$((7*24*60*60)) WARNSEC_14=$((14*24*60*60)) WARNSEC_30=$((30*24*60*60)) CERT_TEST_PARAM="$1" if [ "$CERT_TEST_PARAM" = "true" -o "$CERT_TEST_PARAM" = "test" ] then DATADIR="$DATADIR_test" else DATADIR="$DATADIR_prod" fi if [ ! -x $OPENSSL ]; then echo OpenSSL nicht gefunden! exit 1 fi if [ ! -x $DATE ]; then echo Date nicht gefunden!? exit 1 fi for cert in $( find $DATADIR -maxdepth 1 -name "*.crt" ! -name "*_root_*" ! -name "*cacert*" ) do #echo "CERT: $cert" info="$( $OPENSSL x509 -in $cert -noout -inform pem -subject -enddate -checkend $WARNSEC_30 )" || echo -e "DATADIR: $DATADIR \nFolgendes Zertifikat laeuft in 30 Tagen ab: $info " info="$( $OPENSSL x509 -in $cert -noout -inform pem -subject -enddate -checkend $WARNSEC_14 )" || echo -e "Folgendes Zertifikat laeuft in 14 Tagen ab: $info " info="$( $OPENSSL x509 -in $cert -noout -inform pem -subject -enddate -checkend $WARNSEC_7 )" || echo -e "Folgendes Zertifikat laeuft in 7 Tagen ab: $info \n" # echo -e "==> Folgendes Zerifikat laeuft bald ab: $info \n" done exit 0
Dann habe ich noch ein Wrapper-Script geschrieben, zum Aufruf per Cron:
# #!/bin/bash # Script fuer Cron zum check der Zertifikate: test="$1" if [ "$test" = "true" -o "$test" = "test" ] then CERT_TEST_PARAM="true" TEST="TEST: " else CERT_TEST_PARAM="" fi check_cert="$( /home/ab/bin/check_certificate_validity.bash $CERT_TEST_PARAM )" echo $check_cert | egrep -q "Folgendes Zertifikat|notAfter" ; res="$?" if [ "$res" = "1" ] then : # do nothing : # es wurden keine ungueltigen oder abgelaufenen Zertifikate gefunden elif [ "$res" = "0" ] then /home/ab/bin/check_certificate_validity.bash $CERT_TEST_PARAM | mail -s "${TEST}${HOSTNAME}: Ablauf der Zertifikate bitte pruefen!" mail@domain.de fi
Dann noch unter /etc/cron.d/ eine Datei „check_certificate_validity“ mit folgendem Inhalt anlegen:
# #!/bin/bash #* * * * * Command to be executed #- - - - - #| | | | | #| | | | +----- Day of week (0-6) #| | | +------- Month (1 - 12) #| | +--------- Day of month (1 - 31) #| +----------- Hour (0 - 23) #+------------- Min (0 - 59) PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/ab/bin MAILTO=root 30 05 * * 1,3,5 run-user /home/ab/bin/cron_check_certificate_validity.bash # call the script with "test" | "true" to check the certs in the test-directory 30 05 * * 7 run-user /home/ab/bin/cron_check_certificate_validity.bash true #EOF