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 :
Prérequis
- OpenStack CLI installé et configuré (voir Tools).
- Des Application Credentials dans un fichier
clouds.yaml(voir Application Credentials). - Une zone DNS créée dans Designate pour votre domaine (voir Create a DNS Zone).
- Les serveurs de noms de la zone enregistrés auprès de votre registrar de domaine (voir Register DNS Nameservers).
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.