J'ai trouvé peu d'informations en ligne concernant la vérification de la validité de certificats TLS via nagios et avec le support du SNI (utilisé quand vous hébergez plusieurs sites Web derrière une même IP et sur un même port exemple : via des vhosts).
L'emploi du module check_http (/usr/lib/nagios/plugins/check_http
), fourni avec nagios, est une des solutions possibles.
On va tout d'abord créer une nouvelle commande dans /etc/nagios/objects/commands.cfg
:
define command{
command_name check_sni_cert
command_line /usr/lib/nagios/plugins/check_http -S \
-H $ARG3$ -w 5 -c 10 -p $ARG1$ -C $ARG2$ --sni
}
Détail des options choisies :
- -H : hostname à tester
- -w : temps de réponse à incident en cas d'avertissement (secondes)
- -c : temps de réponse à incident en cas d'erreur critique (secondes)
- -p : numéro de port sur lequel effectuer la connexion
- -C : nombre de jours avant l'expiration du certificat en dessous duquel un avertissement/une erreur critique sont levés (format nombreJoursAvantWarning,nombreJoursAvantErreur)
- --sni : support du SNI
On peut alors utiliser cette nouvelle commande en créant un nouveau service, par exemple dans /etc/nagios/objects/localhost.cfg
:
define service{
use local-service
host_name localhost
service_description SSL Cert: www.example.com
check_command check_sni_cert!443!20,5!www.example.com
}
use
: permet de définir, entre autres, l’intervalle entre deux vérifications, l'intervalle entre une erreur et la vérification que cette erreur est résolue, ... On peut créer un service qui aura des paramètres adaptés à notre use case du moment : par exemple ne faire la vérification que tous les 2 jours.host_name
: nom d'hôte sous lequel ce service sera visibleservice_description
: description textuelle du servicecheck_command
: la commande à exécuter pour notre test (détaillée ci-dessous)
check_command
fait appel à la commande check_sni_cert
que nous avons créé au tout début de cet article.
Les arguments de cette commande sont séparés par un "!".
Les paramètres de cette commande sont donc :
- 443 : connexion effectuée sur le port standard HTTPS
- 20,5 : déclencher une alerte de niveau critique si le certificat expire sous 5 jours, déclencher une alerte (warning) si le certificat expire sous 20 jours
- www.example.com : le vhost qu'on veut tester