#!/bin/bash # Autor: Matthias Soika # Mail: m.soika@info-linux.de # Date: 28.12.2017 | 01.02.2018 # Version: 0.6 | Final # Description: Automatisches Aktualisieren der Certifikate von Lets Encypt und anpassen der Konfiguration von Apache2 # v_0.4 Prüfe auf Datei vorhanden und wenn älter als 80 Tage dann erstelle mir ein neues Zertifikat # und einen neuen Link # Crontab -e 0 3 * * * /usr/sbin/new_cert.sh ## Installation # wget -c -O /usr/sbin/new_cert.sh ftp://rzb.info-linux.de/arbeiten/Linux/new_cert.txt && chmod 754 /usr/sbin/new_cert.sh # wget -c -O /usr/sbin/new_cert.sh ftp://www.rzb.local/arbeiten/Linux/new_cert.sh.txt && chmod 754 /usr/sbin/new_cert.sh # Variablen: LECPATH=/etc/letsencrypt/keys FIND=$(which find) LS=$(which ls) HEAD=$(which head) LN=$(which ln) SORT=$(which sort) SERVICE_APACHE="/etc/init.d/apache2" CERTBOT=$(which certbot) REALPATH=$(which realpath) # Prüfungen: if [ ! $UID = 0 ]; then echo; echo " Sie sollten dieses Skript als user root ausführen, sonst läuft es nicht!"; echo; exit; fi if [ -z $FIND ]; then echo; echo " Das Programm FIND wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $LS ]; then echo; echo " Das Programm LS wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $HEAD ]; then echo; echo " Das Programm HEAD wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $LN ]; then echo; echo " Das Programm LN wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ -z $SORT ]; then echo; echo " Das Programm SORT wurde nicht gefunden. Das ist schlecht."; echo; exit; fi if [ ! -d $LECPATH ]; then echo; echo " Das Verzeichnis letsencrypt existiert nicht"; echo; exit; fi if [ ! -x $SERVICE_APACHE ];then echo; echo " Der Apache2 Dienst ist anscheinend nicht verfügbar! Bitte prüfen sie das!"; echo; exit; fi if [ -z $CERTBOT ];then echo; echo " Das Programm Certbot scheint nicht installiert zu sein. Bitte prüfen Sie das!"; echo; exit; fi if [ -z $REALPATH ];then echo; echo " Das Programm realpath scheint nicht installiert zu sein. Bitte prüfen Sie das!"; echo; exit; fi # Suche nach der jüngsten Datei. CURRENTFILE=$($FIND $LECPATH/ -type f | $SORT -r | $HEAD -1) # Prüfe auf älter als 80 Tage, wenn diese Bedingung erfüllt ist hole ein neues Zertifikat und starte den Apache neu. if [ -z $CURRENTFILE ];then echo echo " Irgendwas stimmt nicht! Ich konnte keine Datei automatisiert ermitteln. Der Programmablauf wird vorzeitig beendet!" echo exit fi if [[ $($FIND "$CURRENTFILE" -mtime +80 -print) ]]; then # Stoppe den Apache2 $SERVICE_APACHE stop > /dev/null 2>&1 # Hole ein neues Zertifikat von Let's Encypt $CERTBOT renew > /dev/null 2>&1 # Link erstellen if [ -L $LECPATH/letsencrypt.pem ];then rm -rf $LECPATH/letsencrypt.pem; fi $LN -sfn $CURRENTFILE $LECPATH/letsencrypt.pem # Starte den Apache2 neu $SERVICE_APACHE start > /dev/null 2>&1 fi if [ ! -L $LECPATH/letsencrypt.pem ];then $LN -sfn $CURRENTFILE $LECPATH/letsencrypt.pem; fi if [ $($REALPATH $LECPATH/letsencrypt.pem) != $CURRENTFILE ];then if [ -L $LECPATH/letsencrypt.pem ];then rm -rf $LECPATH/letsencrypt.pem; fi if [ ! -L $LECPATH/letsencrypt.pem ];then $LN -sfn $CURRENTFILE $LECPATH/letsencrypt.pem; fi fi