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 --rsa-key-size 4096 -d thomas-leister.de -d www.thomas-leister.de
Mit „-a manual“ wird der manuelle Modus aktiviert. –rsa-key-size setzt die Schlüssellänge auf 4096 Bits statt standardmäßige 2048 Bits. Auf jeden „-d“ Parameter folgt eine Domain / Subdomain, 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 https://legacy.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)
https://www.onli-blogging.de/
Das müsste man alle zwei bis drei Monate wiederholen, richtig?
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Richtig. Die Zertifikate haben eine Lebenszeit von 90 Tagen. Empfohlen wird, die Zertifikate schon nach 2 Monaten auszutauschen, um noch genug Zeit im Fehlerfall zu haben.
LG Thomas
Moin Thomas,
ziehst du deine Zertifikate zurück und erstellst dann neue oder lässt du die „einfach“ auslaufen?
Gruß
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi,
ich werde mit denselben Schritten wie oben in der Anleitung einfach neue Zertifikate abholen. Dabei werden die alten automatisch zurückgezogen. :)
LG Thomas
Hast Du eine Idee, wie man das (mit dem manual mode) automatisieren könnte? Also z.B. per cron jeden 2. Monat erneuern? Die Challenge müsste man irgendwie automatisch in den passenden webroot legen.
http://www.klomp.de
Danke für die Anleitung. Läuft nun super auf meiner DynDNS Domain mit Zugriff auf mein Synology NAS. Endlich keine Sicherheitswarnungen mehr ;)
Hallo Thomas könntest du vielleicht nochmal näher erklären wie die Webserver Konfiguration aussehen muss um sich die Zertifikate bei Let´s encrypt abzuholen. denn ich bekomme es einfach nicht hin zu meiner Schande muss ich gestehen das ich was Webserver Konfigurationen angeht noch ein echter Anfänger bin. Ich habe einfach aus deinen beiden Anleitungen eins gemacht.
Meine Webserver Konfiguration sah dann ungefähr so aus:
server {
server_name meinedyns.ddns.net
listen 80 default_server;
location ~ /.well-known/acme-challenge/(.*) {
default_type text/plain;
}
}
Doch leider startet der Webserver dann erst gar nicht mehr bei dieser Konfiguration ich habe einfach unter Sites-Enable die Default ersetzt jedoch leider ohne Erfolg. Zudem ist mir nicht ganz klar wo ich die Ordner auf dem Webserver erstellen muss vielleicht könntest du mir das auch nochmal näher erläutern das wäre sehr nett von dir mit Ordnern meine ich diese hier „.well-known/acme-challenge“ wo genau müssen die angelegt werden.
Für Hilfe wäre ich sehr sehr dankbar den ich bastle schon seit Tagen daran Rum PS die Zertifikate sollen für eine dynamische DNS Adresse genutzt werden. Aus den Kommentaren deines Beitrages war zu erlesen das die von dir gezeigte Methode auch für dynamische DNS Adressen funktioniert.
Würde mich freuen von dir zu lesen
viele Liebe Grüße Michael
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi Michael,
bist du sicher, dass du den Nginx Webserver verwendest und keinen Apache? Die gezeigte Konfiguration gilt nur für Nginx und funktioniert unter Apache nicht. Das könnte der Grund sein, warum dein Webserver nicht mehr funktioniert – falls du Apache nutzt).
Den Ordner .well-known (+ Unterordner) musst du in dem Hauptverzeichnis deiner Domain erstellen. Also in dem Verzeichnis, in dem deine index.html oder index.php liegt, die dargestellt wird, wenn du einfach nur deine Domain aufrufst. Unter Nginx wird dieses Verzeichnis beispielsweise auch in der Konfiguration mit „root /var/www/…“ angegeben. Unter Apache mit „DocumentRoot“.
Die Zertifikate kannst du problemlos mit DynDNS nutzen – genau. Solange deine DynDNS Adresse (nicht die IP-Adresse – sondern die Domain!) dieselbe bleibt, gar kein Problem.
Nochmal zu der Apache-Sache: Für Apache kann ich dir aus dem Stegreif keine Konfiguration anbieten, weil ich Apache schon seit längerer Zeit nicht mehr nutze und mit der Konfiguration nicht vertraut bin. Vielleicht kannst du im Netz etwas zu Apache und Let’s Encrypt finden.
LG Thomas
Hallo Thomas Nein nein ich benutze schon definitiv nginx für die Konfiguration bin ich wie es hier in deiner Anleitung angegeben ist vorgegangen
Link https://legacy.thomas-leister.de/open-source/linux/ubuntu/nginx-installation-konfiguration-einrichtung-ubuntu-server/
meinen Test weise angelegte Index.html ist jetzt auch von außen über Port 80 erreichbar.
Die Ordner .well-known/acme-challenge habe unter /var/www angelegt was ja laut der Anleitung von dir verlinkt habe ja das Root sein müsste des Webservers.
Das einzige was mir nicht ganz klar ist ist was ich mit der von dir angegebenen Konfiguration machen soll ob ich diese in eine extra config Datei unter sites-available packen soll und dann nach sites enabled verlinken.
Mit der Konfiguration meine ich diesen Teil hier:
location ~ /.well-known/acme-challenge/(.*) {
default_type text/plain;
}
kommt das in eine extra Datei unter sites-available und wird dann nach sites enabled verlinkt oder wo muss das ganze rein
vielen Dank für deine Mühe und Geduld aber ich hoffe das ich einfach nur mit meiner Annahme richtig liege und dir jetzt nicht noch zusätzliche Arbeit mache.
Nochmals viele Liebe Grüße
Michael
http://www.mypersonalrocketscience.de/
Moinmoin,
ich habe mir gerade mal ein Script gebaut mit dem ich auf einem nginx die Zertifikate für mehrere virtuelle hosts überwache und hoffentlich dann in 2 Monaten auch ohne Benutzereingriff erneuern kann.
Siehe: https://github.com/myprs/lenc-update
Vielleicht hilft es jemandem…
http://www.xornas.de
Hi,
bin durch deinen Blog auf Lets Encrypt aufmerksam geworden und konnte nun endlich mein altes StartSSL Zertifikat austauschen.
Was mich aber trotzdem interessieren würde ist unter welchem System du den Client ausgeführt hast? Bei mir funktioniert es nämlich nur unter Ubuntu.
viele Grüße
Jona
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi,
den Client habe ich unter Arch Linux ausgeführt.
LG Thomas
https://www.antonstoetzer.de
Tipp:
Bei wem dem Webhoster keinen SSH-Zugriff erlaubt, aber über das Webadmin Interface das manuelle Hochladen von Zertrifikaten anbietet, der kann diese Anleitung wie folgt abändern:
Den Punkt „(Nginx) Webserver konfigurieren“ überspringen.
Bei „Domainbesitz bestätigen“ anstatt per SSH-Zugriff von Hand auf dem eigenen Computer einen Ordner „.well-known“ erstellen. Darin den Ordner „acme-challenge“ erstellen. In dem dann eine Datei mit dem vom Let’s Encrypt Client vorgegebenen Buchstabensalat als Dateinamen und ohne weiterer Dateiendung erstellen. Die Datei mit einem reinen Texteditor öffnen und den vom Let’s Encrypt Client nach „following content:“ vorgegebenen, noch längeren Buchstabensalat als Inhalt einfügen und speichern.
Den ganzen Ordner „.well-known“ ganze z.B per FTP-Zugang in das Grundverzeichnis des Webservers laden und anschließend mit dem Webbrowser nochmal prüfen, ob der Link nun abrufbar ist und den richtigen Inhalt anzeigt.
Jetzt in der Anleitung bei „Danach bestätigt ihr im Let’s Encrypt Client mit ENTER…“ fortfahren
Hallo,
ich habe es genau so gemacht und mir wurde sogar ein erfolgreich Zertifikat ausgestellt. Wie kann ich dieses jetzt für meine Webseite (WordPress) benutzen? Ein SSL Plugin sagt mir, dass er kein SSL findet. Mein Webhoster ist Speicherzentrum.
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi,
damit du TLS/SSL einsetzen kannst, müssen die Webserver deines Webhosters entsprechend konfiguriert sein. Ich kenne deinen Hoster nicht. Bitte wende dich an den Support von Speicherzentrum – der kann dir sicherlich weiterhelfen.
LG Thomas
http://www.david-developer.de
Hallo,
hier die Location Angabe für Apache User:
<Location ~ „/.well-known/acme-challenge/(.*)“>
DefaultType text/plain
</Location>
@Thomas: Danke für die tollen Anleitungen!
[Anm. Thomas: Hab deinen Kommentar repariert ;-) WordPress ist Schuld.]
http://www.david-developer.de
@Thomas: Danke, bin ja fast verzweifelt… ;-)
http://trainyourprogrammer.de/
Hallo,
erst einmal vielen Dank für die Anleitung, leider komme ich nicht ganz klar und habe folgendes Problem und hoffe ihr / du kannst mir helfen:
Ich habe ‚git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt‘ auf einen raspberry pi installiert, da ich linux nur auf den Pi benutze. Danach habe ich ein Zertifikat für meine Webseite trainyourprogrammer.de angefordert. (Habe keinen eigenen Webserver nur über allinkl ein Webspace.)
Ich habe folgende Fehlermeldung bekommen:
The requested manuel plugin does not appear to be installed
Und nun? Was fehlt denn? manuel plugin?
Danke.
Gruß,
Jörg
https://legacy.thomas-leister.de/ueber-mich-und-blog/
Hi Jörg, es heißt nicht manuel sondern manual. Vielleicht hast du dich vertippt. Sonst habe ich keine Idee, was falsch gelaufen sein könnte.
LG Thomas
http://trainyourprogrammer.de/
Oh wie peinlich. Betriebsblind. :)
Danke dir.
Kannst meinen Kommentar gerne wieder löschen :)
Gruß,
Jörg
Darf ich bitte etwas fragen?
Ich habe zwei third-level-domains auf unterschiedlichen IP (gar unterschiedliche Standorte), etwa so: klaus.domain.de auf IP-1 und http://www.domain.de auf IP-2. Das scheint (ich habe noch keine praktische Erfahrung) schwierig zu sein: Wie geht man in diesem Fall für https vor?
Danke für die Mühe!
https://legacy.thomas-leister.de/ueber-mich-und-blog/
In dem Fall kannst du mit dem Webroot-Modus von Certbot arbeiten, und eine Umleitung vom zweiten Server auf den ersten legen, wo du Certbot ausführst: https://legacy.thomas-leister.de/internet/lets-encrypt-acme-challenge-responses-sammeln/ (Für Nginx, Abschnitt „Let’s Encrypt mit mehreren Hosts“). Mit Apache ist das auch machbar – allerdings habe ich dafür keine fertige, erprobte Lösung.
LG Thomas