letsencrypt_dns01

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
letsencrypt_dns01 [2019/01/30 23:08] mazdermindletsencrypt_dns01 [2026/07/26 21:08] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== HowTo Relay/LoadBalancer für dns-01 konfigurieren ======+###### HowTo Relay/LoadBalancer für dns-01 konfigurieren
  
-===== Warum eigentlich dns-01? ===== +##### Warum eigentlich dns-01?
-Die ''dns-01''-Challenge ist eindeutig komplizierter als die meist als Default eingesetzte ''http-01''-Challenge, allerdings behebt sie in unserem Nutzungskontext einige Probleme-+
  
-Das Hauptproblem sind die Domains ''streaming.media.ccc.de'' und ''cdn.c3voc.de'', die von –derzeit– zwei LoadBalancern betrieben werden. Bei klassischer ''http-01''-Challenge hinterlegen die Server die Challege-Response in einem Ordner unterhalb der Domain und Let's-Encrypt fragt diese dann an. Da die Domain aber von zwei Servern betreut wird besteht eine 50% Chance, dass LE die Datei vom falschen der beiden abfragt und daher das Renewal fehlschlägt. +Die ''dns-01''-Challenge ist eindeutig komplizierter als die meist als 
-Vor dem 34C3 lief das so und da die LE-Clients es im Fehlerfall nach einiger Zeit erneut versuchen kam irgendwann auch mal eine erfolgreiche Challenge-Response durch – aber verlässlich ist das nicht und es bricht auch falls wir irgendwann mal mehr LBs als 2 einsetzen wollen.+Default eingesetzte ''http-01''-Challenge, allerdings behebt sie in 
 +unserem Nutzungskontext einige Probleme-
  
-Zusätzlich umgeht die ''dns-01'' das Problem dass unsere Domains je nach Systemtyp einen nginx oder einem haproxy oder beiden bedient werden. Auch wird das Ausrollen von neuen Systemen einfacher, da nicht mehr unterschieden werden muss, ob bereits ein Dienst auf den Ports ''80'', ''443'' oder beiden lauscht oder noch nicht.+Das Hauptproblem sind die Domains ''streaming.media.ccc.de'' und 
 +''cdn.c3voc.de'', die von –derzeit– zwei LoadBalancern betrieben werden. 
 +Bei klassischer ''http-01''-Challenge hinterlegen die Server die 
 +Challege-Response in einem Ordner unterhalb der Domain und Let's-Encrypt 
 +fragt diese dann an. Da die Domain aber von zwei Servern betreut wird 
 +besteht eine 50% Chance, dass LE die Datei vom falschen der beiden 
 +abfragt und daher das Renewal fehlschlägt. Vor dem 34C3 lief das so und 
 +da die LE-Clients es im Fehlerfall nach einiger Zeit erneut versuchen 
 +kam irgendwann auch mal eine erfolgreiche Challenge-Response durch – 
 +aber verlässlich ist das nicht und es bricht auch falls wir irgendwann 
 +mal mehr LBs als 2 einsetzen wollen.
  
-Letztenendes erlaubt es uns ''dns-01'' auch Hosts mit korrekten LE-Zertifikaten zu versorgendie selbst nicht im Internet Verfügbar sind (''live.lan.c3voc.de'' auf einem nicht-Congess-Event z.B.).+Zusätzlich umgeht die ''dns-01'' das Problem dass unsere Domains je nach 
 +Systemtyp einen nginx oder einem haproxy oder beiden bedient werden. 
 +Auch wird das Ausrollen von neuen Systemen einfacherda nicht mehr 
 +unterschieden werden muss, ob bereits ein Dienst auf den Ports ''80''
 +''443'' oder beiden lauscht oder noch nicht.
  
-Dies rechtfertigt mMn. die einmalige, komplexere Konfiguration. Während des Congresses empfiehlt es sich dennoch, die [[letsencrypt_fake]]-Config zu benverwenden.+Letztenendes erlaubt es uns ''dns-01'' auch Hosts mit korrekten 
 +LE-Zertifikaten zu versorgen, die selbst nicht im Internet Verfügbar 
 +sind (''live.lan.c3voc.de'' auf einem nicht-Congess-Event z.B.).
  
 +Dies rechtfertigt mMn. die einmalige, komplexere Konfiguration. Während
 +des Congresses empfiehlt es sich dennoch, die
 +[letsencrypt_fake](letsencrypt_fake)-Config zu verwenden.
  
-===== Schritt 1: DNSSEC-Keypair generieren ===== +##### Schritt 1: DNSSEC-Keypair generieren
-Als ''voc@mngslave.dus.c3voc.de'' in einem Verzeichnis deiner Wahl folgendes ausführen: +
-<code> +
-/usr/sbin/dnssec-keygen -a HMAC-SHA256 -b 256 -n USER le-dns-challenge.live.somewhere.c3voc.de. +
-</code> +
-Das Kommando generiert zwei Dateien: ''Kle-dns-challenge.live.somewhere.c3voc.de.+163+*.{key,private}'' +
-Die Zahl hinter ''+163+'' ist offenbar eine Zufahllszahl, weil, kann man ja manchmal gebrauchen…+
  
-===== Schritt 2: Key in bind-config eintragen ===== +Als ''voc@mngslave.dus.c3voc.de'' in einem Verzeichnis deiner Wahl 
-In ''/etc/bind/cdn-letsencrypt-dns-01.conf'' einen solchen Block einfügenDarin das Secret aus der ''.key''-Datei verwenden. +folgendes ausführen: \<code\> /usr/sbin/dnssec-keygen -a HMAC-SHA256 -b 
-Dieser Block macht den Key unter dem angegebenen Namen den bind-Server bekannt. +256 -n USER le-dns-challenge.live.somewhere.c3voc.de\</code\Das 
-<code> +Kommando generiert zwei Dateien: 
-key "le-dns-challenge.live.somewhere.c3voc.de{ +''Kle-dns-challenge.live.somewhere.c3voc.de.+163+\*.{key,private}'' Die 
-        algorithm hmac-sha256; +Zahl hinter ''+163+'' ist offenbar eine Zufahllszahl, weil, kann man ja 
-        secret "xX3TgmAd0SesdD8wtK4kstrGZU7VYVbUC27V/S9qslk="; +manchmal gebrauchen…
-}; +
-</code>+
  
-In der gleichen Datei einen solchen Block einfügen: +##### Schritt 2: Key in bind-config eintragen
-Dieser Block definiert eine neue Sub-Zone für die ACME-Challenges. Der Key wird nur in der Lage sein, diese Sub-Zone zu verändern. +
-<code> +
-zone "_acme-challenge.live.somewhere.c3voc.de"+
-  type master; +
-  file "/var/cache/bind/_acme-challenge.live.somewhere.c3voc.de"; +
-  masterfile-format text; +
-  allow-update { key "le-dns-challenge.live.somewhere.c3voc.de"; }; +
-}; +
-</code>+
  
-Wenn der neue Host ein LoadBalancer ist, den Key ebenfalls in die folgenden beiden Blöcke (am Ende der Datei) aufnehmen: +In ''/etc/bind/cdn-letsencrypt-dns-01.conf'' einen solchen Block 
-<code> +einfügen. Darin das Secret aus der ''.key''-Datei verwenden. Dieser 
-zone "_acme-challenge.cdn.c3voc.de"… }; +Block macht den Key unter dem angegebenen Namen den bind-Server bekannt. 
-zone "_acme-challenge.streaming.media.ccc.de{ … }; +\<code\key "le-dns-challenge.live.somewhere.c3voc.de"algorithm 
-</code>+hmac-sha256; secret "xX3TgmAd0SesdD8wtK4kstrGZU7VYVbUC27V/S9qslk="; }; 
 +\</code\>
  
-Eine Datei `/var/cache/bind/_acme-challenge.live.somewhere.c3voc.de` mit folgendem Inhalt anlegen: +In der gleichen Datei einen solchen Block einfügen: Dieser Block 
-Dies ist eine leere Zonendatei, die in Zukunft vom bind-Server verwaltet werden wird. +definiert eine neue Sub-Zone für die ACME-Challenges. Der Key wird nur 
-<code> +in der Lage sein, diese Sub-Zone zu verändern. \<code\> zone 
-$ORIGIN . +"\_acme-challenge.live.somewhere.c3voc.de" { type master; file 
-$TTL 600 10 minutes +"/var/cache/bind/\_acme-challenge.live.somewhere.c3voc.de"; 
-_acme-challenge.live.somewhere.c3voc.de IN SOA ns1.c3voc.de. fl.n621.de. ( +masterfile-format textallow-update { key 
- 1          serial +"le-dns-challenge.live.somewhere.c3voc.de"}}\</code\>
- 86400      refresh (1 day) +
- 7200       retry (2 hours) +
- 3600000    ; expire (5 weeks 6 days 16 hours) +
- 600        ; minimum (10 minutes) +
-+
- NS ns1.c3voc.de +
-</code>+
  
-In der Datei ''/etc/bind/zones/c3voc.de/zone.db'' am Angang die Serial-Nr um 1 erhöhen und am Ende einen solchen Block einfügen +Wenn der neue Host ein LoadBalancer ist, den Key ebenfalls in die 
-Dieser Block deligiert die Sub-Zone mit den ACME-Challenges an einen einzelnen DNS-Server (''ns1.c3voc.de.'' \== ''mngslave.dus.c3voc.de.''), so dass für dei ''dns-01''-Challenge nur dieser eine Server aktualisiert werden muss. +folgenden beiden Blöcke (am Ende der Datei) aufnehmen: \<code\zone 
-<code> +"\_acme-challenge.cdn.c3voc.de" { … }; zone 
-$ORIGIN _acme-challenge.live.somewhere.c3voc.de. +"\_acme-challenge.streaming.media.ccc.de" { … }; \</code\>
-@             IN      NS     ns1.c3voc.de+
-</code>+
  
-Zum Abschluss den DNS-Server reloaden: `sudo servie reload bind9+Eine Datei \`/var/cache/bind/\_acme-challenge.live.somewhere.c3voc.de\` 
 +mit folgendem Inhalt anlegen: Dies ist eine leere Zonendatei, die in 
 +Zukunft vom bind-Server verwaltet werden wird. \<code\> \$ORIGIN . \$TTL 
 +600 ; 10 minutes \_acme-challenge.live.somewhere.c3voc.de IN SOA 
 +ns1.c3voc.de. fl.n621.de. ( 1 ; serial 86400 ; refresh (1 day) 7200 ; 
 +retry (2 hours) 3600000 ; expire (5 weeks 6 days 16 hours) 600 ; minimum 
 +(10 minutes) ) NS ns1.c3voc.de \</code\>
  
-===== Key und Private in KeePass eintragen ===== +In der Datei ''/etc/bind/zones/c3voc.de/zone.db'' am Angang die 
-In der Gruppe ''ansible/ssl/dns-01'' einen Eintrag mit dem Titel ''live.somewhere.c3voc.de'' anlegenNutzername und Passwort leer lassen. +Serial-Nr um 1 erhöhen und am Ende einen solchen Block einfügen Dieser 
-Unter ''Advanced->Additional attributes'' zwei Einträge mit den Namen ''key'' und ''private'' anlegenDen Inhalt der entsprechenden Datei einfügen, darauf achten, dass der Eintrag mit exakt einem Zeilenumbruch endet.+Block deligiert die Sub-Zone mit den ACME-Challenges an einen einzelnen 
 +DNS-Server (''ns1.c3voc.de.'' \\= ''mngslave.dus.c3voc.de.''), so dass 
 +für die ''dns-01''-Challenge nur dieser eine Server aktualisiert werden 
 +muss\<code\> \$ORIGIN \_acme-challenge.live.somewhere.c3voc.de. @ IN 
 +NS ns1.c3voc.de. \</code\>
  
 +Zum Abschluss den DNS-Server reloaden: \`sudo service bind9 reload\`
  
-===== Schritt 4: Neuen Host deployen ===== +##### Key und Private in KeePass eintragen 
-Ein Ansible-Deployment mit ''--tags letsencrypt'' sollte nun erfolgreich sein und alle nötigen Zertifikate anlegen.+ 
 +In der Gruppe ''ansible/ssl/dns-01'' einen Eintrag mit dem Titel 
 +''live.somewhere.c3voc.de'' anlegen. Nutzername und Passwort leer 
 +lassen. Unter ''Advanced-\>Additional attributes'' zwei Einträge mit den 
 +Namen ''key'' und ''private'' anlegen. Den Inhalt der entsprechenden 
 +Datei einfügen, darauf achten, dass der Eintrag mit exakt einem 
 +Zeilenumbruch endet. 
 + 
 +##### Schritt 4: Neuen Host deployen 
 + 
 +Ein Ansible-Deployment mit ''--tags letsencrypt'' sollte nun erfolgreich 
 +sein und alle nötigen Zertifikate anlegen.
  
  • letsencrypt_dns01.1548889712.txt.gz
  • Last modified: 2019/01/30 23:08
  • by mazdermind