Renove domínios usando certbot e usando desafio de DNS

9

Criei vários certificados SSL para vários domínios usando o método autônomo. Estou interessado apenas nos certificados, sem integração com o servidor.

Eles são agora para renovação. Então, eu corri:

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

E seguiu as instruções para cada domínio (adicionando a entrada DNS necessária para cada um). Dessa forma, não precisei parar o servidor e obtive meus novos certificados.

Meu (vago) entendimento de tudo isso é que não existe uma maneira atual de renovar certificados automaticamente usando o desafio do DNS. Ou talvez você não possa renovar certificados automaticamente para o método "manual"?

De qualquer forma, eu escrevi 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

Neste ponto, no renewaldiretório TODOS os domínios têm:

autenticador = manual

E:

pref_challs = dns-01

Questões:

  • Agora ... quando eu executar o "certbot renew", ele renovará todos eles automaticamente sem usar o meu script?

  • Como realmente criar um novo certificado usando o desafio do DNS para começar?

Merc
fonte

Respostas:

4

Resposta atualizada (veja a resposta original abaixo)

Na minha resposta original, concentrei-me no fato de que o script que você forneceu não é necessário ao usar o renewcomando. No entanto, não verifiquei se o renewcomando é realmente aplicável nesse cenário.

Como cdhowie e bobpaul no estado dos comentários: certbot renewé um modo não interativo que - em conjunto com o desafio do DNS - requer que você forneça um script por meio do --manual-auth-hookparâmetro O referido script deve ser capaz de definir um TXTregistro. Você também pode fornecer outro script para limpeza posterior através do --manual-cleanup-hookparâmetro

Se você fornecer esses parâmetros, todo o processo será executado automaticamente sem nenhuma interação.

Se você não fornecer esses parâmetros, o certbot falhará:

/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.',)

Se você deseja renovar seus certificados pelo modo manual, execute novamente os comandos que utilizou para adquirir os certificados. Nesse caso, seu script é uma boa opção, pois o certonlycomando não analisa os certificados / configurações atuais e exige que você forneça os nomes de domínio por meio do -dparâmetro ou no modo interativo.


quando executar o "certbot renew", ele renovará todos eles automaticamente sem usar o meu script?

TL; DR: Sim, deveria.

Vamos dar uma olhada na documentação do certbot :

A partir da versão 0.10.0, o Certbot suporta uma ação de renovação para verificar todos os certificados instalados quanto à validade iminente e tentar renová-los. A forma mais simples é simplesmente

renovação do certbot

Por enquanto, tudo bem.

Este comando tenta renovar quaisquer certificados obtidos anteriormente que expiram em menos de 30 dias.

Isso deve responder à sua pergunta. Cuidado: não sei como certbotlidar com situações em que você move os certificados para diretórios diferentes.

Posteriormente no mesmo parágrafo:

O mesmo plug-in e opções usados ​​no momento em que o certificado foi originalmente emitido serão usados ​​para a tentativa de renovação, a menos que você especifique outros plug-ins ou opções. Ao contrário certonly, renewatua em vários certificados e sempre leva em consideração se cada um deles está próximo do vencimento.

Então sim; certbotdeve renovar todos os seus certificados sem a ajuda do seu script.


Como realmente crio um novo certificado usando o desafio do DNS para começar?

O que há de errado com o comando que você postou no início da sua postagem? certbot -d example.com --manual --preferred-challenges dns certonlyadquirirá um certificado para example.com usando o desafio de DNS.

As etapas para criar um certificado são:

  • Execute o certbotcomando que você postou
  • Aguarde o comando mostrar um registro DNS TXT
  • Crie esse registro TXT
  • Continue o certbotcomando
  • Obter um certificado para o domínio especificado
  • Exclua o registro TXT (já que você só precisa dele para a criação e um novo para a renovação)

Se você deseja automatizar esse processo completo, dê uma olhada em uma ferramenta como lego, que suporta alguns provedores de DNS .

malte
fonte
Fantástico, você será informado se funcionar em alguns meses!
Merc
4
Esta resposta está incorreta. certbot renewnão suporta o método manual sem um script .
Cdhowie
Sim, então geralmente não use --manual. O objetivo inteiro --manualé forçar o modo interativo. Mas você pode usar plug-ins DNS, como aws ou digitalocean, certonlysem a --manualopção e eles serão renovados automaticamente antes de 90 dias.
bobpaul
Obrigado pela entrada, eu atualizei a resposta.
malte