Certificati wildcard Let's Encrypt con Designate
OpenStack Designate può essere utilizzato come provider di challenge DNS-01 per il protocollo ACME di Let's Encrypt. Ciò consente di richiedere e rinnovare automaticamente certificati wildcard (*.example.com) senza intervento manuale: il client ACME crea un record TXT nella zona Designate per dimostrare la proprietà del dominio.
Questa guida illustra due metodi:
Prerequisiti
- OpenStack CLI installato e configurato (vedere Tools).
- Application Credentials in un file
clouds.yaml(vedere Application Credentials). - Una zona DNS creata in Designate per il dominio (vedere Create a DNS Zone).
- I nameserver della zona registrati presso il registrar del dominio (vedere Register DNS Nameservers).
Metodo 1: LEGO
LEGO è un binario Go autonomo con supporto integrato per OpenStack Designate come provider DNS. Non richiede dipendenze di runtime.
Installare 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
Richiedere un certificato 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}
Elencare i certificati
ls -l .lego/certificates
Convertire in PKCS12
openssl pkcs12 -passout "pass:" -export \
-in _.${DOMAIN}.crt \
-inkey _.${DOMAIN}.key \
-out _.${DOMAIN}.p12
Debug
Flag e variabili d'ambiente utili per la risoluzione dei problemi:
# 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 ...
Metodo 2: certbot
certbot è il client ufficiale di Let's Encrypt. Il plugin certbot-dns-openstack aggiunge Designate come provider DNS.
Installare certbot e le dipendenze
sudo apt install -y certbot
pip install python-designateclient certbot-dns-openstack zope
Elencare le zone disponibili
Verifichi che certbot possa raggiungere la zona Designate:
export OS_CLOUD=my-cloud
openstack zone list
Richiedere un certificato 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}"
Elencare i certificati
ls -l ~/letsencrypt/etc/archive/*/*
Domini multipli
Per richiedere un certificato per più domini in un'unica esecuzione, aggiunga altri flag -d:
-d "*.example.com" -d "example.com" -d "*.api.example.com"
Utilizzo del certificato
In un Load Balancer Octavia
Converta il certificato in PKCS12 (vedere sopra), quindi lo memorizzi come secret Barbican e lo utilizzi in un listener TERMINATED_HTTPS. Consulti la Load Balancer guide per l'intero flusso di lavoro.
In Kubernetes
Monti i file del certificato come Secret Kubernetes e li referenzi nel suo Ingress o nel controller Ingress. Per la gestione automatizzata dei certificati in Kubernetes, consideri cert-manager con l'emettitore ACME e il challenge DNS-01.
Rinnovo
Sia LEGO che certbot supportano il rinnovo automatico:
# LEGO
./lego renew --dns designate --domains "*.example.com" --domains "example.com"
# certbot
certbot renew
Note
I certificati wildcard richiedono la validazione DNS-01 e non possono essere validati tramite HTTP-01.