Übersicht
Das ACME-Protokoll (verwendet von Let's Encrypt und anderen Zertifizierungsstellen) unterstützt die DNS-01-Challenge zur Domain-Validierung. DNS-01 ist der einzige Challenge-Typ, der Wildcard-Zertifikate (*.example.com) unterstützt, und er erfordert keinen HTTP-Server auf dem Zielrechner.
NexDNS bietet native Integrationen mit drei beliebten ACME-Clients sowie einen generischen CLI-Hook für jeden Client, der manuelle DNS-Hooks unterstützt.
Alle ACME-Integrationen erfordern ein API-Token mit den Berechtigungen
records.readundrecords.write. Erstellen Sie eines unter nexdns.tech/settings/api-keys.
acme.sh
acme.sh ist ein reiner Shell-ACME-Client. NexDNS wird als integrierter DNS API-Provider unterstützt.
Zertifikat ausstellen
export NEXDNS_Token="nxd_xxxxxxxxxxxxxxxxxxxx"
acme.sh --issue --dns dns_nexdns -d example.com -d '*.example.com'
Das Token wird nach dem ersten Durchlauf in ~/.acme.sh/account.conf gespeichert, sodass Sie es für Verlängerungen nicht erneut exportieren müssen.
Verlängern
Verlängerungen erfolgen automatisch über Cron. Um eine manuelle Verlängerung zu erzwingen:
acme.sh --renew -d example.com
lego für Traefik
lego ist ein Go-basierter ACME-Client, der auch die automatische Zertifikatsverwaltung von Traefik antreibt. NexDNS wird als DNS-Provider unterstützt.
Standalone-Nutzung
NEXDNS_API_TOKEN=nxd_xxx \
lego --dns nexdns \
--domains example.com \
--domains '*.example.com' \
--email admin@example.com \
run
Traefik-Konfiguration
Fügen Sie den NexDNS DNS-Challenge-Resolver zu Ihrer Traefik-Konfiguration hinzu. Das folgende docker-compose.yml-Beispiel zeigt eine typische Einrichtung:
services:
traefik:
image: traefik:v3
command:
- "--certificatesresolvers.nexdns.acme.dnschallenge=true"
- "--certificatesresolvers.nexdns.acme.dnschallenge.provider=nexdns"
- "--certificatesresolvers.nexdns.acme.email=admin@example.com"
- "--certificatesresolvers.nexdns.acme.storage=/letsencrypt/acme.json"
environment:
NEXDNS_API_TOKEN: "nxd_xxxxxxxxxxxxxxxxxxxx"
volumes:
- letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- "443:443"
volumes:
letsencrypt:
Verwenden Sie dann den Resolver in Ihren Service-Labels:
labels:
- "traefik.http.routers.myapp.tls.certresolver=nexdns"
- "traefik.http.routers.myapp.tls.domains[0].main=example.com"
- "traefik.http.routers.myapp.tls.domains[0].sans=*.example.com"
Certbot-Client
certbot ist der offizielle Let's Encrypt-Client. Verwenden Sie das NexDNS DNS-Authenticator-Plugin für die automatisierte DNS-01-Validierung.
Plugin installieren
pip install certbot-dns-nexdns
Anmeldedatendatei erstellen
Erstellen Sie ~/.nexdns/certbot-credentials.ini mit Ihrem API-Token:
dns_nexdns_token = nxd_xxxxxxxxxxxxxxxxxxxx
Dateiberechtigungen einschränken:
chmod 600 ~/.nexdns/certbot-credentials.ini
Zertifikat ausstellen
certbot certonly \
--authenticator dns-nexdns \
--dns-nexdns-credentials ~/.nexdns/certbot-credentials.ini \
-d '*.example.com'
Docker-Nutzung
docker run --rm \
-v /etc/letsencrypt:/etc/letsencrypt \
-v ~/.nexdns/certbot-credentials.ini:/credentials.ini:ro \
certbot/dns-nexdns certonly \
--authenticator dns-nexdns \
--dns-nexdns-credentials /credentials.ini \
-d '*.example.com'
CLI-Hook
Wenn Ihr ACME-Client manuelle DNS-Hooks unterstützt, können Sie das NexDNS CLI als Hook-Skript verwenden. Dies funktioniert mit jedem Client, der die Optionen --manual-auth-hook und --manual-cleanup-hook bereitstellt (z. B. certbot im manuellen Modus).
certbot mit CLI-Hook
certbot certonly --manual --preferred-challenges dns \
--manual-auth-hook "nexdns acme hook --action create" \
--manual-cleanup-hook "nexdns acme hook --action delete" \
-d '*.example.com'
Der Hook liest die von certbot gesetzten Umgebungsvariablen CERTBOT_DOMAIN und CERTBOT_VALIDATION und erstellt oder entfernt den _acme-challenge TXT-Eintrag automatisch.
Das CLI muss vor der Verwendung von Hooks authentifiziert sein. Führen Sie
nexdns auth token nxd_xxxaus oder setzen Sie die UmgebungsvariableNEXDNS_TOKEN.