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,