Im Manual Mode des Let’s Encrypt Referenzclients muss jede Domain über eine individuelle Datei im Unterverzeichnis /.well-known/acme-challenge/ derselben Domain bestätigt werden. Bei vielen Domains bremst das Wechseln zwischen den Verzeichnissen und das erstellen der notwendigen Verzeichnisstruktur den Arbeitsablauf. Damit die Domains schneller bestätigt werden können, sammle ich alle ACME Responses in einem gemeinsamen Verzeichnis /var/www/acme-challenges/. Egal, welche Domain gerade bestätigt werden soll: Die Datei zur Bestätigung wird hier abgelegt und steht dennoch unter der gewohnten URL bereit. Und so geht’s:
In meinem Nginx-Konfigurationsverzeichnis habe ich ein neues Verzeichnis „global“ angelegt und darin die Datei „letsencrypt-auth.conf“ erstellt:
mkdir /etc/nginx/global nano /etc/nginx/global/letsencrypt-auth.conf
Inhalt der Konfigurationsdatei:
location /.well-known/acme-challenge { alias /var/www/acme-challenges; location ~ /.well-known/acme-challenge/(.*) { default_type text/plain; } }
Das Verzeichnis /var/www/acme-challenges muss noch erstellt werden:
mkdir /var/www/acme-challenges
In den Server-Konfigurationsblöcken zu jeder Domain kann nun am Ende die letsencrypt-auth.conf eingebunden werden:
server { listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; ... server_name thomas-leister.de www.thomas-leister.de; ... include global/letsencrypt-auth.conf; }
… und das war’s auch schon! Jetzt noch Nginx neu laden und die Authentifizierungsdateien können gesammelt in nur einem Verzeichnis abgelegt werden.
Let’s Encrypt mit mehreren Hosts
Wer mehrere Hosts betreibt, kann sich auch damit die Arbeit vereinfachen: Alle ACME-Requests, die von Let’s Encrypt an .well-known/acme-challenge/ gestellt werden, sollen an eine einzige Adresse weitergeleitet werden. In meinem Beispiel ist das die Domain le-auth.domain.tld. Dort werden unter le-auth.domain.tld/.well-known/acme-challenge/ alle Bestätigungsdateien für Let’s Encrypt bereitgehalten. Alle virtual Hosts, für die ein Zertifikat ausgestellt werden soll, brauchen nur auf diese Adresse verweisen. Das letsencrypt-auth.conf Snippet von oben wird so abgewandelt:
location /.well-known/acme-challenge { location ~ /.well-known/acme-challenge/(.*) { return 301 http://le-auth.domain.tld$request_uri; } }
Die Konfiguration von le-auth.domain.tld sieht dabei so aus:
server { listen 80; listen [::]:80; server_name le-auth.domain.tld; root /var/www/domain.tld/le-auth; default_type text/plain; }
Im Root-Verzeichnis /var/www/domain.tld/le-auth der le-auth Subdomain befindet sich die gewohnte Ordnerstruktur .well-known/acme-challenge/, wo die Dateien für die Domainbestätigung aufbewahrt werden.
Fragt der Let’s Encrypt Server nun meinetolledomain.com/.well-known/acme-challenge/ an (angenommen, das Snippet wird für meinetolledomain.com verwendet), wird er an le-auth.domain.tld weitergeleitet, wo die Bestätigungsdatei bereitgestellt wird. So fasst man nicht nur mehrere Domains zusammen, sondern sogar mehrere Hosts. Alle Bestätigungsdateien müssen nur noch auf dem le-auth.domain.tld Host im .well-known/acme-challenge/ Verzeichnis abgelegt werden.
Warum nicht einfach einen Link in den ganzen webroot Verzeichnissen auf den globalen challenges Ordner erstellen?
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Klar, kann man auch machen. Die oben beschriebene Variante gefällt mir aber besser. So bleibt das Webroot aufgeräumt.
LG Thomas
Die oben angegebene Variante ist sogar flexibler, denn sie funktioniert auch wenn der nginx vhost nur eine proxy pass directive enthält und deshalb überhaupt kein (lokales) web root verzeichnis existiert …
Gute Idee das so zu lösen. Merci.
Hallo Thomas,
Du schreibst viele gute Anleitungen und hast mich in den letzten Wochen oft inspiriert, da ich derzeit zwei Server einrichte.
Vielleicht kannst Du mir bei folgendem Problem helfen: http://stackoverflow.com/questions/35290318/letsencrypt-renewal-nginx-owncloud-config-failed-because-of-regular-expres
Ich würde mich sehr freuen, wenn Du einmal rüber schaust. Es geht um einen location-block, der verhindert, dass das acme-challenge-Verzeichnis angezeigt werden kann.
Im Webroot-Modus vom letsencrypt-auto würde dieser die Dateien in /var/www/acme-challenges/.well-known/acme-challenge legen wenn /var/www/acme-challenges/ als webroot-path in der letsencrypt config angegeben ist.
Da
location /.well-known/acme-challenge {
alias /var/www/acme-challenges;
}
aber direkt auf /var/www/acme-challenges/ verweist werden die Dateien nicht gefunden. Mit root wird der Pfad mitgegeben.
location /.well-known/acme-challenge {
root /var/www/acme-challenges;
location ~ /.well-known/acme-challenge/(.*) {
default_type text/plain;
}
}
Mfg meti
Hallo, ich bin bei einem Webhoster, der das hier wohl abgelunzt hat. Er konnte mir auf folgende Frage keine Antwort geben.
Ich frage wegen dem Folder .well-known, der während des Einrichtens von https in /var/www/virtual/xxx/html angelegt wurde.
Im logfile zu letsencrypt findet sich was:
/home/xxx/.local/share/letsencrypt/logs
2016-04-11 07:32:30,475:INFO:letsencrypt.auth_handler:Cleaning up challenges
2016-04-11 07:32:30,475:DEBUG:letsencrypt.plugins.webroot:Removing /var/www/virtual/xxx/html/.well-known/acme-challenge/xxx
2016-04-11 07:32:30,476:DEBUG:letsencrypt.plugins.webroot:Removing /var/www/virtual/xxx/html/.well-known/acme-challenge/xxx
2016-04-11 07:32:30,476:DEBUG:letsencrypt.plugins.webroot:Removing /var/www/virtual/xxx/html/.well-known/acme-challenge/xxx
2016-04-11 07:32:30,477:DEBUG:letsencrypt.plugins.webroot:Removing /var/www/virtual/xxx/html/.well-known/acme-challenge/xxx
2016-04-11 07:32:30,477:DEBUG:letsencrypt.plugins.webroot:All challenges cleaned up, removing /var/www/virtual/xxx/html/.well-known/acme-challenge
[xxx = ausge-x’t]
Das Script löscht also nur den Inhalt von .well-known, aber nicht .well-known selbst. Wird der Folder .well-known also noch benötigt? Für was?
https://legacy.thomas-leister.de/ueber-mich-und-blog/
.well-known wird nur für den Authentifizierungsvorgang an sich gebraucht und kann danach gelöscht werden. Beim nächsten Mal Zertifikate abholen sollte .well-known ja wieder angelegt werden. Ich gehe mal davon aus, dass du .well-known löschen kannst. Außer natürlich, .well-known wird bei deinem Hoster noch für andere Zwecke verwendet.