DNS Validierung mit Letsencrypt
Ich möchte für meine internen Server auch die Letsencrypt Zertifikate verwenden. Da eine normale Validierung über den Webserver nicht geht kann man eine DNS basierende Validierung verwenden. Einen DNS Server der das unterstützen kann habe ich hier aufgesetzt. Ausgangspunkt ist ein Raspberry Pi mit Debian 10. Ich bin im wesentlichen mit dieser Beschreibung klar gekommen.
Auf dem Bind Server erweitere ich zuerst die Regel für welche Server Einträge geändert werden dürfen
vi /etc/bind/named.conf.local
update-policy {
grant internal-domain.net name _acme-challenge.neuerserver.internal-domain.net txt;
Ich plane die internen Zertifikate auf eine Server zu erzeugen und zu erstellen und von dort aus zu verteilen. Der “Server” ist in einem internen Admin VLAN.
Damit wird alles auf einmal installiert
apt install python3-certbot-dns-rfc2136
Die Konfigurationsdatei für LE sieht dann so aus
vi rfc2136.ini
# Target DNS server
# als IP!!
dns_rfc2136_server = 482.87.186.27
# Target DNS port
dns_rfc2136_port = 53
# TSIG key name
dns_rfc2136_name = internal-domain-net
# TSIG key secret
dns_rfc2136_secret = bhqqXxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfiRUqZA==
# TSIG key algorithm
dns_rfc2136_algorithm = HMAC-MD5
Und dann geht es los. Komischerweise hat es einige Male erst beim zweiten oder dritten Mal geklappt. Ich vermute das liegt an DNS Laufzeiten.
certbot certonly --dns-rfc2136 --dns-rfc2136-credentials /root/letsencrypt/rfc2136.ini --dns-rfc2136-propagation-seconds 30 -d server.internal-domain.net
Plugins selected: Authenticator dns-rfc2136, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for server.internal-domain.net
Waiting 30 seconds for DNS changes to propagate
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/server.internal-domain.net/fullchain.pem
Your key file has been saved at:
Parallel kann man dann prüfen ob die Änderungen temporär im DNS eingetragen wurden
dig _acme-challenge.server.internal-domain.net @dein.dns.server TXT
....
;; ANSWER SECTION:
_acme-challenge.server.interna-domain.net. 120IN TXT"W-WoR9kfcduftmuv5WiCS4wXMFdZbJH8N8zMNT5K2_A"
.....
Da bei Debian 10 standardmässig Apparmor mit ausgeliefert wird gab es am Anfang Problme mit folgender Fehlermeldung:
iapparmor="DENIED" operation="open" profile="/usr/sbin/named" name="/etc/bind/zones/db.internal-domain.net.jnl" pid=9868 comm="isc-worker0000" requested_mask="w" denied_mask="w" fsuid=122 ouid=0
Das habe ich durch folgende Erweiterung von Apparmor ermöglicht:
vi /etc/apparmor.d/local/usr.sbin.named
/etc/bind/zones/db.internal-domain.net.jnl rw,