Letsencrypt: Unterschied zwischen den Versionen
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 3: | Zeile 3: | ||
Zertifate erstellen: | Zertifate erstellen: | ||
| − | < | + | <pre> |
certbot-auto certonly | certbot-auto certonly | ||
| − | </ | + | </pre> |
Infomation der auf dem Server installierten Zertifikate anzeigen | Infomation der auf dem Server installierten Zertifikate anzeigen | ||
| − | < | + | <pre> |
certbot-auto certificates | certbot-auto certificates | ||
| − | </ | + | </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. | ||
| − | < | + | <pre> |
... | ... | ||
mmctest.cstx.de IN NS ns.cstx.de. | mmctest.cstx.de IN NS ns.cstx.de. | ||
... | ... | ||
| − | </ | + | </pre> |
=== BIND anpassen === | === BIND anpassen === | ||
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