Quantcast
Viewing all articles
Browse latest Browse all 452

Let’s Encrypt Zertifikate im Manual Mode abholen

Let’s Encrypt ist auf das automatische Abholen und Einrichten von TLS-Zertifikaten ausgelegt. Für Anwender, die mehr Kontrolle über den Prozess haben wollen, gibt es aber auch einen „Manual Mode“, der folgende Vorteile hat:

  • Die Zertifikate können von jedem Rechner aus abgeholt werden (Der LE Client muss nicht auf dem Zielserver laufen)
  • Der Webserver muss nicht wegen des LE Clients kurzzeitig abgeschaltet werden.

Und so funktioniert’s: Auf von einem beliebigen Rechner aus kann mit dem Let’s Encrypt ACME Client eine Zertifikatsanfrage abgeschickt werden. Zur Bestätigung des Domainbesitzes müssen in einem bestimmten Unterverzeichnis des Ziel-Webservers (Domain-Ziel) Dateien mit einem bestimmten Inhalt hinterlegt werden (=> Challenge-Dateien). Der ACME Server überprüft daraufhin, ob die Dateien unter den jeweiligen Domains erreichbar sind und der Inhalt korrekt ist. Wenn das der Fall ist, ist der Domainbesitz bestätigt und die Zertifikate werden ausgehändigt.

Let’s Encrypt ACME Client installieren

Der LE ACME Client ist schnell installiert:

git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt

(Nginx) Webserver konfigurieren

Damit der ACME-Server die Bestätigung vom Zielserver der jeweiligen Domain ohne Probleme abholen kann, muss sichergestellt werden, dass der (Ziel-)Webserver die Challenge-Dateien korrekt ausliefert. Wichtig dabei ist, dass der Webserver die Dateien mit einem „Content-Type: text/plain“ im HTTP Header ausliefert. Für jeden VirtualHost, der eine der zu benutzenden Domains verarbeitet, wird ein Nginx-Webserver mit diesen Zeilen konfiguriert:

location ~ /.well-known/acme-challenge/(.*) {
     default_type text/plain;
}

An dieser Stelle kann ich nur eine Nginx-Konfiguration als Beispiel angeben. Bei allen anderen Webservern ist neben dem korrekten Content-Type auch darauf zu achten, dass versteckte Verzeichnisse (.well-known mit Punkt vorne) vom Webserver betreten werden dürfen und im Web verfügbar sind.

Vergesst das Neuladen der Webserver-Konfiguration nicht! (service nginx reload oder systemctl reload nginx)

Zertifikatsanfrage stellen

Nun kann eine neue Zertifikatsanfrage gestellt werden. Diese sieht im Manual Mode beispielsweise so aus:

./letsencrypt-auto certonly -a manual --agree-dev-preview --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 -d thomas-leister.de -d www.thomas-leister.de

Mit „-a manual“ wird der manuelle Modus aktiviert. Auf jeden „-d“ Parameter folgt eine Domain, die mit dem Zertifikat abgesichert werden soll.

Domainbesitz bestätigen

Im nächsten Schritt wird man gebeten, eine Datei mit bestimmten Inhalt unter einer speziellen URL verfügbar zu machen:

Make sure your web server displays the following content at
http://thomas-leister.de/.well-known/acme-challenge/zExj4j-IqWHJtyIZUS3ThB9zia536ITXrRMQN_EoQWc before continuing:
zExj4j-IqWHJtyIZUS3ThB9zia536ITXrRMQN_EoQWc.EBoIpdd0phhAUXhTe56ve7LPYN4TPLGe9L_w8bznP84
Content-Type header MUST be set to text/plain.
[...]

Loggt euch via SSH auf dem Server ein, auf dem das Zertifikat später installiert werden soll, und wechselt in das Root-Verzeichnis der im Client genannten Domain. Dort legt ihr dann die Verzeichnisse .well-known und acme-challenge an:

mkdir -p .well-known/acme-challenge
cd .well-known/acme-challenge/

… und schreibt eine neue Datei mit dem richtigen Dateinamen und Inhalt in das Verzeichnis. Bezogen auf das Beispiel oben würde das so aussehen:

echo -n "zExj4j-IqWHJtyIZUS3ThB9zia536ITXrRMQN_EoQWc.EBoIpdd0phhAUXhTe56ve7LPYN4TPLGe9L_w8bznP84" > zExj4j-IqWHJtyIZUS3ThB9zia536ITXrRMQN_EoQWc

(Syntax: echo -n „[inhalt]“ > [dateiname])

Danach bestätigt ihr im Let’s Encrypt Client mit ENTER und wiederholt den Schritt für die nächste Domain. Achtet darauf, dass ihr eure Challenges im richtigen Verzeichnis ablegt – also immer im .well-known/acme-challenge Verzeichnis innerhalb des Domain-Roots der Domain, die der Client gerade verarbeitet. Ich empfehle euch, nach jeder Dateigenerierung kurz mit dem Webbrowser zu überprüfen, ob die Challenge-Datei unter der oben stehenden Adresse tatsächlich (öffentlich!) erreichbar ist.

Nachdem auch für die letzte abzusichernde Domain eine Challenge am richtigen Ort abgelegt wurde, versucht der ACME-Server, die angelegten Dateien über das Web zu erreichen. Im Erfolgsfall werden die neuen TLS-Zertifikate übermittelt und im Verzeichnis /etc/letsencrypt/live/[domain] abgelegt. Welche Datei für welchen Zweck vorgesehen ist, und wie ihr euren Nginx Webserver konfiguriert, könnt ihr am Ende dieser Anleitung nachlesen.

Sollte die Besitzüberprüfung nicht funktioniert haben, hilft es oftmals, den Client-Log des Let’s Encrypt ACME Clients zu lesen (unter /var/log/letsencrypt/letsencrypt.log)


Viewing all articles
Browse latest Browse all 452