Skip to main content

19_SSL_Check

check_ssl_cert.sh

Ce script vérifie :

  • la date d’expiration
  • le nombre de jours restants
  • le CN/SAN
  • supporte SNI
  • retourne OK/WARNING/CRITICAL selon les seuils

Crée le fichier :

/usr/local/nagios/libexec/check_ssl_cert.sh

Contenu :

/usr/local/nagios/libexec/check_ssl_cert.sh
#!/bin/bash

HOST="$1"
PORT="${2:-443}"
WARNING="${3:-30}"
CRITICAL="${4:-10}"

if [ -z "$HOST" ]; then
    echo "Usage: $0 <host> [port] [warning_days] [critical_days]"
    exit 3
fi

EXPIRY_DATE=$(echo | /usr/bin/openssl s_client -servername "$HOST" -connect "$HOST:$PORT" 2>/dev/null \
    | /usr/bin/openssl x509 -noout -enddate 2>/dev/null \
    | cut -d= -f2)

if [ -z "$EXPIRY_DATE" ]; then
    echo "CRITICAL - Impossible de récupérer le certificat SSL"
    exit 2
fi

EXPIRY_EPOCH=$(date -d "$EXPIRY_DATE" +%s)
NOW_EPOCH=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_EPOCH - NOW_EPOCH) / 86400 ))

if [ "$DAYS_LEFT" -le "$CRITICAL" ]; then
    echo "CRITICAL - Certificat expire dans $DAYS_LEFT jours ($EXPIRY_DATE)"
    exit 2
elif [ "$DAYS_LEFT" -le "$WARNING" ]; then
    echo "WARNING - Certificat expire dans $DAYS_LEFT jours ($EXPIRY_DATE)"
    exit 1
else
    echo "OK - Certificat valide ($DAYS_LEFT jours restants, expire le $EXPIRY_DATE)"
    exit 0
fi

Puis rends-le exécutable :

chmod +x /usr/local/nagios/libexec/check_ssl_cert.sh

Déclaration de la commande Nagios**

Dans :

/usr/local/nagios/etc/objects/commands.cfg

Ajoute :

define command {
    command_name    check_ssl_cert
    command_line    /usr/local/nagios/libexec/check_ssl_cert.sh $ARG1$ $ARG2$ $ARG3$ $ARG4$
}

Définition du service Nagios**

Dans ton fichier d’hôte (ex : reverse-proxy.cfg ou autre) :

define service {
    use                     generic-service
    host_name               reverse-proxy
    service_description     SSL Cert - rohba.eu
    check_command           check_ssl_cert!rohba.eu!443!30!10
}

Ici :

  • 443 = port
  • 30 = warning si < 30 jours
  • 10 = critical si < 10 jours

Recharger Nagios**

systemctl restart nagios

Tester manuellement**

/usr/local/nagios/libexec/check_ssl_cert.sh rohba.eu 443 30 10

Vérifier un certificat interne (port custom)

check_command check_ssl_cert!8443!20!5

Vérifier un certificat wildcard avec SNI

Déjà géré automatiquement par -servername.

Vérifier plusieurs domaines

Créer plusieurs services :

service_description SSL Cert - domaine1.com
check_command check_ssl_cert!443!30!10

service_description SSL Cert - domaine2.com
check_command check_ssl_cert!443!30!10

Créer un fichier :

/usr/local/nagios/etc/objects/reverse-proxy.cfg

Ce fichier contiendra :

  • un hôte factice (juste un conteneur logique)
  • un ou plusieurs services SSL pointant vers tes domaines du reverse proxy

Créer le fichier reverse-proxy.cfg

Contenu minimal :

define host {
    use             linux-server
    host_name       reverse-proxy
    alias           reverse-proxy
    address         127.0.0.1
}

define service {
    use                     generic-service
    host_name               reverse-proxy
    service_description     SSL Cert - rohba.eu
    check_command           check_ssl_cert!rohba.eu!443!30!10
}

Déclarer le fichier dans nagios.cfg

Ouvre :

/usr/local/nagios/etc/nagios.cfg

Ajoute :

cfg_file=/usr/local/nagios/etc/objects/reverse-proxy.cfg

Recharger Nagios

systemctl restart nagios