nine-manage-vhosts mit Let's Encrypt
nine-manage-vhosts
unterstützt die Verwaltung von Let's Encrypt-Zertifikaten.
Account-Administration
Registrieren
Um Zertifikate via Let's Encrypt zu verwalten, müssen Sie sich pro Server einmalig bei Let's Encrypt registrieren. Dies kann direkt auf der Kommandozeile vorgenommen werden:
www-data@server:~ $ sudo nine-manage-vhosts certificate register-client
--contact-email=meineemail@domain.ch
Ihre E-Mail-Adresse wird von Let's Encrypt lediglich dafür verwendet, Sie über auslaufende Zertifikate zu informieren. Da nine-manage-vhosts
so konfiguriert ist, Zertifikate automatisch zu erneuern, sollten Sie in der Regel keine E-Mails erhalten.
Anzeigen
Sie können die aktuelle E-Mailadresse anzeigen, über welche Sie über auslaufende Zertifikate informiert werden. Dies kann direkt auf der Kommandozeile vorgenommen werden:
www-data@server:~ $ sudo nine-manage-vhosts certificate show-contact-email
Aktualisieren
Sie können die E-Mailadresse anpassen, über welche Sie über auslaufende Zertifikate informiert werden. Dies kann direkt auf der Kommandozeile vorgenommen werden:
www-data@server:~ $ sudo nine-manage-vhosts certificate update-client \
--contact-email=meineemail@domain.ch
Zertifikate verwalten
Voraussetzungen
Folgende Voraussetzungen müssen erfüllt sein, damit das Erstellen von Zertifikaten funktioniert:
- Alle im VHost enthaltenen Domains und DNS-Aliase müssen DNS-Seitig auf den Server zeigen und existieren.
- Das Webverzeichnis
/pfad/zur/website/.well-known/acme-challenge
muss für Apache/Nginx lesbar sein. Um dies sicherzustellen, wird das Verzeichnis angelegt (auch wenn Sie dieses löschen) und die Berechtigungen jeweils zurückgesetzt. - Das Verzeichnis muss ohne Weiterleitungen (oder maximal einer Weiterleitung auf HTTPS) öffentlich lesbar sein.
Um die Verfügbarkeit des Verzeichnisses /pfad/zur/website/.well-known/acme-challenge
zur Validierung sicherzustellen, kann in der .htaccess-Datei die passende Einstellung gesetzt werden:
- Bei Virtual Hosts mit "BasicAuth":
AuthType Basic
AuthName "Password Protected Area"
AuthUserFile /path/to/.htpasswd
Require expr %{REQUEST_URI} =~ m#^/.well-known/acme-challenge/#
Require valid-user
- Bei Virtual Hosts mit "RewriteRules": (Am Beginn der .htaccess-Datei zu platzieren)
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/\.well\-known/acme\-challenge/
RewriteRule (.*) - [L]
- Bei Virtual Hosts mit "Allow From":
SetEnvIf Request_URI "^/.well-known/acme-challenge/" allowles
Allow from env=allowles
Die Konfiguration kann wie folgt getestet werden:
- Im Verzeichnis
/pfad/zur/website/.well-known/acme-challenge
eine Text-Datei mit Inhalt anlegen. Sollte das Verzeichnis noch nicht bestehen, kann dies manuell angelegt werden. - Folgender Befehle ausführen, basierend auf Ihrer Domäne und Text-File:
curl http://your-domain.tld/.well-known/acme-challenge/test.txt
- Wird der Inhalt der Datei ausgegeben, in diesem Fall der Datei test.txt, so funktioniert der Zugriff.
Zertifikat erstellen
Um ein Zertifikat für einen bestehenden VirtualHost zu erstellen, wird folgender Befehl benötigt:
www-data@server:~ $ sudo nine-manage-vhosts certificate create
--virtual-host=example.org
Die gewünschte Domain muss bereits mit einem A-Record oder CNAME auf den Server zeigen sowie auch jede Alias-Domain, die der VirtualHost besitzt. Sofern das Zertifikat ausgestellt werden kann, wird folgende Meldung angezeigt:
Certificate created: example.org (valid until: 2016-07-12)
Nun kann das ausgestellte Zertifikat mit dem Let's Encrypt-Template auf einen VirtualHost angewendet werden:
www-data@server:~ $ sudo nine-manage-vhosts virtual-host update example.org
--template=default_letsencrypt_https
Jetzt sollte das Zertifikat aktiv sein. Die Verlängerung des Zertifikates passiert vollautomatisch. Sofern Sie bereits ein anderes Template verwenden, müssen wir dieses erst noch Let's Encrypt-"fähig" machen. Sie können uns eine Mail an mit dem gewünschten Template senden, dann passen wir das gerne für Sie an.
Zertifikat löschen
Um ein Zertifikat zu löschen, wird folgender Befehl benötigt:
www-data@server:~ $ sudo nine-manage-vhosts certificate remove
--virtual-host=example.org
Vor dem Löschen muss sichergestellt sein, dass das Zertifikat von keinem VirtualHost mehr verwendet wird. Dazu kann einfach das Template des entsprechenden VirtualHost auf eines ohne Let's Encrypt geändert werden:
www-data@server:~ $ sudo nine-manage-vhosts virtual-host update example.org
--template=default
Erneuerung
Erstellte Zertifikate sind seitens Let's Encrypt jeweils 90 Tage gültig. Um die Zertifikate zu erneuern, wird automatisch ein entsprechender Cronjob aktiviert. Diese prüft jede Nacht, ob es auslaufende Zertifikate gibt und erneuert diese wenn notwendig.
Da die Erneuerung nur funktioniert, wenn die Konfiguration (siehe "Zertifikat erstellen") stimmt, kann diese unter Umständen nicht erfolgreich sein. In diesem Fall erhalten Sie von Let's Encrypt vor Ablauf automatisch eine E-Mail.
Die Erneuerung von auslaufenden Zertifikaten kann auch manuell ausgelöst werden. Dafür wird folgender Befehl benötigt:
www-data@server:~ $ sudo nine-manage-vhosts certificate renew-expiring
Umleitung
Die Umleitung von plain HTTP Anfragen nach HTTPS bei Let's Encrypt Zertifikat wird automatisch eingerichtet.