Let's Encrypt SSL Zertifikat erstellen

Aus CyberWiki
Zur Navigation springen Zur Suche springen

Vorbereitungen

Eine Verbindung per SSL/TLS schützt den Datenverkehr, indem Pakete verschlüsselt versendet werden. Dank der Let’s Encrypt Initiative gibt es nun solche SSL Zertifikate auch kostenlos. Der große Vorteil (z.B. gegenüber OpenSSL) besteht darin, dass der Zertifizierer in den gängigen Browsern als vertrauenswürdig eingestuft ist.

Hier soll ein Zertifikat für den Apache Webserver erstellt werden.

Voraussetzung:

  • Apache ist installiert
  • Domain (DDNS) existiert

Zuerst wird der Apache Server gestoppt

sudo service apache2 stop

An dieser Stelle kann am Router/Modem auch die Portweiterleitung für 443 (https) zusätzlich zu 80 (http) vorgenommen werden.

Der Rechner kann auch gleich aktualisiert werden:

sudo apt-get update
sudo apt-get upgrade

Let's Encrypt SSL Zertifikat erstellen

Um das Let's Encrypt-Tool herunterzuladen, verwenden wir Git. Möglicherweise muss es zuerst installiert werden (sudo apt-get install git).

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

Man benötigt danach alle Domains (Subdomains), für die das Zertifikat gelten soll (z.B. domain.at, www.domain.at, etc.). Im folgenden Beispiel sollen zwei Domainen mit dem Zertifikat versorgt werden.

Der Befehl für die Zertifikatserstellung lautet nun:

./letsencrypt-auto -d domain1.at -d domain2.at --redirect --apache -m mailaddr@gmx.at

Der --redirect Parameter sorgt dafür, dass http-Verbindungen zu https weitergeleitet werden, die mail-Adresse ist für eine eventuelle Kontaktaufnahme nötig und --apache nimmt bei diesem Webserver auch gleich die erforderlichen Einstellunge vor.

Mit der Option certonly kann man lediglich die Zertifikate anlegen. Sie befinden sich danach im Ordner /etc/letsencrypt/live/ falls man sie für andere Anwendungen benötigt. Der Einbau muss dann manuell vorgenommen werden.

Hilfe erhält man mit ./letsencrypt-auto --help all

Danach können die Zertifikate getestet werden.

sudo /etc/init.d/apache2 start

In der Datei /etc/apache2/ports.conf müssen Einträge für den Port 80 und den Port 443 stehen, alle anderen könnten auskommentiert werden.

Listen 80
<IfModule mod_ssl.c>
     Listen 443
</IfModule>

Wird auch Port 80 auskommentiert erscheint ein Fehler wenn der Browser z.B. domain.at auf http://domain.at weiterleitet und nicht auf https://domain.at. Das machen z.B. Edge auf Windows 10 und Chrome auf Android. Firefox redirected auf Port 443. D.h. Port 80 darf nicht gesperrt werden, sonst kann er vom Webserver nicht auf Port 443 redirected werden.

Die Apache2-Konfiguration der redirection ist im Detail auf der Seite "MediaWiki installieren" beschrieben.

Hat der Einbau funktioniert, erscheint beim Aufruf der Domain im Browser ein kleines Schloss. Man kann das Zertifikat auch unter https://www.ssllabs.com/ssltest/index.html testen.

Let's Encrypt SSL Zertifikat erneuern

Die Zertifikate haben eine Laufzeit von 3 Monaten, danach müssen sie erneuert werden. Das geschieht am besten mit einem Cronjob, der monatlich läuft. Den Eintrag für die Crontab kann man hier generieren: https://crontab-generator.org/

Soll der Job am 1. jeden Monats um 2:00 gestartet werden, lautet der Eintrag

sudo crontab -e
0 2 1 * * /home/pi/letsencrypt/letsencrypt-auto -d domain.at --redirect -m mailaddr@gmx.at --agree-tos --renew-by-default

Hier ist der Parameter --renew-by-default ausschlaggebend. Einen Logfile findet man unter

sudo cat /var/log/letsencrypt/letsencrypt.log

Bei mir ist der Erneuerungsprozess schief gelaufen mit folgender Fehlermeldung:

Installing Python packages...
Had a problem while installing Python packages.
pip prints the following errors:
Lange Fehlerliste, u. a.
THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE
...

Abhilfe hat die Entfernung der pip.conf-Datei gebracht.

$ mv /etc/pip.conf /etc/pip.conf_orig

Die Website von Let's Encrypt findet man übrigens hier: https://letsencrypt.org/