Como usar Vamos criptografar a validação de desafio de DNS?

126

Vamos criptografar anunciados que eles têm:

Turned on support for the ACME DNS challenge

Como faço para que ./letsencrypt-auto gere um novo certificado usando a validação de domínio de desafio do DNS?

EDITAR
Quero dizer: como evito http/https port binding, usando o recurso recém-anunciado (2015-01-20) que permite provar a propriedade do domínio adicionando um registro TXT específico na zona DNS do domínio de destino?

    
por Pierre Prinetti 21.01.2016 / 23:13

7 respostas

159

Atualmente, é possível realizar uma validação de DNS também com o cliente certbot LetsEncrypt no modo manual. A automação também é possível (veja abaixo).

Plugin manual

Você pode realizar uma verificação manual - com o plug-in manual.

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

O Certbot fornecerá a você instruções para atualizar manualmente um registro TXT para o domínio, a fim de prosseguir com a validação.

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

Depois de atualizar o registro DNS, pressione Enter, o certbot continuará e, se o LetsEncrypt CA verificar o desafio, o certificado será emitido normalmente.

Você também pode usar um comando com mais opções para minimizar a interatividade e responder a perguntas do certificado. Observe que o plug-in manual ainda não suporta o modo não interativo.

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

A renovação não funciona com o plug-in manual enquanto ele é executado no modo não interativo. Mais informações na documentação oficial do Certbot .

Atualização: ganchos manuais

Na nova versão do Certbot, você pode usar ganchos , por exemplo --manual-auth-hook , --manual-cleanup-hook . Os ganchos são scripts externos executados pelo Certbot para executar a tarefa.

As informações são passadas em variáveis de ambiente, por exemplo, domínio para validar, token de desafio. 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

Você pode escrever seu próprio manipulador ou usá-lo já existente, há muitos disponíveis, por exemplo, para o Cloudflare DNS.

Mais informações sobre o oficial Certbot aninha a documentação

Automação, Renovação, Scripts

Se você gostaria de automatizar a validação de desafios de DNS, não é possível atualmente com o certbot vanila. Update: é possível alguma automação com os ganchos do Certbot.

Assim, criamos um plug-in simples que suporta scripts com automação de DNS. Está disponível como certbot-external-auth .

pip install certbot-external-auth

Ele suporta os métodos de validação DNS, HTTP, TLS-SNI. Você pode usá-lo no modo de tratamento ou no modo de saída JSON.

Modo do manipulador

No modo handler, o plug-in certbot + chama ganchos externos (um programa, script de shell, python, ...) para executar a validação e a instalação. Na prática, você escreve um manipulador / shell script simples que recebe argumentos de entrada - domínio, token e faz a alteração no DNS. Quando o manipulador termina, o certbot prossegue com a validação como de costume.

Isso lhe dá uma flexibilidade extra, a renovação também é possível.

O modo manipulador também é compatível com os ganchos de DNS Desidratado (antigo letsencrypt. sh) Já existem muitos ganchos de DNS para provedores comuns (por exemplo, CloudFlare, GoDaddy, AWS). No repositório, há um README com extensos exemplos e manipuladores de exemplo.

Exemplo com Gancho de DNS desidratado :

certbot \
    --text --agree-tos --email [email protected] \
    --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

Outro modo de plug-in é o modo JSON. Ele produz um objeto JSON por linha. Isso permite uma integração mais complicada - por exemplo, Ansible ou algum gerenciador de implementação está chamando o certbot. A comunicação é realizada via STDOUT e STDIN. Cerbot produz objetos JSON com dados para realizar a validação, por exemplo,

certbot \
    --text --agree-tos --email [email protected] \
    --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"}

Quando o DNS for atualizado, o chamador enviará um caractere de nova linha para STDIN do certbot para sinalizar que ele pode continuar com a validação.

Isso permite a automação e o gerenciamento de certificados do servidor de gerenciamento central. Para instalação, você pode implantar certificados pelo SSH.

Para mais informações, consulte o leia-me e os exemplos em certbot-external-auth no GitHub.

EDIT: Há também uma nova postagem no blog descrevendo o problema de validação do DNS e o uso do plug-in.

EDIT: atualmente trabalhamos na validação de 2 etapas do Ansible, que será desativado em breve.

    
por 29.10.2016 / 15:00
37

Consegui usar o cliente dehydrated para obter um certificado usando a validação do DNS.

link

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

Você precisará usar o gancho de validação do DNS correto para seu domínio, mas há algumas opções disponíveis como exemplos:

link

    
por 18.02.2016 / 22:45
10

A partir de hoje, o cliente oficial não suporta o tipo de desafio DNS-01 (ainda).

Veja link

I haven't looked at this so I don't really know. My high-level understanding was just "no support in our Python client for the DNS challenge yet".

Você pode acompanhar o progresso em este PR . Alternativamente, existem alguns clientes que já suportam.

    
por 28.01.2016 / 12:34
5

Eu escrevi um script de gancho para o cliente letsencrypt.sh que permite que você use Permite criptografar a verificação de DNS para provedores de DNS que não fornecem uma API para uso (também conhecida como entrada manual e verificação).

Você pode conferir aqui: link

    
por 22.05.2016 / 18:55
3

Como mencionado nas respostas anteriores, você pode facilmente verificar um domínio por DNS com isso:

  1. instale os aplicativos necessários (no Ubuntu): %código%
  2. gere um certificado com a confirmação manual de desafio do DNS para www.example.com (substitua pelo seu domínio): %código%
por 16.12.2016 / 11:36
3

Depois de experimentar combinações diferentes, foi isso que funcionou para mim usando desidratado e repositórios manuais do letsencrypt-manual-hook . Se os passos abaixo funcionarem para você, não se esqueça de star esses repositórios

NOTA: Além das respostas de panticz.de e 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...

Você receberá um hash (depois de executar o comando acima), crie um registro TXT no seu DNS. Certifique-se de que funciona ao executar o comando abaixo ou a Caixa de ferramentas do GSuite

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

Agora, pressione enter no prompt. Isso não funcionou para mim, embora o registro TXT tenha sido atualizado. Eu tive que pressionar Ctrl + C e executar o comando novamente.

~$ ./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!
~$

Agora, seus certificados públicos e privados estão presentes aqui.

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

Para renovar (o tempo mínimo de espera é de 30 dias), apenas o mesmo comando novamente.

~$ ./dehydrated --cron --challenge dns-01 --domain your.domain.com --hook ./hooks/manual/manual_hook.rb
    
por 02.02.2018 / 14:44
0

Hugo Landau escreveu um cliente da ACME no Go ( link ) que suporta desafios de DNS (com o protocolo nsupdate do BIND). Está funcionando perfeitamente para mim há pelo menos 18 meses.

    
por 03.07.2018 / 20:07