O autor selecionou o Fundo de Ajuda para COVID-19 para receber uma doação como parte do programa Escreva por Doações.
Introdução
A maioria dos certificados de Let’s Encrypt é emitida 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 e também não pode ser usada para emitir certificados wildcard.
A validação DNS permite que pedidos de emissão de certificados sejam verificados usando registros DNS, em vez de servir conteúdo por meio de 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. Os certificados wildcard também são suportados usando validação DNS.
O Ferramenta acme-dns-certbot é usada 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. O benefício 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 ter que realizar validação manual.
Outro benefício chave da acme-dns-certbot é que ela pode ser usada para emitir certificados para servidores individuais que estão rodando atrás de um balanceador de carga ou que não são acessíveis diretamente via HTTP. A 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 um ambiente de apresentação.
Neste tutorial, você vai 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 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, utilizaremos
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.
Depois de tudo estar pronto, conecte-se ao seu servidor como usuário não-root para iniciar.
Passo 1 — Instalando Certbot
Neste passo, você instalará Certbot, que é um programa usado para emitir e gerenciar certificados Let’s Encrypt.
Certbot está disponível nos repositórios oficiais do 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.
A seguir, instale o pacote Certbot:
Uma vez que a instalação estiver concluída, você pode verificar se o Certbot foi instalado com sucesso:
Isso irá exibir algo semelhante à seguinte:
Neste passo, você instalou o Certbot. A próxima coisa que você fará é baixar e instalar o gancho acme-dns-certbot.
Passo 2 — Instalando acme-dns-certbot
Com o programa base do Certbot instalado, você pode agora 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 melhor prática, certifique-se de revisar este repositório no Github e o script antes de executá-lo. Você pode também primeiro fork este repositório e depois usar o script acme-dns-certbot.py
. Esse fork fornece uma camada extra de segurança, garantindo que o script permaneça sob nosso controle e é menos suscetível a mudanças não verificadas.
Após o download completar, marque o script como executável:
Em seguida, edite o arquivo usando seu editor de texto preferido e ajuste a primeira linha para forçar o uso do Python 3:
Adicione um 3
no final da primeira linha:
#!/usr/bin/env python3
. . .
Isso é necessário para garantir que o script use a versão mais recente suportada do Python 3, em vez da versão legada do Python 2.
Uma vez concluído, salve e feche o arquivo.
Finalmente, move o script para o diretório Certbot Let’s Encrypt para que o Certbot o carregue:
Neste passo, você baixou e instalou o hook acme-dns-certbot. A seguir, você pode começar o processo de configuração e trabalhar para emitir seu primeiro certificado.
Passo 3 — Configurando 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 validação 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 automatizada do Certbot. Neste caso, você está emitindo um certificado bruto, em vez de instalá-lo automaticamente em um serviço.
Você configura o Certbot para usar o gancho acme-dns-certbot via o argumento --manual-auth-hook
. Você executa o argumento --preferred-challenges
para que o Certbot dê preferência à validação DNS.
Você também deve 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, o que é coberto posteriormente neste passo. Sem o argumento --debug-challenges
, o Certbot não pararia, 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 você deseja usar usando os argumentos -d
. Se você quiser emitir um certificado com comodo (*), certifique-se de que o asterisco (*
) esteja com um backslash (\
).
Após seguir os passos 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 defina os registros DNS necessários para validar a solicitação de certificado.
Se você estiver usando o DigitalOcean como seu fornecedor 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 qualquer mudança no registro seja propagada rapidamente.
Uma vez que você configurou o registro DNS, volte para o Certbot e pressione ENTER
para validar a solicitação de certificado e concluir o processo de emissão.
Isto 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 um certificado com sucesso. 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 certificados adicionais 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 ter que adicionar outro registro CNAME
de DNS. 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
.
Por exemplo, você pode 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 à que você realizou na configuração inicial no Passo 3:
Agora que você pode usar o acme-dns-certbot para emitir certificados, é bom considerar o processo de renovação também.
Assim que seus certificados estiverem próximos da expiração, o Certbot pode renová-los automaticamente por você:
O processo de renovação pode executar de começo ao fim 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 isso está funcionando sem ter que esperar até a data de expiração, você pode disparar uma simulação. Isso irá simular o processo de renovação sem fazer qualquer mudança real na sua configuração.
Você pode disparar uma simulação usando o comando padrão renew
, mas com o argumento --dry-run
:
Isso retornará 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 depois 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 DNS. Isso abre a possibilidade de usar certificados wildcard além de gerenciar uma grande quantidade de servidores web distintos que estão situados 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 mais recente suportada.
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 pode também ser hospedado localmente, o que pode ser vantajoso se você estiver operando em ambientes de alta segurança ou complexos.
Caso contrário, você pode explorar as detalhes técnicos do processo de validação de DNS ACME revendo a seção relevante do documento oficial RFC que descreve como o processo funciona: