Let’s Encrypt via acme.sh für Apache und Nginx

Ende 2015 bin ich auf das Thema Webserver SSL Optimierung: HSTS und HPKP eingegangen. Nun möchte ich euch ein kleines Update zu Let’s Encrypt mit dem acme.sh Script für Apache und Nginx geben. Die Anleitung basiert auf dem ACME Webroot Verfahren, ein Stoppen des Webservers wie beim Standalone Verfahren ist nicht nötig.

Apache2

Punkt 1: Apache Webserver vorbereiten

Wir aktivieren zuerst das Headers, SSL und Rewrite Modul.

Erstellen eine globale Alias Datei (gültig für alle vHosts).

oder für Apache >=2.4

Bei der 2. Variante aktivieren wir die Konfiguration noch.

Jetzt legen wir den Alias-Ordner an und verteilen die korrekten Rechte.

Die CipherSuite wird auf einen aktuellen Stand gebracht (hier gibt es aktuelle Ciphers cipherli.st).

Apache neustarten.

Punkt 2: Let’s Encrypt: acme.sh

Wir installieren acme.sh. Dies ist ein schlankes Shell Script welches jede Let’s Encrypt Funktion wie issue, renew, cronjob etc. mit sich bringt. Es wird automatisch ein Cronjob angelegt der täglich ein renew für alle Domains anfragt.

Einen Ordner für die Zertifikate legen wir in folgender Datei fest, ich empfehle den bereits vorhandenen Ordner /etc/ssl/private.

Wir schließen das Konsolenfenster und verbinden uns zum Server neu, um die Umgebungsvariable von acme.sh zu laden. Das Script ist nun direkt ausführbar.

Punkt 3: Zertifikat erstellen

Beginnen wir mit einem Test, die obigen Einstellungen sollten zuerst immer mit „–test“ geprüft werden. Let’s Encrypt lässt nur 5 Versuche in 7 Tagen zu, danach ist die Domain temporär gesperrt. Ich empfehle in diesem Zuge von 2048-Bit oder 4096-Bit RSA Keys gleich auf das modernere ec-256 (ECDSA P-256) zu wechseln. Zum einen bringt dies eine höhere Sicherheit und zum anderen sind die Keys kürzer und somit performanter.

TIPP: Wenn der Alias /var/www/letsencrypt nicht funktioniert, könnt ihr auch den DocumentRoot verwenden.

Sollte die Verifizierung erfolgreich gewesen sein, findet ihr folgende Dateien wieder.

Diesen Ordner können wir löschen, da mit „–test“ die Staging API von Let’s Encrypt genutzt wird und nur Fake Zertifikate ausgestellt werden.

Das echte Zertifikat kann nun ausgestellt werden.

Punkt 4: Zertifikat in Apache einbinden

Wir editieren unsere vHost Config und fügen das soeben erstelle Zertifikat sowie Security Headers ein.

Ich möchte an dieser Stelle darauf hinweisen, dass ich Public Key Pinning (HPKP) in dieser Anleitung bewusst außenvor lasse um ein eventuelles Aussperren von Besuchern zu verhindern. Wer sich dieser Gefahr bewusst ist, kann gerne meiner Anleitung folgen.

Apache neustarten.

Das Ergebnis prüfen wir auf SSL Labs und Security Headers.

 

nginx

Punkt 1: Nginx Webserver vorbereiten

Wir erstellen die nötigen Ordner und eine globale Datei die in jeden vHost „included“ wird. Das vereinfacht späteres Anpassen.

Für die globalen SSL Einstellungen legen wir ebenfalls eine Datei an. Die Ciphers werden auf einen aktuellen Stand gebracht (hier gibt es aktuelle Ciphers cipherli.st). Auch die Security Headers werden hier hinterlegt.

Falls noch nicht vorhanden, legen wir eine dhparams Datei an.

Nginx neustarten.

Punkt 2: Let’s Encrypt: acme.sh

Wir installieren acme.sh. Dies ist ein schlankes Shell Script welches jede Let’s Encrypt Funktion wie issue, renew, cronjob etc. mit sich bringt. Es wird automatisch ein Cronjob angelegt der täglich ein renew für alle Domains anfragt.

Einen Ordner für die Zertifikate legen wir in folgender Datei fest, ich empfehle den bereits vorhandenen Ordner /etc/ssl/private.

Wir schließen das Konsolenfenster und verbinden uns zum Server neu, um die Umgebungsvariable von acme.sh zu laden. Das Script ist nun direkt ausführbar.

Punkt 3: Zertifikat erstellen

Beginnen wir mit einem Test, die obigen Einstellungen sollten zuerst immer mit „–test“ geprüft werden. Let’s Encrypt lässt nur 5 Versuche in 7 Tagen zu, danach ist die Domain temporär gesperrt. Ich empfehle in diesem Zuge von 2048-Bit oder 4096-Bit RSA Keys gleich auf das modernere ec-256 (ECDSA P-256) zu wechseln. Zum einen bringt dies eine höhere Sicherheit und zum anderen sind die Keys kürzer und somit performanter.

TIPP: Wenn die Location /var/www/letsencrypt nicht funktioniert, könnt ihr auch den Root verwenden.

Sollte die Verifizierung erfolgreich gewesen sein, findet ihr folgende Dateien wieder.

Diesen Ordner können wir löschen, da mit „–test“ die Staging API von Let’s Encrypt genutzt wird und nur Fake Zertifikate ausgestellt werden.

Das echte Zertifikat kann nun ausgestellt werden.

Punkt 4: Zertifikat in Nginx einbinden

Wir editieren unsere vHost Config und fügen das soeben erstelle Zertifikat sowie Security Headers ein.

Ich möchte an dieser Stelle darauf hinweisen, dass ich Public Key Pinning (HPKP) in dieser Anleitung bewusst außenvor lasse um ein eventuelles Aussperren von Besuchern zu verhindern. Wer sich dieser Gefahr bewusst ist, kann gerne meiner Anleitung folgen.

Nginx neustarten.

Das Ergebnis prüfen wir auf SSL Labs und Security Headers.

Dominion

Dominion

Linux Systemadministrator

Das könnte Dich auch interessieren...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Translate »