Aller au contenu

Certificats wildcard Let's Encrypt avec Designate

OpenStack Designate peut être utilisé comme fournisseur de challenge DNS-01 pour le protocole ACME de Let's Encrypt. Cela vous permet de demander et de renouveler automatiquement des certificats wildcard (*.example.com) sans intervention manuelle : le client ACME crée un enregistrement TXT dans votre zone Designate pour prouver la propriété du domaine.

Ce guide couvre deux méthodes :

  • LEGO : un binaire Go léger, sans dépendances.
  • certbot : le client ACME Python populaire.

Prérequis

Méthode 1 : LEGO

LEGO est un binaire Go autonome avec prise en charge intégrée d'OpenStack Designate comme fournisseur DNS. Il ne nécessite aucune dépendance d'exécution.

Installer LEGO

# Download the latest release
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

Demander un certificat wildcard

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}

Lister les certificats

ls -l .lego/certificates

Convertir en PKCS12

openssl pkcs12 -passout "pass:" -export \
  -in _.${DOMAIN}.crt \
  -inkey _.${DOMAIN}.key \
  -out _.${DOMAIN}.p12

Débogage

Options et variables d'environnement utiles pour le dépannage :

# Enable verbose HTTP logging
export GODEBUG=http2debug=2
export LEGO_LOG_LEVEL=debug

# Use the Let's Encrypt staging server (does not issue valid certs, but avoids rate limits)
./lego run --server https://acme-staging-v02.api.letsencrypt.org/directory ...

Méthode 2 : certbot

certbot est le client officiel de Let's Encrypt. Le plugin certbot-dns-openstack ajoute Designate comme fournisseur DNS.

Installer certbot et les dépendances

sudo apt install -y certbot
pip install python-designateclient certbot-dns-openstack zope

Lister les zones disponibles

Vérifiez que certbot peut joindre votre zone Designate :

export OS_CLOUD=my-cloud
openstack zone list

Demander un certificat wildcard

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}"

Lister les certificats

ls -l ~/letsencrypt/etc/archive/*/*

Domaines multiples

Pour demander un certificat pour plusieurs domaines en une seule exécution, ajoutez d'autres options -d :

-d "*.example.com" -d "example.com" -d "*.api.example.com"

Utiliser le certificat

Dans un Load Balancer Octavia

Convertissez le certificat en PKCS12 (voir ci-dessus), puis stockez-le en tant que secret Barbican et utilisez-le dans un listener TERMINATED_HTTPS. Consultez le Load Balancer guide pour l'ensemble du flux de travail.

Dans Kubernetes

Montez les fichiers de certificat en tant que Secret Kubernetes et référencez-les dans votre Ingress ou votre contrôleur Ingress. Pour une gestion automatisée des certificats dans Kubernetes, envisagez cert-manager avec l'émetteur ACME et le challenge DNS-01.

Renouvellement

LEGO et certbot prennent tous deux en charge le renouvellement automatique :

# LEGO
./lego renew --dns designate --domains "*.example.com" --domains "example.com"

# certbot
certbot renew

Note

Les certificats wildcard nécessitent une validation DNS-01 et ne peuvent pas être validés via HTTP-01.