#!/bin/bash # Check Version! CURRENTVERSION=2 # Autor: Matthias Soika # Mail: m.soika@info-linux.de # Date: 28.12.2017 | 05.02.2018 # Version: 2 | 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 # v_1 Automatische Aktualisierungsfunktion # v_2 Teste auf CURL # Crontab -e 0 3 * * * /usr/sbin/new_cert.sh ## Installation # wget -c -O /usr/sbin/new_cert.sh https://ftp.info-linux.de/arbeiten/Linux/new_cert_current.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) CURL=$(which curl) # 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 if [ -z $CURL ];then echo; apt-get install curl -y; fi function checkversion { UPDATEVERSION=$($CURL -s ftp://rzb.info-linux.de/versionen/new_cert.txt) if [ $? -ne 0 ];then echo; echo " ERROR: Konnte nicht nach updates suchen!"; echo; main; fi } function upgrade { if [ -z $CURRENTVERSION ];then echo; echo " Es ist keine Versionsnummer vorhanden, es kann nicht auf Updates geprüft werden!"; echo; else if [ -z $UPDATEVERSION ];then exit; fi if (( $CURRENTVERSION > $UPDATEVERSION));then echo; echo "Die Aktuelle Verionsnummer ist höher als die Master Versionsnummer, da stimmt was nicht!"; echo "Die Master Versionsnumer ist: $UPDATEVERSION"; echo; fi if (( $CURRENTVERSION < $UPDATEVERSION));then echo "Es ist ein Update Vorhanden"! rm -Rf $0 && wget -c -O /usr/sbin/new_cert.sh ftp://rzb.info-linux.de/arbeiten/Linux/new_cert_current.txt && chmod 754 /usr/sbin/new_cert.sh fi fi main } function main { # 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 } function checklink { 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 } checkversion upgrade checklink