scripts-bash/check_domain_cert.sh

130 lines
4.4 KiB
Bash

#!/bin/bash
domain="$1"
port="${2:-443}" # Utilise 443 par défaut si le 3ème paramètre (port) n'est pas fourni
# Fonction pour effectuer le test SSL/TLS et obtenir la différence en jours jusqu'à l'expiration
get_days_until_expiration() {
local domain="$1"
local port="$2"
# Tester la date d'expiration du domaine sur le port spécifié
expiration_date=$(echo | openssl s_client -connect "$domain":"$port" -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
# Convertir la date d'expiration en timestamp
expiration_timestamp=$(date -d "$expiration_date" +%s)
# Calculer le nombre de jours restants jusqu'à l'expiration
today_timestamp=$(date +%s)
local diff=$(( (expiration_timestamp - today_timestamp) / 86400 ))
echo $diff
}
check_date() {
local domain="$1"
local port="$2"
echo "Tester la date d'expiration du domaine $domain sur le port $port"
# Obtenir la différence en jours jusqu'à l'expiration
days_until_expiration=$(get_days_until_expiration "$domain" "$port")
echo $days_until_expiration
# Vérifier si $days_until_expiration est supérieur à 126
if [ "$days_until_expiration" -gt 126 ]; then
exit 127
else
exit $days_until_expiration
fi
}
# Fonction pour tester si un MX existe et le tester
check_domain_mx() {
local domain="$1"
local port="$2"
# Vérifier si le domaine commence par "www" ou s'il n'a pas de sous-domaine (domain.tld)
if [[ "$domain" == *.* && ! "$domain" == *.*.* ]]; then
echo -e "Tester l'existence du champ MX pour le domaine $domain"
# Récupérer toutes les réponses MX pour le domaine
mx_domains=$(dig +short MX "$domain" | awk '{sub(/\.$/, "", $2); print $2}')
if [ -n "$mx_domains" ]; then
# Tester chaque domaine MX trouvé sur le port 993
for mx_domain in $mx_domains; do
# Vérifier que le port 993 est ouvert
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then
check_date "$mx_domain" "993" "$email"
else
echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
for mx_domain in $mx_domains; do
# Vérifier que le port 465 est ouvert et tester la connexion SSL
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then
check_date "$mx_domain" "465" "$email"
else
echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
else
if [ -n "$email" ]; then
echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email"
fi
echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide."
fi
else
echo -e "Tester l'existence du champ MX pour le domaine ${domain#*.}"
# Récupérer toutes les réponses MX pour le domaine
mx_domains=$(dig +short MX "${domain#*.}" | awk '{sub(/\.$/, "", $2); print $2}')
if [ -n "$mx_domains" ]; then
# Tester chaque domaine MX trouvé sur le port 993
for mx_domain in $mx_domains; do
# Vérifier que le port 993 est ouvert
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then
check_date "$mx_domain" "993" "$email"
else
echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
for mx_domain in $mx_domains; do
# Vérifier que le port 465 est ouvert et tester la connexion SSL
if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then
check_date "$mx_domain" "465" "$email"
else
echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain."
fi
done
else
if [ -n "$email" ]; then
echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email"
fi
echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide."
fi
fi
}
# Vérifier si le nom de domaine est accessible en utilisant "curl"
if curl --output /dev/null --silent --head --fail "$domain"; then
# Appel initial pour le domaine spécifié
check_date "$domain" "$port"
# Vérifier le domaine MX s'il existe
#check_domain_mx "$domain" "$port"
else
echo " ⚠️ Le domaine $domain n'est pas accessible."
exit -1
fi