Benutzer-Werkzeuge

Webseiten-Werkzeuge


raspberry_pi_ssl_zertifikat

SSL Zertifikat via Certbot

(Dieser Artikel wurde am 26.09.2019 aktualisiert und befindet sich auf dem Stand von Raspbian Buster)

Transport Layer Security (TLS) oder auch umgangssprachlich SSL genannt, ist ein Verschlüsselungsprotokoll für eine sichere Datenübertragung. Viele kennen mit Sicherheit das kleine grüne Schloss in der Browserzeile, welches die Verwendung einer sicheren Verbindung anzeigt. Eine Webseite mit solch einer Verbindung erlaubt es den Benutzern sicher Passwörter oder andere sensible Daten an den Server zu übermitteln. Zudem weckt es natürlich auch das Vertrauen der Internetnutzer, sollte es sich dabei um eine Webseite handeln. Mittlerweile gilt schon die Devise, jeder der eine Webseite ernsthaft betreiben möchte, sollte ein SSL-Zertifikat besitzen. Ob das auch wirklich Sinn bei Webseiten macht, welche gar keine Passwörter oder sonstige sensible Daten abspeichern/transferieren, lasse ich mal dahin gestellt.

Um ein SSL-Zertifikat zu bekommen, gibt es mehrere Möglichkeiten. Etliche Anbieter wie Thawte, RapidSSL, GEO Trust, GlobeSSL, Comodo oder VeriSign stellen gegen eine nicht geringe Gebühr ein SSL-Zertifikat aus.

Let’s Encrypt verfolgt den Ansatz, kostenlose X.509 Zertifikate für jedermann zugänglich zu machen, um das Internet so ein Stück sicherer zu machen. Genau solch ein Zertifikat sollst du nun erstellen und den Webserver mit diesem konfigurieren.

Vorbereitung

Es ist wichtig über eine feste Domain bzw. DynDNS zu verfügen und eine statische IP-Adresse innerhalb des eigenen Netzwerkes dem Pi zugewiesen zu haben.

Zuerst einmal installierst du mit dem nachfolgenden Befehl certbot, worüber das SSL-Zertifikat generiert wird:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get install certbot

Bei DynDNS kann es aufgrund der Limitierung von Zertifikaten zu Problemen kommen. Deshalb macht hier eine eigene Domain mehr Sinn. Du kannst aber natürlich auch dein Glück mit einer DynDNS-Adresse versuchen.

Das SSL Zertifikat generieren

Wenn du in /var/www/html/ einen Unterordner für deine Webseite erstellt hast, dann musst du einen VHost anlegen oder in der Konfiguration des Webservers den Standardpfad des Webservers anpassen, damit das Skript über die Domain auf dem Webserver den Ordner „betreten“ kann. Wie die Einrichtung eines VHost funktioniert, erfährst du im Artikel Webserver einrichten.

Die Generierung des Zertifikats ist an sich recht einfach und wird mit folgendem Befehl erstellt:

sudo certbot certonly --webroot -w /var/www/html/ -d www.domain.de -d domain.de

Gegebenenfalls ist der Link /var/www/html/ auf die eigenen Bedürfnisse anzupassen (Siehe Hinweisbox).

Während der Generierung des Zertifikats muss die E-Mail-Adresse hinterlegt und die Nutzungsbedingungen akzeptiert werden.

Bei erfolgreicher Generierung solltest du folgende Ausgabe erhalten:

Im Verzeichnis /etc/letsencrypt/live/domain/ befinden sich nun 4 Dateien. Das öffentliche sowie das Intermediate Zertifikat, beides zusammen und der Schlüssel des Zertifikats.

Zertifikate automatisch erneuern

Zertifikate die von Let’s Encrypt ausgestellt werden haben eine Gültigkeit von 90 Tagen, danach müssen Sie erneuert werden.

Um Sie zu erneuern, kann folgender Befehl benutzt werden:

sudo certbot renew --dry-run

Um den Vorgang zu automatisieren, legst du einfach einen Cronjob an, welcher einmal im Monat die Zertifikate erneuert. So kannst du garantieren, dass immer ein funktionierendes Zertifikat vorhanden ist.

Mit dem Befehl

sudo crontab -e

wird der Crontab des User Root geöffnet. Das ist deshalb wichtig, da dass Script mit Root-Rechten ausgeführt werden muss.

Dort wird folgende Zeile eingefügt:

0 6 28 * * sudo certbot renew --dry-run "systemctl reload lighttpd" > /home/pi/KeyLog

Das Zertifikat wird dann an jedem 28. des Monats morgens um 6 Uhr erneuert und der Webserver anschließend neu gestartet. „lighttpd“ muss dabei durch den jeweiligen Webserver ersetzt werden. Das Resultat davon wird in der Datei KeyLog im Home-Ordner eines beliebigen Users gespeichert.

VHost-Konfiguration des Webservers Lighttpd

Da ich in diesem Wiki den Webserver Lighttpd empfehle und auch selber nutze, werde ich dir die SSL Konfiguration anhand dieses Webservers erklären.

Zunächst einmal fügst du das Zertifikat mit dem privaten Schlüssel zu einer Datei zusammen.

Da selbst mit sudo dafür keine Berechtigung besteht, musst du dich dazu als root einloggen. Dazu musst du zuerst dem User root ein Passwort einrichten:

sudo passwd

Nachdem du das Passwort eingerichtet hast, wechselst du auf den User root:

su

Nun führst du folgenden Befehl aus:

cat /etc/letsencrypt/live/meineseite.ddns.net/cert.pem /etc/letsencrypt/live/meineseite.ddns.net/privkey.pem > /etc/letsencrypt/live/meineseite.ddns.net/combined.pem

Wechsle wieder auf den User pi:

su pi

Anschließend fügst du das Zertifikat in die VHost Konfiguration des Lighttpd-Webservers ein. Dabei handelt es sich um die Datei, die du im Artikel Raspberry Pi Lighttpd Webserver bei der Vhost-Konfiguration angelegt hast:

sudo nano /etc/lighttpd/conf-available/webseitenname.conf

In dieser Datei entfernst du den kompletten Inhalt und ersetzt Ihn wie folgt:

$HTTP["scheme"] == "http" {
$HTTP["host"] == "kohtapi.spdns.org" { #FDQN

server.document-root = "/var/www/html/kohtapi/" # Hauptordner des Webservers
accesslog.filename = "/var/log/lighttpd/kohtapi.log" # Web Server Access Logfile
server.errorlog = "/var/log/lighttpd/kohtapi.log" # Web Server Error Logfile
url.redirect = ("" => "https://${url.authority}${url.path}${qsa}")
}
}

$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/letsencrypt/live/kohtapi.spdns.org/combined.pem" # Kombinierte$
ssl.ca-file = "/etc/letsencrypt/live/kohtapi.spdns.org/chain.pem" # Root CA
server.name = "kohtapi.spdns.org" # Domainname oder Virtual Host Name
server.document-root = "/var/www/html/kohtapi/" # Hauptordner des Webservers
}

Hier musst du wieder einige Anpassungen vornehmen. Ersetze folgende Stellen durch deine Gegebenheiten:

  • $HTTP[„host“] == „kohtapi.spdns.org“ { #FDQN
  • server.document-root = „/var/www/html/kohtapi/“ # Hauptordner des Webservers
  • accesslog.filename = „/var/log/lighttpd/kohtapi.log“ # Web Server Access Logfile
  • server.errorlog = „/var/log/lighttpd/kohtapi.log“ # Web Server Error Logfile
  • url.redirect = („“ ⇒ „https:/ /${url.authority}${url.path}${qsa}“)
  • ssl.pemfile = „/etc/letsencrypt/live/kohtapi.spdns.org/combined.pem“ # Kombiniertes Zertifikat
  • ssl.ca-file = „/etc/letsencrypt/live/kohtapi.spdns.org/chain.pem“ # Root CA
  • server.name = „kohtapi.spdns.org“ # Domainname oder Virtual Host Name
  • server.document-root = „/var/www/html/kohtapi/“ # Hauptordner des Webservers

Speichere den Inhalt der Datei mit STRG + O und Enter und beende Nano mit STRG + X.

Der Webserver ist nun fertig konfiguriert und das SSl-Zertifiakt eingebunden. Du kannst den Webserver nun neu starten:

sudo service lighttpd restart
raspberry_pi_ssl_zertifikat.txt · Zuletzt geändert: 2019/09/28 00:59 von kohtachan