Raspberry Pi SSL Zertifikat kostenlos mit Let’s Encrypt erstellen

Eine Verbindung per SSL/TLS schützt den Datenverkehr, indem Pakete verschlüsselt versendet werden. Um eine solche Verbindung aufbauen zu können, benötigt man ein Zertifikat eines vertrauenswürdigen Anbieters, welches meist über 20€ pro Jahr kostet. Dank derLet’s Encrypt Initiative gibt es nun solche SSL Zertifikate auch kostenlos für jedermann. Der große Vorteil besteht darin, dass der Zertifizierer in den gängigen Browsern als vertrauenswürdig eingestuft ist.

In diesem Artikel möchte ich zeigen, wie man für seine Node.JS / Apache Webserver u.ä. Anwendungen (FTP, etc.) ein Raspberry Pi SSL Zertifikat erstellen kann.

 

Vorbereitung

Um ein SSL / TLS Zertifikat auch sinnvoll nutzen zu können, sollte auf dem Raspberry Pi 4 ein Webserver bzw. eine Anwendung, zu welcher z.B. eine HTTP(S) Verbindung aufgebaut werden soll, laufen. Folgende Anwendungen habe ich bereits in vorherigen Tutorials gezeigt:

Falls du einen Apache Server laufen lässt, kannst du diesen wie folgt beenden. Um einen Node.JS Server zu beenden, reicht es die Anwendung zu killen (ggf. Backgroundprozess beenden).

sudo service apache2 stop

Stelle außerdem sicher, dass neben Port 80 auch der Port 443 in deinem Router (Empfehlung: FRITZ!Box) für die interne IP Adresse des Raspberry Pi’s freigegeben ist.

 

Let’s Encrypt SSL Zertifikat erstellen

Um das Tool zum Erstellen des Zertifikats herunterzuladen, nutzen wir wir Git. Auf den neueren neueren Raspbian Versionen ist dieses schon mit dabei. Falls es auf deinem Betriebssystem (z.B. einer Minimal Raspbian Version) nicht dabei sein sollte, kannst du es einfach nachinstallieren:

sudo apt-get install git

Wir laden die Dateien nun in unser Homeverzeichnis und gehen in diesen Ordner:

cd ~
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

Nun brauchst du alle Domains zur Hand, für welche dieses Zertifikat gelten soll. Wenn du bspw. Subdomains hast oder aber deine Domain mit und ohne „www“ aufgerufen wird, kannst du diese gleich alle angeben. In meinem Beispiel möchte ich das SSL Zertifikat lediglich für meine Domain, welche ich von NoIP bekommen habe, erstellen. Bei mehreren Domains solltest du die Hauptdomain als erstes angeben.

Der Befehl zum Erstellen des Let’s Encrypt Zertifikats ist folgender (Domains und Mail ersetzen):

./letsencrypt-auto -d ERSTE_DOMAIN -d ZWEITE_DOMAIN --redirect -m DEINE_MAIL

Der --redirect Parameter gibt an, dass normale HTTP Verbindungen automatisch zu HTTPS weitergeleitet werden. Die Mail Adresse ist für eine eventuelle Kontaktaufnahme nötig bzw. falls das Zertifikat eines Tages widerhergestellt werden müsste.

Tipp: Solltest du einen Apache Server laufen lassen, kannst du das Tool auch alle weiteren Einstellungen vornehmen lassen, indem du den weiteren Parameter --apache hinzufügst.

Du wirst nun aufgefordert die Nutzungsbedingungen zu lesen und zu akzeptieren.

Mit der Option certonly kannst du außerdem angeben, dass lediglich die Zertifikate angelegt werden sollen. In dem Ordner „/etc/letsencrypt/live/“ befindet sich dann ein neuer Ordner mit dem Namen unserer angegeben Hauptdomain. Darin befinden sich vier Schlüsseldateien, welche gebraucht werden. Je nach Anwendung, ist der Einbau der SSL Zertifikate etwas anders. In Node.JS muss das Zertifikat z.B. per Code geladen werden.

Übrigens: Falls du Hilfe brauchst oder alle weiteren Parameters des Tools einsehen willst, kannst du dies einfach mittels ./letsencrypt-auto --help all

 

SSL Zertifikat erneuern

Alle Zertifikate von Let’s Encrypt haben eine Laufzeit von 3 Monaten. Nach dieser Periode sind sie abgelaufen und müssen erneuert werden. Das Erneuern des Raspberry Pi SSL Zertifikats ist allerdings sehr einfach (Anpassen nicht vergessen):

./letsencrypt-auto -d ERSTE_DOMAIN -d ZWEITE_DOMAIN --redirect -m DEINE_MAIL --agree-tos --renew-by-default

Hierbei ist der Parameter das Entscheidende. Die anderen (weiteren) Parameter sind identisch mit denen, die wir beim Erstellen angegeben haben.

Nun ist es allerdings so, dass man im Dauerbetrieb ja nicht unbedingt alle 3 Monate an die Aktualisierung des Zertifikats denken möchte. Daher bietet sich ein kleiner Trick an: Sollte der Raspberry Pi sowieso (fast) immer in Betrieb sein, können wir das Zertifikat auch früher aktualisieren, z.B. jeden Monat. Um dies automatisiert laufen zu lassen, nutzen wir Cron:

sudo crontab -e

Ans Ende dieser Datei fügen wir folgende Zeile hinzu (angepasst wie oben):

0 1 2 * * /home/pi/letsencrypt/letsencrypt-auto -d ERSTE_DOMAIN -d ZWEITE_DOMAIN --redirect -m DEINE_MAIL --agree-tos --renew-by-default

Damit wird am 1. jeden Monats um 02:00 nachts das Tool gestartet und unser Raspberry Pi SSL Zertifikat erneuert.

 

Raspberry Pi SSL Zertifikat testen

Sofern der dynamische DNS Service läuft und dein Webserver wieder gestartet ist (sudo /etc/init.d/apache2 start) kannst du nun im Browser testen, ob dein Zertifikat erkannt wurde. Dazu rufst du einfach die Domain mit https:// am Anfang auf. Speziell bei apache2 ist es wichtig, dass die Datei /etc/apache2/ports.conf lediglich einen Eintrag hat, der Port 443 verwendet (alle anderen auskommentieren):


Listen 443

Im Browser sollte nun das Zertifikat angezeigt werden:

Übersicht der Webanzeige bei einem sicheren SSL Zugang