From 29a11ba524dfceb16b84506f62095a0f88b932aa Mon Sep 17 00:00:00 2001 From: scriptos Date: Tue, 2 Jul 2024 20:08:42 +0200 Subject: [PATCH] =?UTF-8?q?=C3=9Cberpr=C3=BCfung=20der=20Zertifikate=20hin?= =?UTF-8?q?zugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloudpanel-autorenew-letsencrypt-certs.v1.sh | 31 +++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/cloudpanel-autorenew-letsencrypt-certs.v1.sh b/cloudpanel-autorenew-letsencrypt-certs.v1.sh index 5b9032c..3ae5898 100644 --- a/cloudpanel-autorenew-letsencrypt-certs.v1.sh +++ b/cloudpanel-autorenew-letsencrypt-certs.v1.sh @@ -5,9 +5,9 @@ # Autor: Patrick Asmus # Web: https://www.techniverse.net # Git-Reposit.: https://git.techniverse.net/scriptos/cloudpanel-autorenew-letsencrypt-certs.git -# Version: 1.3 -# Datum: 20.05.2024 -# Modifikation: Domains können nun von der Zertifikatenerneuerung ausgeschlossen werden +# Version: 1.4 +# Datum: 02.07.2024 +# Modifikation: Überprüfung der Zertifikate hinzugefügt ##################################################### # Variables @@ -20,9 +20,10 @@ log_file="$log_dir/cloudpanel-letsencrypt-renew.log" email_from="mail@domain.com" email_from_name="$hostname | CloudPanel Server" email_to="mail@domain.com" -email_subject="Letsencrypt Zertifikate wurden auf $HOSTNAME erneuert" +email_subject="Letsencrypt Zertifikate wurden auf $hostname erneuert" # Exclude Domains +days_until_expiry=14 exclude_domains="example.com other.example.com" # Leite die Ausgaben in das Log-File um @@ -41,15 +42,31 @@ renew_certificate() { fi } -# Extrahiere Domains aus den Konfigurationsdateien und führe Zertifikatserneuerung aus +# Funktion zur Überprüfung des Ablaufdatums eines Zertifikats +check_certificate_expiry() { + local domain=$1 + local expiry_date=$(openssl s_client -connect $domain:443 -servername $domain < /dev/null 2>/dev/null | openssl x509 -noout -dates | grep 'notAfter=' | cut -d= -f2) + local expiry_timestamp=$(date -d "$expiry_date" +%s) + local current_timestamp=$(date +%s) + local days_left=$(( (expiry_timestamp - current_timestamp) / 86400 )) + + if [[ $days_left -lt $days_until_expiry ]]; then + echo "Das Zertifikat für $domain läuft in weniger als $days_until_expiry Tagen ab (in $days_left Tagen)." + renew_certificate $domain + else + echo "Das Zertifikat für $domain ist noch $days_left Tage gültig. Keine Erneuerung erforderlich." + fi +} + +# Extrahiere Domains aus den Konfigurationsdateien und überprüfe Zertifikatsgültigkeit for file in $config_path*; do domains=$(grep "server_name" $file | awk '{print $2}' | tr -d ';' | sed 's/^www\.//' | tr -d '\r') for domain in $domains; do if [ "$domain" != "_" ]; then - renew_certificate $domain + check_certificate_expiry $domain fi done done # Senden einer E-Mail mit dem Logfile als Anhang -echo "Die Letsencrypt Zertifikate wurden auf $HOSTNAME erneuert. Bitte überprüfe das angehängte Log für Details." | mail -a "$log_file" -s "$email_subject" -r "\"$email_from_name\" <$email_from>" "$email_to" +echo "Die Letsencrypt Zertifikate wurden auf $HOSTNAME überprüft und ggf. erneuert. Bitte überprüfe das angehängte Log für Details." | mail -a "$log_file" -s "$email_subject" -r "\"$email_from_name\" <$email_from>" "$email_to" -- 2.45.2