Letsencrypt: Unterschied zwischen den Versionen

Aus Wiki schlicker.org
Zur Navigation springen Zur Suche springen
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 3: Zeile 3:
 
Zertifate erstellen:
 
Zertifate erstellen:
  
<code>
+
<pre>
 
certbot-auto certonly
 
certbot-auto certonly
</code>
+
</pre>
  
 
Infomation der auf dem Server installierten Zertifikate anzeigen
 
Infomation der auf dem Server installierten Zertifikate anzeigen
<code>
+
<pre>
 
certbot-auto certificates
 
certbot-auto certificates
</code>
+
</pre>
  
 
= Wildcard Zertifikate =
 
= Wildcard Zertifikate =
Zeile 47: Zeile 47:
 
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.
 
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.
  
<code>
+
<pre>
 
...
 
...
 
mmctest.cstx.de IN NS ns.cstx.de.
 
mmctest.cstx.de IN NS ns.cstx.de.
 
...
 
...
</code>
+
</pre>
  
 
=== BIND anpassen ===
 
=== BIND anpassen ===
Zeile 72: Zeile 72:
 
=== Skript für certbot===
 
=== Skript für certbot===
  
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:
  
 
<pre>
 
<pre>
Zeile 99: Zeile 99:
 
=== certbot starten ===
 
=== certbot starten ===
  
Domain erstellen
+
==== Wildcard Domain erstellen ====
  
<code>
+
<pre>
 
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"
 
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"
</code>
+
</pre>
 +
 
 +
 
 +
==== Wildcard Domain erneuern ====
 +
 
 +
<pre>
 +
certbot renew -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
 +
</pre>

Aktuelle Version vom 30. September 2018, 09:10 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 hier 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

Wildcard 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"


Wildcard Domain erneuern

certbot renew -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