Vai al contenuto

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:

  • LEGO: un binario Go leggero, senza dipendenze.
  • certbot: il popolare client ACME basato su Python.

Prerequisiti

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.