Let's Encrypt ACME Challenge Responses sammeln (Nginx)

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.