Pregunta ¿Cómo utilizar la validación de desafío DNS de Let's Encrypt?


Let's Encrypt tiene Anunciado ellos tienen:

Encendido soporte para el desafío de DNS de ACME

Como hago ./letsencrypt-auto generar un nuevo certificado utilizando la validación de dominio de desafío DNS?

EDITAR
Quiero decir: ¿Cómo evito? http/https enlace de puerto, mediante el uso de la función recientemente anunciada (2015-01-20) que le permite probar la propiedad del dominio agregando un registro TXT específico en la zona DNS del dominio de destino?


122
2018-01-21 22:13


origen


Nota al margen: Certbot (este es el nuevo nombre para el cliente letsencrypt) ahora permite la autenticación basada en webroot de forma predeterminada. - Pierre Prinetti


Respuestas:


Actualmente es posible realizar una validación de DNS también con el certbot LetsEncrypt cliente en el modo manual. La automatización también es posible (ver más abajo).

Plugin manual

Puede realizar una verificación manual con el complemento manual.

certbot -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns certonly

Luego, Certbot le proporcionará instrucciones para actualizar manualmente un registro TXT para el dominio con el fin de continuar con la validación.

Please deploy a DNS TXT record under the name
_acme-challenge.bristol3.pki.enigmabridge.com with the following value:

667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc

Once this is deployed,
Press ENTER to continue

Una vez que haya actualizado el registro DNS, presione Entrar, certbot continuará y si LetsEncrypt CA verifica el desafío, el certificado se emite normalmente.

También puede usar un comando con más opciones para minimizar la interactividad y responder preguntas certbot. Tenga en cuenta que el complemento manual todavía no admite el modo no interactivo.

certbot --text --agree-tos --email you@example.com -d bristol3.pki.enigmabridge.com --manual --preferred-challenges dns --expand --renew-by-default  --manual-public-ip-logging-ok certonly

La renovación no funciona con el complemento manual, ya que se ejecuta en modo no interactivo. Más información en oficial Certbot documentación.

Actualización: ganchos manuales

En la nueva versión de Certbot puedes usar manos, p.ej. --manual-auth-hook, --manual-cleanup-hook. Los ganchos son scripts externos ejecutados por Certbot para realizar la tarea.

La información se pasa en las variables de entorno, por ejemplo, el dominio para validar, el token de desafío. Vars: CERTBOT_DOMAIN, CERTBOT_VALIDATION, CERTBOT_TOKEN.

certbot certonly --manual --preferred-challenges=dns --manual-auth-hook /path/to/dns/authenticator.sh --manual-cleanup-hook /path/to/dns/cleanup.sh -d secure.example.com

Puede escribir su propio controlador o uso ya existente, hay muchos disponibles, por ejemplo, para Cloudflare DNS.

Más información sobre Certbot oficial documentación de ganchos

Automatización, Renovación, Scripting

Si desea automatizar la validación de desafíos de DNS, actualmente no es posible con vanila certbot. Actualización: algo de automatización es posible con los ganchos de Certbot.

Por lo tanto, creamos un complemento simple que admite secuencias de comandos con automatización de DNS. Está disponible como certbot-external-auth.

pip install certbot-external-auth

Es compatible con los métodos de validación DNS, HTTP, TLS-SNI. Puede usarlo en el modo de controlador o en el modo de salida JSON.

Modo de controlador

En el modo de controlador, el complemento certbot + invoca enlaces externos (un programa, shell script, python, ...) para realizar la validación e instalación. En la práctica, escribe un controlador / shell script simple que obtiene argumentos de entrada: dominio, token y realiza el cambio en DNS. Cuando el manejador termina, certbot procede con la validación como de costumbre.

Esto le da una flexibilidad extra, la renovación también es posible.

El modo de controlador también es compatible con Deshidratado Enganches de DNS (anteriormente letsencrypt.sh). Ya hay muchos enlaces DNS para proveedores comunes (por ejemplo, CloudFlare, GoDaddy, AWS). En el repositorio hay un archivo README con ejemplos extensos y controladores de ejemplo.

Ejemplo con Deshidratado Enganche DNS:

certbot \
    --text --agree-tos --email you@example.com \
    --expand --renew-by-default \
    --configurator certbot-external-auth:out \
    --certbot-external-auth:out-public-ip-logging-ok \
    -d "bristol3.pki.enigmabridge.com" \
    --preferred-challenges dns \
    --certbot-external-auth:out-handler ./dehydrated-example.sh \
    --certbot-external-auth:out-dehydrated-dns \
    run 

Modo JSON

Otro modo de plugin es el modo JSON. Produce un objeto JSON por línea. Esto permite una integración más complicada, por ejemplo, Ansible o algún administrador de implementación está llamando a certbot. La comunicación se realiza a través de STDOUT y STDIN. Cerbot produce un objeto JSON con datos para realizar la validación, por ejemplo,

certbot \
    --text --agree-tos --email you@example.com \
    --expand --renew-by-default \
    --configurator certbot-external-auth:out \
    --certbot-external-auth:out-public-ip-logging-ok \
    -d "bristol3.pki.enigmabridge.com" \
    --preferred-challenges dns \
    certonly 2>/dev/null

{"cmd": "perform_challenge", "type": "dns-01", "domain": "bs3.pki.enigmabridge.com", "token": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4", "validation": "ejEDZXYEeYHUxqBAiX4csh8GKkeVX7utK6BBOBshZ1Y", "txt_domain": "_acme-challenge.bs3.pki.enigmabridge.com", "key_auth": "3gJ87yANDpmuuKVL2ktfQ0_qURQ3mN0IfqgbTU_AGS4.tRQM98JsABZRm5-NiotcgD212RAUPPbyeDP30Ob_7-0"}

Una vez que se actualiza el DNS, la persona que llama envía un carácter de nueva línea a STDIN del certbot para indicar que puede continuar con la validación.

Esto permite la automatización y la gestión de certificados desde el servidor de administración central. Para la instalación puede implementar certificados a través de SSH.

Para obtener más información, consulte el léame y los ejemplos en certbot-external-auth GitHub.

EDITAR: También hay una nueva entrada en el blog Describiendo el problema de validación de DNS y el uso del complemento.

EDITAR: actualmente trabajamos en la validación de 2 pasos de Ansible, pronto estará apagado.


154
2017-10-29 13:00



Al migrar un sitio web a otro servidor, es posible que desee un nuevo certificado antes de cambiar el registro-A. Puede utilizar el método manual (certbot certonly --preferred-challenges dns -d example.com) para la solicitud inicial. Después de probar y cambiar el registro A, use el método webroot común (certbot certonly webroot -d example.com -w /path/to/webroot) usando exactamente los mismos nombres de dominio que antes. Si se realiza correctamente, certbot reconocerá el certificado / configuración existente y actualizará la configuración de renovación, por lo que el certificado se renovará automáticamente en el futuro. - marcovtwout
Funciona, cuidado con AWS Firewall a nivel EC2 - jruzafa
Estoy seguro de que me gustaría saber lo que --manual-public-ip-logging-ok significa ... la documentación es críptica al respecto y todos los ejemplos que lo utilizan no lo explican ... incluido este. - Rondo
¿El proceso de renovación requiere un nuevo registro TXT cada vez? - Old Geezer
@OldGeezer Al parecer, lo hace. Comencé el proceso y me pidió que creara un registro TXT con contenidos diferentes a los de la última vez. - Dario Fumagalli


Pude usar el dehydrated cliente para obtener un certificado utilizando la validación de DNS.

https://github.com/lukas2511/dehydrated

./dehydrated --cron --domain my.domain.example.com --hook ./hook.route53.rb --challenge dns-01

Deberá usar el enlace de validación de DNS correcto para su dominio, pero hay algunas opciones disponibles como ejemplos:

https://github.com/lukas2511/dehydrated/wiki/Examples-for-DNS-01-hooks


37
2018-02-18 21:45



Esto funcionó muy bien para mí. La única advertencia que agregaría es que tuve que instalar algunas de las dependencias de gemas definidas en el route53.rb guión de gancho. - jmreicha


A partir de hoy, el cliente oficial no admite el tipo de desafío DNS-01 (todavía).

Ver https://community.letsencrypt.org/t/status-of-official-letsencrypt-clients-dns-01-challenge-support/9427

No he mirado esto, así que realmente no lo sé. Mi comprensión de alto nivel fue simplemente "no hay soporte en nuestro cliente Python para el desafío de DNS todavía".

Puedes seguir el progreso en este PR. Alternativamente, hay algunos clientes Eso ya lo apoyan.


10
2018-01-28 11:34





Escribí un guión enganche Para el cliente de letsencrypt.sh que le permite usar la verificación de DNS de Lets Encrypt para los proveedores de DNS que no proporcionan una API para usar (también conocido como entrada manual y verificación).

Puede verificarlo aquí: https://github.com/jbjonesjr/letsencrypt-manual-hook


5
2018-05-22 16:55





Como se mencionó en las respuestas anteriores, puede verificar fácilmente un dominio por DNS con esto:

  1. instala las aplicaciones requeridas (bajo Ubuntu): apt-get install -y git ruby letsencrypt git clone https://github.com/lukas2511/dehydrated.git git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
  2. genere un certificado con la confirmación de desafío DNS manual para www.example.com (reemplace con su dominio): ./dehydrated/dehydrated -c -t dns-01 -d www.example.com -k ./dehydrated/hooks /manual/manual_hook.rb

3
2017-12-16 10:36





Después de probar diferentes combinaciones, esto es lo que funcionó para mí usando deshidratado y le permite encriptar-gancho manual repositorios git. Si los siguientes pasos te funcionan, no olvides estrella estos repositorios

NOTA: Esto es además de las respuestas de panticz.de y alexcline.

~$ git clone https://github.com/lukas2511/dehydrated.git
~$ git clone https://github.com/jbjonesjr/letsencrypt-manual-hook.git dehydrated/hooks/manual
~$ cd dehydrated
~$ ./dehydrated --register --accept-terms
~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
 + Signing domains...
 + Creating new directory /Users/vikas/dehydrated/certs/your.domain.com ...
 + Creating chain cache directory /Users/vikas/dehydrated/chains
 + Generating private key...
 + Generating signing request...
 + Requesting authorization for your.domain.com...
 + 1 pending challenge(s)
 + Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Create TXT record for the domain: '_acme-challenge.your.domain.com'. TXT record:
'gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx'
Press enter when DNS has been updated...

Obtendrá un hash (después de ejecutar el comando anterior), cree un TXT grabar en su DNS. Asegúrese de que funciona ejecutando el siguiente comando o Caja de herramientas de GSuite

~$ dig TXT _acme-challenge.your.domain.com. +short @8.8.8.8
"gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx"
~$

Ahora presiona entrar en el aviso Esto no funcionó para mí a pesar de que se actualizó el registro TXT. Tuve que presionar Ctrl + C y ejecutar el comando de nuevo.

~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
#
# !! WARNING !! No main config file found, using default config!
#
Processing your.domain.com
 + Signing domains...
 + Generating private key...
 + Generating signing request...
 + Requesting authorization for your.domain.com...
 + 1 pending challenge(s)
 + Deploying challenge tokens...
Checking for pre-existing TXT record for the domain: '_acme-challenge.your.domain.com'.
Found gkIxxxxxxxIcAESmjF8pjZGQrrZxxxxxxxxxxx. match.
 + Responding to challenge for your.domain.com authorization...
Challenge complete. Leave TXT record in place to allow easier future refreshes.
 + Challenge is valid!
 + Requesting certificate...
 + Checking certificate...
 + Done!
 + Creating fullchain.pem...
 + Walking chain...
 + Done!
~$

Ahora, sus certificados públicos y privados están presentes aquí.

$ ls certs/your.domain.com/privkey.pem certs/your.domain.com/fullchain-1517576424.pem

Para renovar (el tiempo mínimo de espera es de 30 días), nuevamente el mismo comando.

~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb

2
2018-02-02 13:44





Hugo Landau escribió un cliente de ACME en Go (https://github.com/hlandau/acme) que soporta desafíos de DNS (con el protocolo nsupdate de BIND). Ha estado funcionando perfectamente para mí durante al menos 18 meses.


0
2017-07-03 18:07