#!/bin/bash

# Check permettant de monitorer une liste de certificats se trouvant dans
# /etc/nagios/ssl_local.cfg
#
# Développé par Will (2022)
#

certs_list_path="/etc/nagios/check_ssl_local_list.cfg"

# Dates in seconds
_10_days="864000"
_15_days="1296000"

critical=0
warning=0


if [[ ! -f "${certs_list_path}" ]]; then
    touch "${certs_list_path}"
fi

certs_list=$(sed -E 's/(.*)#.*/\1/g' "${certs_list_path}" | grep -v -E '^$')

for cert_path in ${certs_list}; do

    if [ ! -f "$cert_path" ] && [ ! -d "${cert_path}" ]; then
        echo "Warning: path '${cert_path}' is not a file or a directory."
        warning=1
        continue
    fi

    enddate=$(openssl x509 -noout -enddate -in "${cert_path}" | cut -d'=' -f2)

    # Check cert expiré (critique)
    if ! openssl x509 -checkend 0 -in "${cert_path}" &> /dev/null; then
        critical=1
        echo "Critical: Cert '${cert_path}' has expired on ${enddate}."
        continue
    fi

    # Check cert expire < 10 jours (critique)
    if ! openssl x509 -checkend "${_10_days}" -in "${cert_path}" &> /dev/null; then
        critical=1
        echo "Critical: Cert '${cert_path}' will expire on ${enddate}."
        continue
    fi

    # Check cert expire < 15 jours (warning)
    if ! openssl x509 -checkend "${_15_days}" -in "${cert_path}" &> /dev/null; then
        warning=1
        echo "Warning: Cert '${cert_path}' will expire on ${enddate}."
        continue
    fi

    # Cert expire > 15 jours (OK)
    echo "Cert '${cert_path}' OK."

done

if [ "${critical}" -eq 1 ]; then
    exit 2
elif [ "${warning}" -eq 1 ]; then
    exit 1
else
    exit 0
fi


