O autor selecionou o Fundo de Ajuda para COVID-19 para receber uma doação como parte do programa Escreva para Doações.
Introdução
A maioria das certificadas Let’s Encrypt são emitidas usando validação HTTP, o que permite a instalação fácil de certificados em um único servidor. No entanto, a validação HTTP nem sempre é adequada para emitir certificados para uso em sites balanceados de carga, nem pode ser usada para emitir certificados wildcard.
A validação DNS permite que solicitações de emissão de certificados sejam verificadas usando registros DNS, em vez de exibir conteúdo via HTTP. Isso significa que certificados podem ser emitidos simultaneamente para um cluster de servidores web executando atrás de um balanceador de carga, ou para um sistema que não é acessível diretamente pela Internet. As certificadas wildcard também são suportadas usando validação DNS.
O acme-dns-certbot é usado para conectar Certbot the um servidor DNS de terceiros onde os registros de validação de certificado podem ser definidos automaticamente via API quando você solicita um certificado. A vantagem disso é que você não precisa integrar Certbot diretamente com sua conta de fornecedor de DNS, nem precisa conceder-lhe acesso ilimitado à sua configuração DNS completa, o que é benéfico para a segurança.
As áreas de DNS delegadas são usadas para redirecionar as buscas para os registros de validação de certificado para o serviço de DNS de terceiros, por isso, assim que a configuração inicial for concluída, você pode solicitar quantos certificados quiser sem precisar realizar nenhuma validação manual.
Outro benefício chave do acme-dns-certbot é que ele pode ser usado para emitir certificados para servidores individuais que possam estar rodando atrás de um balanceador de carga ou que não sejam acessíveis diretamente via HTTP. Validação de certificados HTTP tradicional não pode ser usada nestes casos, a menos que você defina os arquivos de validação em cada servidor. A ferramenta acme-dns-certbot também é útil se você quiser emitir um certificado para um servidor que não é acessível via internet, como um sistema interno ou ambiente de apresentação.
Neste tutorial, você usará o gancho acme-dns-certbot para Certbot para emitir um certificado de Let’s Encrypt usando validação de DNS.
Pré-requisitos
Para concluir este tutorial, você precisará:
-
Um servidor Ubuntu 18.04 configurado segundo o A Configuração Inicial do Servidor com Ubuntu 18.04, incluindo um usuário não-root com permissão sudo.
-
Um domínio para o qual você pode obter um certificado TLS, incluindo a capacidade de adicionar registros DNS. Neste exemplo particular, usaremos
seu-dominio
esubdominio.seu-dominio
, bem como*.seu-dominio
para um certificado wildcard. No entanto, isso pode ser ajustado para outro domínio, subdomínios ou wildcards se necessário.
Uma vez que estes estão prontos, conecte-se ao seu servidor como seu usuário não-root para iniciar.
Passo 1 — Instalando Certbot
Neste passo, você vai instalar Certbot, que é um programa usado para emitir e gerenciar certificados Let’s Encrypt.
Certbot está disponível nos repositórios oficiais Ubuntu Apt, no entanto, é recomendado usar o repositório mantido pelos desenvolvedores do Certbot, já que este sempre tem a versão mais atual do software.
Comece adicionando o repositório Certbot:
Você precisará pressionar ENTER
para aceitar o prompt e adicionar o novo repositório ao seu sistema.
Agora, instale o pacote Certbot:
Uma vez que a instalação estiver concluída, você pode verificar que o Certbot foi instalado com sucesso:
Isso vai mostrar algo similar ao seguinte:
Neste passo, você instalou o Certbot. A próxima coisa que você fará é baixar e instalar o hook acme-dns-certbot.
Passo 2 — Instalando acme-dns-certbot
Agora que o programa base Certbot foi instalado, você pode baixar e instalar o acme-dns-certbot, que permitirá que o Certbot funcione no modo de validação DNS.
Comece baixando uma cópia do script:
Nota: Como boa prática, certifique-se de revisar este repositório do Github e o script antes de executá-lo. Você também pode primeiro fazer um fork deste repositório e, em seguida, utilizar o script acme-dns-certbot.py
. Este fork fornece uma camada extra de segurança, garantindo que o script permaneça sob nosso controle e seja menos suscetível a alterações não verificadas.
Após o download ser concluído, marque o script como executável:
Em seguida, edite o arquivo usando seu editor de texto favorito e ajuste a primeira linha para forçá-lo a usar o Python 3:
Adicione um 3
ao final da primeira linha:
#!/usr/bin/env python3
. . .
Isso é necessário para garantir que o script utilize a versão mais recente suportada do Python 3, em vez da versão legada do Python 2.
Depois de terminar, salve e feche o arquivo.
Por fim, mova o script para o diretório Certbot Let’s Encrypt para que o Certbot possa carregá-lo:
Nesta etapa, você baixou e instalou o hook acme-dns-certbot. Em seguida, você pode iniciar o processo de configuração e trabalhar para emitir seu primeiro certificado.
Passo 3 — Configuração de acme-dns-certbot
Para começar a usar o acme-dns-certbot, você precisará concluir um processo de configuração inicial e emitir pelo menos um certificado.
Comece executando o Certbot para forçar a emissão de um certificado usando a validação de DNS. Isto irá executar o script acme-dns-certbot e disparar o processo de configuração inicial:
Você usa o argumento --manual
para desabilitar todas as funcionalidades de integração automatizadas do Certbot. Neste caso, você está emitindo um certificado cru, em vez de instalá-lo automaticamente em um serviço.
Você configura o Certbot para usar o gancho acme-dns-certbot através do argumento --manual-auth-hook
. Você executa o argumento --preferred-challenges
para que o Certbot dê preferência à validação de DNS.
Você deve também informar ao Certbot para pausar antes de tentar validar o certificado, o que você faz com o argumento --debug-challenges
. Isso permite que você configure o registro DNS CNAME
necessário pelo acme-dns-certbot, coberto posteriormente neste passo. Sem o argumento --debug-challenges
, o Certbot não pausaria, portanto você não teria tempo para fazer a mudança de DNS necessária.
Lembre-se de substituir cada um dos nomes de domínio que deseja usar usando argumentos -d
. Se você quiser emitir um certificado com comodín, certifique-se de que o asterisco (*
) esteja escapado com um backslash (\
).
Após seguir as etapas padrão do Certbot, você eventualmente será promptado com uma mensagem semelhante à seguinte:
Você precisará adicionar o registro DNS CNAME
necessário à configuração DNS do seu domínio. Isso delegará o controle do subdomínio _acme-challenge
ao serviço de DNS ACME, o que permitirá que o acme-dns-certbot configure os registros DNS necessários para validar a solicitação de certificado.
Se você estiver usando o DigitalOcean como seu provedor de DNS, você pode definir o registro DNS no painel de controle:
É recomendado definir o TTL (tempo de vida) em cerca de 300 segundos para ajudar a garantir que quaisquer mudanças no registro sejam propagadas rápido.
Uma vez que você tenha configurado o registro DNS, volte para o Certbot e pressione ENTER
para validar a solicitação de certificado e concluir o processo de emissão.
Isso levará alguns segundos, e você então verá uma mensagem confirmando que o certificado foi emitido:
Você executou o acme-dns-certbot pela primeira vez, configurou os registros DNS necessários e emitiu com sucesso um certificado. A próxima etapa é configurar as renovações automáticas de seu certificado.
Passo 4 — Usando acme-dns-certbot
Neste passo final, você usará o acme-dns-certbot para emitir mais certificados e renovar os existentes.
A primeira coisa, agora que você emitiu com sucesso pelo menos um certificado usando o acme-dns-certbot, você pode continuar a emitir certificados para os mesmos nomes de DNS sem precisar adicionar outro registro DNS CNAME
. No entanto, se você desejar adquirir um certificado para um subdomínio diferente ou um nome de domínio inteiramente novo, você será solicitado a adicionar outro registro CNAME
para o subdomínio.
Por exemplo, você poderia emitir outro certificado wildcard independente sem precisar realizar a verificação novamente:
No entanto, se você tentar emitir um certificado para um subdomínio, você será solicitado a adicionar um registro CNAME
para o subdomínio:
Isso mostrará uma saída semelhante à configuração inicial que você realizou no Passo 3:
Agora que você consegue usar o acme-dns-certbot para emitir certificados, é bom considerar também o processo de renovação.
Uma vez que seus certificados estão próximos da expiração, o Certbot pode renová-los automaticamente por você:
O processo de renovação pode executar de start-to-finish sem interação do usuário e vai lembrar todas as opções de configuração que você especificou durante a configuração inicial.
Para testar que isto está funcionando sem ter que esperar até o prazo de expiração, você pode disparar uma execução em cima de papel. Isto simulará o processo de renovação sem fazer qualquer mudança real na sua configuração.
Você pode disparar uma execução em cima de papel usando o comando padrão renew
, mas com o argumento --dry-run
:
Isto emitirá algo semelhante ao seguinte, que fornecerá a certeza de que o processo de renovação está funcionando corretamente:
Neste passo final, você emitiu outro certificado e então testou o processo de renovação automática no Certbot.
Conclusão
Neste artigo, você configurou o Certbot com o acme-dns-certbot para emitir certificados usando validação de DNS. Isto abre a possibilidade de usar certificados wildcard, bem como gerenciar um grande conjunto de servidores web distintos que pode estar situado atrás de um balanceador de carga.
Certifique-se de manter os olhos no repositório acme-dns-certbot para quaisquer atualizações no script, já que é sempre recomendado executar a versão suportada mais recente.
Se você estiver interessado em saber mais sobre o acme-dns-certbot, você pode querer revisar a documentação do projeto acme-dns, que é o elemento de servidor do acme-dns-certbot:
O software acme-dns também pode ser hospedado localmente, o que pode ser vantajoso se você estiver operando em ambientes com alta segurança ou complexos.
Caso contrário, você pode explorar as detalhes técnicos de validação de DNS ACME revendo a seção relevante do documento oficial RFC que descreve como o processo funciona: