Nagios check_ssl_certificate - Überwachung Ablaufdatum SSL-Zertifikate von Webseiten und Domains

Spätestens seit der Forcierung durch die Browser Firefox und Chrome im Jahr 2018, in der HTTP-Verbindungen als unsicher deklariert wurden, ist eine sichere SSL-Verbindung für Webseiten der langersehnte Standard geworden. Viele Webseiten nutzen den kostenlosen HTTPS-Dienst letsencrypt, welches SSL-Zertifikate kostenlos zur Verfügung stellt.

Ein Nachteil gegenüber kostenpflichtigen Zertifikaten ist, dass die Gültigkeitsdauer auf 90 Tage beschränkt ist und innerhalb dieses Zeitraums erneuert werden muss. Hierfür liefert letsencrypt das Tool certbot mit, welcher diese Aufgabe auf dem Webserver übernimmt. In Kombination mit einem cronjob wird auch das Aktualisieren des SSL-Zertifikates automatisiert.

Was aber, wenn der cronjob "ausfällt", das Tool certbot veraltet ist und letztendlich das Erneuern des Zertifikats verhindert wird? Es ist ärgerllich, wenn das Problem erst nach Ablauf des SSL-Zertifikats auffällt, denn die Leser erhalten eine Meldung "Diese Webseite ist unsicher". Auch Google und Co. werden ein abgelaufenes SSL-Zertifikat negativ einstufen und die Webseite abstrafen.

Ablaufdatum des SSL-Zertifkates via Nagios

Das Monitoring-Tool nagios kann uns hierbei Abhilfe schaffen und uns warnen, wenn ein Zertifikat demnächst abläuft. Hierfür wird das Plugin check_ssl_certificate benötigt, welches hier heruntergeladen werden kann. Wir legen das Plugin in das Nagio-Plugin-Verzeichnis ab:

# Speichern Plugin in Nagios Plugin Ordner

cd /usr/lib64/nagios/plugins
[...]
check_spop
check_ssh
check_ssl_certificate
check_ssmtp
check_swap
[...]

Nun muss das Plugin bekannt gemacht werden. Wir erstellen einen neuen command:

nano /etc/nagios/objects/commands.cfg

# check if ssl certificate expires
define command{
command_name check_ssl_certificate
command_line $USER1$/check_ssl_certificate -H $ARG1$ -a "-servername $ARG1$" -w 21 -c 14
}

Das Plugin kann man vorher auf der Bash testen, da es sich mittels ./check_ssl_certificate ausführen lässt. Die Hilfe zeigt uns die verschiedenen Parameter, von denen wir folgende verwenden:

  • -H = das ist der Host, auf dem die Webseite/Domain gehostet ist. Das kann auch eine IP sein
  • -a "-servername DOMAIN" = die Domain, dessen Zertifikat getestet wird. Dieser Teil wird an das Open-SSL übermittelt.
  • -w = Warnung, wenn das Ablaufdatum < 21 Tage
  • -c = Kritischer Zustand, wenn das Ablaufdatum < 14 Tage

Bevor wir eine Webseite für den Check konfigurieren, erstellen wir noch einen Service. Hier wird u.a. festgelegt, wie häufig der Check ausgeführt werden soll. Laut check_ssl_certificate reicht es, das Zertifikat zwei mal am Tag zu prüfen, um die Last auf dem Server nicht unnötig zu erhöhen.

# nano /etc/nagios/objects/template.cfg

define service{
name ssl-service
[...]
check_period 24x7
max_check_attempts 3
normal_check_interval 720 ; Check twice a day (720 minutes = 12 hours) under normal conditions
retry_check_interval 1
contact_groups admins
notification_options w,u,c,r
notification_interval 4320
notification_period 24x7
[...

Und das war es eigentlich schon. Die Installation ist fertig und wir definieren einen Service, der das Zertifikat von www.pc-erfahrung.de testet:

nano /etc/nagios/objects/services.cfg

define service {
use ssl-service
service_description SSL-Certificate pc-erfahrung.de
host_name www
check_command check_ssl_certificate!www.pc-erfahrung.de
servicegroups ssl
}

 

Zur besseren Übersicht kann man noch eine Servicegroup SSL erstellen, damit alle SSL-Checks in einer Gruppe erscheinen:

# nano /etc/nagios/objects/servicegroup.cfg

define servicegroup{
servicegroup_name ssl
alias SSL-Zertifikate
}


Nagios SSL Check Gruppe