Compare commits
No commits in common. "0ae9c04770122c9d4aca29cded3a11a057b0d7eb" and "8f726c0ca1eec2ae6064831ada79e526059ec9ef" have entirely different histories.
0ae9c04770
...
8f726c0ca1
@ -62,15 +62,6 @@ Wenn ein Zertifikat länger gültig ist, als in der Variable angegeben, sieht di
|
|||||||
|
|
||||||
`Das Zertifikat für dl.techniverse.net ist noch 88 Tage gültig. Keine Erneuerung erforderlich.`
|
`Das Zertifikat für dl.techniverse.net ist noch 88 Tage gültig. Keine Erneuerung erforderlich.`
|
||||||
|
|
||||||
Wenn ein Zertifikat mit einem Alternativ DNS Name verlängert / erstellt wird, sieht die Ausgabe folgend aus:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
Das Zertifikat für cloud.media-techport.de,cloud.techniverse.net läuft in weniger als 29 Tagen ab (in 27 Tagen).
|
|
||||||
Erneuere/Erstelle Zertifikat für: cloud.media-techport.de mit alternativen Namen: cloud.media-techport.de,cloud.techniverse.net
|
|
||||||
Certificate installation was successful.
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## Cronjob:
|
## Cronjob:
|
||||||
|
|
||||||
Der Cronjob kann wiefolgt konfiguriert werden.
|
Der Cronjob kann wiefolgt konfiguriert werden.
|
||||||
|
@ -5,22 +5,24 @@
|
|||||||
# Autor: Patrick Asmus
|
# Autor: Patrick Asmus
|
||||||
# Web: https://www.techniverse.net
|
# Web: https://www.techniverse.net
|
||||||
# Git-Reposit.: https://git.techniverse.net/scriptos/cloudpanel-autorenew-letsencrypt-certs.git
|
# Git-Reposit.: https://git.techniverse.net/scriptos/cloudpanel-autorenew-letsencrypt-certs.git
|
||||||
# Version: 1.5
|
# Version: 1.4
|
||||||
# Datum: 02.07.2024
|
# Datum: 02.07.2024
|
||||||
# Modifikation: Alternative DNS Names werden nun auch unterstützt
|
# Modifikation: Überprüfung der Zertifikate hinzugefügt
|
||||||
#####################################################
|
#####################################################
|
||||||
|
|
||||||
# Variablen
|
# Variables
|
||||||
hostname=$(hostname)
|
hostname=$(hostname)
|
||||||
config_path="/etc/nginx/sites-enabled/"
|
config_path="/etc/nginx/sites-enabled/"
|
||||||
log_dir="/var/log/script-logs"
|
log_dir="/var/log/script-logs"
|
||||||
log_file="$log_dir/cloudpanel-letsencrypt-renew.log"
|
log_file="$log_dir/cloudpanel-letsencrypt-renew.log"
|
||||||
|
|
||||||
|
# Email Settings
|
||||||
email_from="mail@domain.com"
|
email_from="mail@domain.com"
|
||||||
email_from_name="$hostname | CloudPanel Server"
|
email_from_name="$hostname | CloudPanel Server"
|
||||||
email_to="mail@domain.com"
|
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
|
days_until_expiry=14
|
||||||
exclude_domains="example.com other.example.com"
|
exclude_domains="example.com other.example.com"
|
||||||
|
|
||||||
@ -31,39 +33,40 @@ exec 2>&1
|
|||||||
|
|
||||||
# Funktion zur Erneuerung/Erstellung von Zertifikaten
|
# Funktion zur Erneuerung/Erstellung von Zertifikaten
|
||||||
renew_certificate() {
|
renew_certificate() {
|
||||||
local primary_domain=$1
|
local domain=$1
|
||||||
local subject_alternative_names=$2
|
if [[ ! $exclude_domains =~ (^|[[:space:]])$domain($|[[:space:]]) ]]; then
|
||||||
|
echo "Erneuere/Erstelle Zertifikat für: $domain"
|
||||||
echo "Erneuere/Erstelle Zertifikat für: $primary_domain mit alternativen Namen: $subject_alternative_names"
|
bash /usr/bin/clpctl lets-encrypt:install:certificate --domainName=$domain
|
||||||
bash /usr/bin/clpctl lets-encrypt:install:certificate --domainName="$primary_domain" --subjectAlternativeName="$subject_alternative_names"
|
else
|
||||||
|
echo "Überspringe $domain, da es ausgeschlossen ist."
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Funktion zur Überprüfung des Ablaufdatums eines Zertifikats
|
# Funktion zur Überprüfung des Ablaufdatums eines Zertifikats
|
||||||
check_certificate_expiry() {
|
check_certificate_expiry() {
|
||||||
local primary_domain=$1
|
local domain=$1
|
||||||
local all_domains=$2
|
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_date=$(openssl s_client -connect $primary_domain:443 -servername $primary_domain < /dev/null 2>/dev/null | openssl x509 -noout -dates | grep 'notAfter=' | cut -d= -f2)
|
|
||||||
local expiry_timestamp=$(date -d "$expiry_date" +%s)
|
local expiry_timestamp=$(date -d "$expiry_date" +%s)
|
||||||
local current_timestamp=$(date +%s)
|
local current_timestamp=$(date +%s)
|
||||||
local days_left=$(( (expiry_timestamp - current_timestamp) / 86400 ))
|
local days_left=$(( (expiry_timestamp - current_timestamp) / 86400 ))
|
||||||
|
|
||||||
if [[ $days_left -lt $days_until_expiry ]]; then
|
if [[ $days_left -lt $days_until_expiry ]]; then
|
||||||
echo "Das Zertifikat für $all_domains läuft in weniger als $days_until_expiry Tagen ab (in $days_left Tagen)."
|
echo "Das Zertifikat für $domain läuft in weniger als $days_until_expiry Tagen ab (in $days_left Tagen)."
|
||||||
renew_certificate "$primary_domain" "$all_domains"
|
renew_certificate $domain
|
||||||
else
|
else
|
||||||
echo "Das Zertifikat für $all_domains ist noch $days_left Tage gültig. Keine Erneuerung erforderlich."
|
echo "Das Zertifikat für $domain ist noch $days_left Tage gültig. Keine Erneuerung erforderlich."
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Extrahiere Domains aus den Konfigurationsdateien und überprüfe Zertifikatsgültigkeit
|
# Extrahiere Domains aus den Konfigurationsdateien und überprüfe Zertifikatsgültigkeit
|
||||||
for file in $config_path*; do
|
for file in $config_path*; do
|
||||||
primary_domain=$(grep "server_name" $file | awk '{print $2}' | tr -d ';' | sed 's/^www\.//' | tr -d '\r')
|
domains=$(grep "server_name" $file | awk '{print $2}' | tr -d ';' | sed 's/^www\.//' | tr -d '\r')
|
||||||
all_domains=$(grep "server_name" $file | awk '{for (i=2; i<=NF; i++) print $i}' | tr -d ';' | sed 's/^www\.//' | tr -d '\r' | paste -sd "," -)
|
for domain in $domains; do
|
||||||
|
if [ "$domain" != "_" ]; then
|
||||||
if [ -n "$primary_domain" ]; then
|
check_certificate_expiry $domain
|
||||||
check_certificate_expiry "$primary_domain" "$all_domains"
|
fi
|
||||||
fi
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
# Senden einer E-Mail mit dem Logfile als Anhang
|
# Senden einer E-Mail mit dem Logfile als Anhang
|
||||||
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"
|
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"
|
||||||
|
Loading…
Reference in New Issue
Block a user