Quantcast
Channel: Bash – 2Axels-Company
Viewing all articles
Browse latest Browse all 12

Monitoring the certificate lifetime data

$
0
0

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

 


Viewing all articles
Browse latest Browse all 12