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