Monitorer la validité de ses certificats avec support du SNI et nagios

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 visible
  • service_description : description textuelle du service
  • check_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