Renueve dominios usando certbot y usando DNS challenge

9

Creé varios certificados SSL para varios dominios utilizando el método independiente. Solo estoy interesado en los certificados, sin integración de servidor.

Ahora son para renovación. Entonces, corrí:

certbot -d example.com --manual --preferred-challenges dns certonly

Y siguió las instrucciones para cada dominio (agregando la entrada DNS requerida para cada uno). De esta manera, no tuve que detener el servidor y obtuve mis nuevos certificados.

Mi (vago) entendimiento de todo esto es que no hay una forma actual de renovar certificados automáticamente usando el desafío DNS. ¿O tal vez no puede renovar certificados automáticamente para el método "manual"?

De todos modos, escribí este script:

#!/bin/bash

for i in renewal/*;do
  n=${i:8:-5};
  echo $n;
  # echo "\n" | certbot --text --agree-tos -d $n --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly;
done

En este punto, en el renewaldirectorio TODOS los dominios tienen:

autenticador = manual

Y:

pref_challs = dns-01

Preguntas:

  • Ahora ... cuando ejecuto "certbot refresh", ¿los renovará automáticamente sin usar mi script?

  • ¿Cómo puedo crear un nuevo certificado usando el desafío DNS para comenzar?

Merc
fuente

Respuestas:

4

Respuesta actualizada (ver respuesta original a continuación)

En mi respuesta original, me concentré en el hecho de que el script que proporcionó no es obligatorio cuando se utiliza el renewcomando. Sin embargo, no me aseguré de que el renewcomando sea realmente aplicable en este escenario.

Como dicen cdhowie y bobpaul en los comentarios: certbot renewes un modo no interactivo que, junto con el desafío dns, requiere que proporciones un script a través del --manual-auth-hookparámetro. Dicho script debe ser capaz de establecer un TXTregistro. También puede proporcionar otro script para la limpieza posterior a través del --manual-cleanup-hookparámetro.

Si proporciona estos parámetros, todo el proceso se ejecutará automáticamente sin ninguna interacción.

Si no proporciona estos parámetros, certbot fallará:

/opt/certbot # certbot renew --force-renewal
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/foobar.w9f.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Could not choose appropriate plugin: The manual plugin is not working; there may be problems with your existing configuration.
The error was: PluginError('An authentication script must be provided with --manual-auth-hook when using the manual plugin non-interactively.',)

Si desea renovar sus certificados a través del modo manual, debe volver a ejecutar los comandos que utilizó para adquirir los certificados. En este caso, su secuencia de comandos es una buena opción ya que el certonlycomando no mira los certificados / configuración actuales y en su lugar requiere que proporcione los nombres de dominio a través del -dparámetro o en modo interactivo.


cuando ejecuto "certbot refresh", ¿los renovará automáticamente sin usar mi script?

TL; DR: Sí, debería.

Echemos un vistazo a la documentación de certbot :

A partir de la versión 0.10.0, Certbot admite una acción de renovación para verificar todos los certificados instalados por vencimiento inminente e intentar renovarlos. La forma más simple es simplemente

certbot renovar

Hasta aquí todo bien.

Este comando intenta renovar cualquier certificado obtenido previamente que caduque en menos de 30 días.

Esto debería responder a tu pregunta. Cuidado: no sé qué tan bien certbotpuede manejar situaciones en las que mueve los certificados a diferentes directorios.

Más adelante en el mismo párrafo:

El mismo complemento y las opciones que se utilizaron en el momento en que se emitió originalmente el certificado se utilizarán para el intento de renovación, a menos que especifique otros complementos u opciones. A diferencia certonly, renewactúa en múltiples certificados y siempre tiene en cuenta si cada uno está por vencer.

Entonces sí; certbotdebería renovar todos sus certificados sin la ayuda de su script.


¿Cómo puedo crear un nuevo certificado usando el desafío DNS para comenzar?

¿Qué tiene de malo el comando que publicaste al principio de tu publicación? certbot -d example.com --manual --preferred-challenges dns certonlyadquirirá un certificado para example.com usando el desafío dns.

Los pasos para crear un certificado son:

  • Ejecute el certbotcomando que publicó
  • Espere a que el comando le muestre un registro TXT de DNS
  • Crea ese registro TXT
  • Continuar el certbotcomando
  • Obtenga un certificado para el dominio especificado
  • Elimine el registro TXT (ya que solo lo necesita para la creación y uno nuevo para la renovación)

Si desea automatizar ese proceso completo, es posible que desee echar un vistazo a una herramienta como lego que admite un par de proveedores de DNS .

malta
fuente
¡Fantástico, te avisaré si funciona en un par de meses!
Merc
44
Esta respuesta es incorrecta. certbot renewno es compatible con el método manual sin un script .
cdhowie
Sí, así que generalmente no lo uso --manual. El propósito de --manuales forzar el modo interactivo. Pero puede usar complementos DNS como aws o digitalocean certonlysin la --manualopción y se renovarán automáticamente antes de 90 días.
bobpaul
Gracias por la entrada, he actualizado la respuesta.
malte