Webserver Zertifikate mit Let’s Encrypt erzeugen

Let’s Encrypt hat nun nach langer Vorbereitungszeit damit begonnen, kostenlose SSL / TLS Zertifikate für Webserver auszustellen. Informationen dazu sind auf der offiziellen Seite zu finden. Klick Die erzeugten X.509 Zertifikate werden von allen gängigen Browsern akzeptiert, so dass keine Warnmeldungen beim Aufruf einer verschlüsselten Seite erscheinen. Die reine Prozedur, ein Zertifikat zu erstellen, ist jedoch bei Let’s Encrypt nicht alles. Es besteht auch die Möglichkeit, die Webserver Apache oder Nginx so zu konfigurieren, dass kein manuelles Eingreifen für den Einsatz von „https“ mehr nötig ist. Persönlich stehe ich diesem Punkt jedoch skeptisch gegenüber. Um die automatische Konfiguration zu ermöglichen, muss auf dem entsprechenden Webserver das komplette Let’s Encrypt Paket installiert werden. Dies bringt jedoch automatisch ein gewisses Sicherheitsrisiko mit sich. Auch wenn die Entwickler höchst wahrscheinlich mehr Ahnung von Webservern haben wie ich, möchte ich dennoch die vollständige Hoheit über das System haben. Desweiteren funktioniert der Automatismus nicht auf Shared Hosting Systemen.


Daher zeige ich in diesem Blogpost, wie ein Zertifikat mit Let’s Encrypt manuell erzeugt werden kann. Ein bereits installierter und fertig konfigurierter Webserver wird vorausgesetzt. Es spielt hierbei keine Rolle, ob ein Apache, Nginx oder IIS Webserver eingesetzt wird.

Auf dem Linux System, welches für die Zertifikatserstellung verwendet wird, muss das Lets Encrypt Client Paket installiert werden. Dies geschieht aktuell in der Regel noch mit Git. In naher Zukunft sollte das Paket für die meisten Distributionen in den eigenen Paketquellen vorhanden sein. Für Arch Linux ist dies bereits geschehen. Daher wird für Arch Linux der komplette Prozess parallel in diesem Beitrag beschrieben.

Installation über Git:

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

Alle benötigten Komponenten werden automatisch mit installiert, wenn „letsencrypt-auto“ das erste Mal aufgerufen wird.

./letsencrypt-auto

letsencrypt_create_cert01

Installation unter Arch Linux:

sudo pacman -S letsencrypt

Manuelle Zertifkatserstellung unter Git Installation:
Der Domainname „domain.de“ muss natürlich an die eigene Domain angepasst werden. Es können auch Subdomains angegeben werden.

./letsencrypt-auto certonly -a manual --rsa-key-size 4096 -d domain.de

Manuelle Zertifkatserstellung unter Arch Linux:

sudo letsencrypt certonly -a manual --rsa-key-size 4096 -d domain.de

Lets Encrypt X.509 Zertifikat

Lets Encrypt X.509 Zertifikat

Lets Encrypt X.509 Zertifikat

Lets Encrypt X.509 Zertifikat

Ab jetzt darf nicht weiter gemacht werden, bis der Webserver für die Validierung vorbereitet wurde. Dazu muss im www Root des Webservers eine spezielle Datei mit speziellem Inhalt angelegt werden. Diese wird bei der Erzeugung des Zertifikats abgerufen. Nur wenn die Datei aufgerufen werden kann, wird ein gültiges SSL/TLS Zertifikat erzeugt. Wer den Server unter eigener Kontrolle hat, kann nun eine SSH Verbindung zum Webserver herstellen. Alternativ lässt sich die Datei auch über einen FTP Zugang auf den Webserver legen. Wichtig ist, dass das Verzeichnis „.well-known/acme-challenge“ im www Root liegt. Dies kann je nach System unterschiedlich sein.

sudo mkdir -p /srv/http/.well-known/acme-challenge

Die Datei muss genauso heißen, wie es im Terminal vorgeschrieben wird.

sudo nano /srv/http/.well-known/acme-challenge/XXXF0z5-XXXcwso

Der Inhalt muss ebenso den Vorgaben aus dem Terminal entsprechen.

XXXcwso.XXXhgI0

Sobald die Datei angelegt wurde, kann der Vorgang fortgesetzt werden. Die fertigen Zertifikate liegen nun im Verzeichnis „/etc/letsencrypt/live/domain.de“.

sudo su
ls /etc/letsencrypt/live/domain.de/

Der Inhalt des Verzeichnisses „/ets/letsencrypt“ sollte gesichert werden, da die Informationen auch für die Erneuerung der Zertifikate benötigt werden. Die fertigen Zertifikate können jetzt auf den Webserver kopiert werden. Bei einem Shared Hoster kann dies alternativ wieder über FTP erfolgen. Sollte der Webserver über SSH erreichbar sein, können die Daten direkt per SCP kopiert werden.

Zertifikate mit SCP auf den Webserver kopieren:

scp /etc/letsencrypt/live/domain.de/privkey.pem benutzer@192.168.1.100:/tmp/privkey.pem
scp /etc/letsencrypt/live/domain.de/fullchain.pem benutzer@192.168.1.100:/tmp/fullchain.pem

Zertifikate bei Einsatz von Public Keys mit SCP auf den Webserver kopieren:

scp -i ~/.ssh/id_rsa /etc/letsencrypt/live/domain.de/privkey.pem benutzer@192.168.1.100:/tmp/privkey.pem
scp -i ~/.ssh/id_rsa /etc/letsencrypt/live/domain.de/fullchain.pem benutzer@192.168.1.100:/tmp/fullchain.pem

Die Zertifikate wurden erstmal nur nach „/tmp“ auf den Webserver kopiert, um sicher zu gehen, dass vorhandene Dateien nicht überschrieben werden, ohne sie vorher gesichert zu haben. Die neuen Zertifikate können nun in das richtige Ziel verschoben werden. In meinem Fall ist das „/etc/nginx/certs/domain.de“. Dies kann je nach Konfiguration unterschiedlich sein und muss entsprechend angepasst werden.

sudo mv /tmp/privkey.pem /etc/nginx/certs/domain.de/privkey.pem
sudo mv /tmp/fullchain.pem /etc/nginx/certs/domain.de/fullchain.pem

Im vorletzten Schritt, werden die Berechtigungen noch neu gesetzt. Der User und die Gruppe „www-data“ müssen ggf. noch angepasst werden.

sudo chown www-data:www-data /etc/nginx/certs/domain.de/*.pem
sudo chmod 600 /etc/nginx/certs/domain.de/*.pem

Um die neuen X.509 Zertifikate jetzt zu verwenden, muss der Webserver einmal neu gestartet werden.

Nginx:

sudo systemctl restart nginx.service

Apache:

sudo systemctl restart httpd.service

Ein Aufruf der Webseite sollte jetzt über das Let’s Encrypt Zertifikat, welches „nur“ 90 Tage lang gültig ist, verschlüsselt stattfinden.

Lets Encrypt X.509 Zertifikat

Wenn Ihr den Prozess bereits selbst inklusive Webserver Konfiguration durchgeführt habt, würden mich die gemachten Erfahrungen interessieren. Über einen Kommentar würde ich mich sehr freuen.