Let's-Encrypt-Wildcard-Zertifikate mit Designate
OpenStack Designate kann als DNS-01-Challenge-Provider für das ACME-Protokoll von Let's Encrypt verwendet werden. Dies ermöglicht die automatische Beantragung und Erneuerung von Wildcard-Zertifikaten (*.example.com) ohne manuellen Eingriff — der ACME-Client erstellt einen TXT-Record in Ihrer Designate-Zone, um die Domaininhaberschaft nachzuweisen.
In dieser Anleitung werden zwei Methoden beschrieben:
- LEGO — ein leichtgewichtiges Go-Binary ohne Abhängigkeiten.
- certbot — der beliebte Python-basierte ACME-Client.
Voraussetzungen
- OpenStack CLI installiert und konfiguriert (siehe Tools).
- Application Credentials in einer
clouds.yaml-Datei (siehe Application Credentials). - Eine DNS-Zone in Designate für Ihre Domain erstellt (siehe DNS-Zone erstellen).
- Die Nameserver der Zone beim Domain-Registrar registriert (siehe DNS-Server beim Domain-Registrar eintragen).
Methode 1: LEGO
LEGO ist ein eigenständiges Go-Binary mit integrierter Unterstützung für OpenStack Designate als DNS-Provider. Es benötigt keine Runtime-Abhängigkeiten.
LEGO installieren
# Neueste Version herunterladen
wget https://github.com/go-acme/lego/releases/download/v5.2.2/lego_v5.2.2_linux_amd64.tar.gz
tar xzf lego_v5.2.2_linux_amd64.tar.gz
Wildcard-Zertifikat anfordern
DOMAIN=example.com
export OS_CLOUD=my-cloud
export DESIGNATE_ZONE_NAME="${DOMAIN}."
export OS_REGION_NAME=ch-ge1
./lego run \
--email admin@${DOMAIN} \
--accept-tos \
--dns designate \
--domains "*.${DOMAIN}" \
--domains ${DOMAIN}
Zertifikate auflisten
ls -l .lego/certificates
Nach PKCS12 konvertieren
openssl pkcs12 -passout "pass:" -export \
-in _.${DOMAIN}.crt \
-inkey _.${DOMAIN}.key \
-out _.${DOMAIN}.p12
Fehlersuche
Nützliche Flags und Umgebungsvariablen zur Fehlerbehebung:
# Ausführliches HTTP-Logging aktivieren
export GODEBUG=http2debug=2
export LEGO_LOG_LEVEL=debug
# Let's-Encrypt-Staging-Server verwenden (keine gültigen Zertifikate, aber ohne Rate-Limits)
./lego run --server https://acme-staging-v02.api.letsencrypt.org/directory ...
Methode 2: certbot
certbot ist der offizielle Let's-Encrypt-Client. Das Plugin certbot-dns-openstack fügt Designate als DNS-Provider hinzu.
certbot und Abhängigkeiten installieren
sudo apt install -y certbot
pip install python-designateclient certbot-dns-openstack zope
Verfügbare Zonen auflisten
Prüfen Sie, ob certbot auf Ihre Designate-Zone zugreifen kann:
export OS_CLOUD=my-cloud
openstack zone list
Wildcard-Zertifikat anfordern
DOMAIN=example.com
mkdir ~/letsencrypt
certbot -a dns-openstack certonly \
--agree-tos \
--register-unsafely-without-email \
--work-dir ~/letsencrypt/work \
--config-dir ~/letsencrypt/etc \
--logs-dir ~/letsencrypt/log \
--dns-openstack-propagation-seconds 60 \
-d "*.${DOMAIN}" \
-d "${DOMAIN}"
Zertifikate auflisten
ls -l ~/letsencrypt/etc/archive/*/*
Mehrere Domains
Um ein Zertifikat für mehrere Domains in einem Durchlauf zu beantragen, zusätzliche -d-Flags angeben:
-d "*.example.com" -d "example.com" -d "*.api.example.com"
Zertifikat verwenden
In einem Octavia-Loadbalancer
Konvertieren Sie das Zertifikat nach PKCS12 (siehe oben), speichern Sie es als Barbican-Secret und verwenden Sie es in einem TERMINATED_HTTPS-Listener. Siehe den Loadbalancer-Leitfaden für den vollständigen Ablauf.
In Kubernetes
Binden Sie die Zertifikatsdateien als Kubernetes-Secret ein und referenzieren Sie diese in Ihrem Ingress oder Ingress-Controller. Für die automatisierte Zertifikatsverwaltung innerhalb von Kubernetes eignet sich cert-manager mit dem ACME-Issuer und DNS-01-Challenge.
Erneuerung
Sowohl LEGO als auch certbot unterstützen die automatische Erneuerung:
# LEGO
./lego renew --dns designate --domains "*.example.com" --domains "example.com"
# certbot
certbot renew
Note
Wildcard-Zertifikate erfordern die DNS-01-Validierung und können nicht über HTTP-01 validiert werden.