Letsencrypt: Unterschied zwischen den Versionen

Aus Wiki schlicker.org
Zur Navigation springen Zur Suche springen
Zeile 73: Zeile 73:
  
 
Ich habe das Skript von [https://community.letsencrypt.org/t/dns-01-challenge-with-certbot-hooks/36915|hier] etwas angepasst:
 
Ich habe das Skript von [https://community.letsencrypt.org/t/dns-01-challenge-with-certbot-hooks/36915|hier] etwas angepasst:
<code>
+
 
 +
<pre>
 
#!/bin/bash
 
#!/bin/bash
  
Zeile 94: Zeile 95:
 
EOM
 
EOM
 
echo ""
 
echo ""
</code>
+
</pre>
  
 
=== certbot starten ===
 
=== certbot starten ===

Version vom 30. September 2018, 09:06 Uhr

Befehle

Zertifate erstellen:

certbot-auto certonly

Infomation der auf dem Server installierten Zertifikate anzeigen certbot-auto certificates

Wildcard Zertifikate

Automatisierte Let’s Encrypt Wildcardzertifikate mit BIND

Seit kurzem bietet Let’s Encrypt kostenlose Wildcardzertifikate an. Voraussetzungen:

   Der Client muss das ACME-Protkoll V02 sprechen – der aktuelle Certbot >= 0.22 erfüllt dieses, sowie
   Die Authentifizierung geschieht via DNS

Während andere Authentifizierungen (per Webserver, standalone, usw) recht leicht automatisierbar sind, ist es bei DNS etwas schwieriger: Zur Authorisierung muss man einen – vom Client vorgegebenen – Zufallsstring in ein DNS-Text-Record setzen, das sieht dann so aus:

   _acme-challenge    TXT "atDnAlc0px3XVu_u4IfZ3bi9Smulz7BWYdhRDGQfRJ4"

Dies lässt sich problemlos manuell eintragen, ist aber lästig – einfacher wäre es, wenn dies automatisch (wie beim standalone-Plugin via Webserver) geschehen könnte. Dies lässt sich mit dem dynamischen Updatemechanismus via nsupdate erledigen: Mit nsupdate werden dynamisch DNS-Zoneninhalte verändert.

Leider gibt es hier gleich drei Probleme:

  • Es ist normalerweise nicht möglich mittels nsupdate eine Zone zu aktualisieren – das gilt ganz besonders dann, wenn die Zone bei einem DNS-Anbieter liegt.
  • Man möchte sich wegen eines einzelnen Eintrags nicht die ganze Zone unter dynamische Kontrolle stellen – ein manuelles (oder auch skriptgesteuertes) editieren des Zonefiles ist dann nicht mehr möglich. Wer einmal gezwungen war mit Tools wie Autodns zu arbeiten weiß das einfache Editieren eines Zonefiles per Editor oder Skript sehr zu schätzen 🙂
  • Evrl. möchte man auch aus Sicherheitsgründen nicht, dass recht unsichere Test- oder Devsysteme irgendwie auf der Hauptzone herumeditieren können.


Die Lösung

Man erschafft sich mittels Nameserverdeligation eine zweite, dynamische Zone, die ausschließlich für die -acme-challenge da ist. Oder falls man ein Subdomain als subdomain.domain.com hat, erzeugt man hierfür eine neue Zone. Daher hier das Beispiel mit Subdomain.

Die Schritte dazu sind wie folgt

Zonefile anpassen

Es wird für die entsprechende SubDomain an einen anderen (oder den selben, mit anderer Zone) Nameserver deligiert, im folgenden für die Domain cstx.de:

Das Zonefile unter /var/named/cstx.de.zone anpassen, damit für die Subdomain mmctest.cstx.de im Nameserver eine andere Zone-Datei gezogen wird.

... mmctest.cstx.de IN NS ns.cstx.de. ...

BIND anpassen

anschließend in der /etc/named.conf folgende Zone hinzufügen

zone "mmctest.cstx.de" {
        type master;
        file "/var/named/mmctest.cstx.de.sub";
        allow-query { any; };
        allow-update { 213.252.153.201; };
        
};

Hinweis:: Die IP 213.252.153.201 ist die ausgehende IP-Adresse der Sophos-FW und das Update der Zone wird durch ein Skript innerhalb unserer DMZ gemacht. (Das Zonefile enthält die üblichen Daten)

Skript für certbot

Ich habe das Skript von [1] etwas angepasst:

#!/bin/bash

if [ -z "$CERTBOT_DOMAIN" ] || [ -z "$CERTBOT_VALIDATION" ]
then
echo "EMPTY DOMAIN OR VALIDATION"
exit -1
fi

HOST="_acme-challenge"
SERVER="server3.cstx.de"
ZONE="mmctest.cstx.de"

/usr/bin/nsupdate << EOM
server $SERVER
zone $ZONE
update delete ${HOST}.${CERTBOT_DOMAIN} TXT
update add ${HOST}.${CERTBOT_DOMAIN} 300 TXT "${CERTBOT_VALIDATION}"
send
EOM
echo ""

certbot starten

Domain erstellen

certbot certonly -n --manual-public-ip-logging-ok --server https://acme-v02.api.letsencrypt.org/directory --agree-tos --manual --preferred-challenges=dns --manual-auth-hook /etc/letsencrypt/scripts/dns-auth.sh -d "*.mmctest.cstx.de"