Raspberry PI: SSL mit let’s encrpyt einrichten

Nach Inspiration von:
https://tutorials-raspberrypi.de/raspberry-pi-ssl-zertifikat-kostenlos-mit-lets-encrypt-erstellen/
https://www.itzgeek.com/how-tos/linux/how-to-configure-lets-encrypt-ssl-in-lighttpd-server.html

Vor der Installation wie üblich die Repositories und die installierte Software aktualisieren

sudo apt-get update 

sudo apt-get upgrade

Als erstes gilt es CERTBOT aus dem Repository zu installieren:

sudo apt-get install certbot 

Nach erfolgter Installation muss, damit die Zertifikaterstellung möglich ist, der Webserver unter dem bei der Zertifikatserstellung angegebenen vollständigen Domainnamen (FQDN) aus dem Internet via HTTP (Port 80) erreichbar sein, da für die Validierung unter dieser Adresse der Zugriff auf eine Referenzdatei möglich sein muss. Ggf. sind dazu Anpassungen an der Konfiguration des Webservers sowie eine Port-Weiterleitung beim Internetzugang erforderlich. Ist all das vorbereitet, erfolgt die Zertifikatserstellung mit dem Befehl

certbot certonly --webroot -w /var/www/html/ -d YOURFQDN --redirect -m YOURMAILADDRESS
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Plugins selected: Authenticator webroot, Installer None

Obtaining a new certificate

IMPORTANT NOTES:
Congratulations! 
Your certificate and chain have been saved at:
/etc/letsencrypt/live/YOURFQDN/fullchain.pem

Your key file has been saved at:
/etc/letsencrypt/live/YOURFQDN/privkey.pem

Your cert will expire on 2020-08-31. 
To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew all of your certificates, run

"certbot renew"


If you like Certbot, please consider supporting our work by: 
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate

Donating to EFF: https://eff.org/donate-le

Für die Verwendung mit lighttpd müssen das Zertifikat und der private Schlüssel in einer Datei zusammengefasst werden.

cat /etc/letsencrypt/live/YOURFQDN/cert.pem /etc/letsencrypt/live/YOURFQDN/privkey.pem > /etc/letsencrypt/live/YOURFQDN/web.pem

Um das Zertifikat zu Verwenden, ist die Konfiguration von lighthttpd anzupassen.

$SERVER["socket"] == ":443" 
{
 ssl.engine = "enable"
 
 ssl.pemfile = "/etc/letsencrypt/live/YOURFQDN/web.pem" # Combined Certificate
  ssl.ca-file = "/etc/letsencrypt/live/YOURFQDN/chain.pem" # Root CA
  server.name = "YOURFQDN" # Domain Name OR Virtual Host Name
  server.document-root = "/var/www/html" # Document Root
  server.errorlog = "/var/log/lighttpd/YOURFQDN_error.log"
  accesslog.filename = "/var/log/lighttpd/YOURFQDN_access.log" 

}

Das Zertifikat gilt 90 Tage, muss also rechtzeitig erneuert werden.
Dies geht relativ einfach, sollte aber, damit es nicht vergessen wird, einem CRON-Job übertragen werden.
Um zu prüfen, ob dieser fehlerfrei ablaufen würde, prüft man das zunächst:

certbot renew --webroot -w /var/www/html/ --dry-run

Wenn der Trockenlauf fehlerfrei erfolgte, können die beiden folgenden Befehle in die CRONTAB eingetragen werden. Der Editor wird aufgerufen mit:

sudo crontab -e
# For more information see the manual pages of crontab(5) and cron(8)
# m h dom mon dow command
  5 4 1 */2 * certbot renew --webroot -w /var/www/html/
  7 4 1 */2 * cat /etc/letsencrypt/live/YOURFQDN/cert.pem /etc/letsencrypt/live/YOURFQDN/privkey.pem > /etc/letsencrypt/live/YOURFQDN/web.pem