Zum Hauptinhalt springen

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.