Huyendo un poco (o mucho) de la complejidad del programa certbot para la renovación de certificados me he decidido a probar uacme que permite la validación vía DNS para gandi.net.
Dado que no está empaquetado se sigue el procedimiento habitual con un respositorio git y se procede a instalar el software y el archivo con la clave del API de gandi.net, que es donde tengo los DNS del dominio.
$ git clone https://github.com/tdy91/uacme-gandi-hook.git
$ cd uacme-gandi-hook/
$ sudo install -m 0555 gandi_api_functions.inc gandi_nsupdate.sh /usr/share/uacme/
$ sudo cat > /root/gandi_api_key
XXXXXXXXXXXXXXX
EOF
$ sudo chmod 0600 /root/gandi_api_key
El archivo con la clave del API de gandi se instala en el directorio raíz del superusuario de manera predeterminada aunque puede cambiarse con la variable de entorno GANDI_API_KEY_FILE
.
Una vez instalado comenzar con él es sencillo:
$ sudo install -d /etc/uacme/
$ sudo uacme -c /etc/uacme/ new webmaster@dominio
$ tree /etc/uacme/
/etc/uacme/
── private
└── key.pem
Con eso tenemos creada la cuenta ACME asociada a esa dirección de correo y ahora vamos a instalar el complemento para emplear el mecanismo de DNS para los certificados.
uacme -v -c /etc/uacme/ -h /usr/share/uacme/gandi_nsupdate.sh issue susanamerino.com \*.susanamerino.com
uacme: version 1.7.1 starting on Wed, 14 Sep 2022 11:31:01 +0200
uacme: loading key from /etc/uacme//private/key.pem
uacme: loading key from /etc/uacme//private/susanamerino.com/key.pem
uacme: checking existence and expiration of /etc/uacme//susanamerino.com/cert.pem
uacme: /etc/uacme//susanamerino.com/cert.pem does not exist
uacme: generating certificate request
uacme: fetching directory at https://acme-v02.api.letsencrypt.org/directory
uacme: retrieving account at https://acme-v02.api.letsencrypt.org/acme/new-acct
uacme: account location: https://acme-v02.api.letsencrypt.org/acme/acct/731113527
uacme: creating new order at https://acme-v02.api.letsencrypt.org/acme/new-order
uacme: order location: https://acme-v02.api.letsencrypt.org/acme/order/731113527/125377996077
uacme: retrieving authorization at https://acme-v02.api.letsencrypt.org/acme/authz-v3/153227855347
uacme: running /usr/share/uacme/gandi_nsupdate.sh begin dns-01 susanamerino.com 7Y6us_HJ0jX6SSGWOl9thJn11XLJ00YDENWpfK-57J8 C_LhKw2qhJoCZUu24iejkuS9Vmn3RYtbyhz7fQ5BnMs
/usr/share/uacme/gandi_nsupdate.sh: 39: source: not found
/usr/share/uacme/gandi_nsupdate.sh: 106: acme_ns_put: not found
uacme: challenge dns-01 declined
uacme: no challenge completed
uacme: failed to authorize order at https://acme-v02.api.letsencrypt.org/acme/order/731113527/125377996077
root@esferas:~#
Y como puede verse algún error he cometido porque el script gandi_nsupdate.sh
no encuentra las funciones asociadas y muere miserablemente. Revisado el código, e incluso llamado el script directamente (con trazado de ejecución), el error no aparece. Es sólo cuando está integrado en el proceso de trabajo de uacme
.
No termina de gustarme el montaje y debo estar cansado para acertar con el error. Y sí, certbot
tiene lo que tiene, pero de momento funciona. Seguiré con él. Jo, qué rollo.