Zum Inhalt

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

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.