Acme.sh: Uma forma fácil e eficiente de emitir e renovar seus certificados Let’s Encrypt (Parte 1 – Integração BIND)

Olá! Certamente os certificados da Let’s Encrypt facilitaram a vida de muita gente e permitiram que muitas empresas utilizassem certificados assinados para aumentar a segurança dos seus serviços disponibilizados.

A questão dos certificados precisarem ser renovados a cada 3 meses requer uma administração constante dos certificados obtidos da Let’s Encrypt. Mesmo utilizando um certificado wildcard (sim, a Let’s Encrypt suporta) será necessário renovar o certificado constantemente e atualizar em todos os sistemas.

Portanto, apresento uma maneira fácil e eficiente para gerenciar a emissão e renovação de certificados de maneira automatizada com o ACME.SH!

Obs.: No final do artigo apresento como concatenar os arquivos para instalar o certificado no Zimbra.

    Algumas capturas de tela para uma melhor visualização clique na mesma.

Uma questão muito interessante do ACME.SH é que ele possui integração com APIs de diversos servidores DNS (também suporta os outros métodos de desafio, porém o foco deste artigo é automatizar com o desafio DNS que é o método suportado também para certificados wildcard), como pode ser visto no link abaixo:

https://github.com/acmesh-official/acme.sh/wiki/dnsapi

Uma das integrações é com o nsupdate para permitir a automatização com servidores BIND, muito utilizado por muitos administradores.

Eu decidi escrever o primeiro artigo utilizando o BIND como exemplo pois sempre que eu comentava sobre essa integração do ACME.SH com APIs de DNS quem trabalhava com o BIND logo desanimava, acreditando que essa integração seria somente para servidores DNS em Cloud, como Route53 da AWS, DNS da Azure, etc.

Portanto, vamos ver como o ACME.SH pode facilitar muito sua vida com certificados da Let’s Encrypt automatizando a emissão e renovação dos certificados.

Irei apresentar o download e instalação do ACME.SH em um host Linux. Se você utiliza Docker, também pode utilizar, basta seguir a documentação abaixo:

https://github.com/acmesh-official/acme.sh/wiki/Run-acme.sh-in-docker

Efetuando o download do ACME.SH:

(Conforme a documentação oficial, não é obrigatório efetuar as operações como root, porém é recomendado)

wget -O - https://get.acme.sh | sh

O instalador irá executar 3 ações:

  • Criar uma cópia do acme.sh no seu home no diretório .acme.sh (os certificados emitidos também ficarão neste diretório).
  • Criar um alias para executar o acme.sh sem informar o PATH.
  • Criar um cron diário para verificar e renovar o certificado quando necessário.

Configurando o BIND para integração com o ACME.SH

Você precisa efetuar a alteração somente no servidor MASTER do BIND caso esteja utilizando master/slave, ok?

Primeiro, no servidor do BIND, crie uma chave para permitir  a atualização da zona dns (domínio):

b=$(dnssec-keygen -a hmac-sha512 -b 512 -n USER -K /tmp foo)
cat > /etc/named/update.key <<EOF
key "update" {
algorithm hmac-sha512;
secret "$(awk '/^Key/{print $2}' /tmp/$b.private)";
};
EOF
rm -f /tmp/$b.{private,key}

No arquivo de configuração do bind (no RHEL/CentOS o arquivo é /etc/named.conf) inclua a seguinte entrada:

include "/etc/named/update.key";

Nas zonas que você deseja habilitar a chave para a integração adicione a seguinte linha (“update” é o identificador da chave gerado acima):

allow-update { key "update"; };

Exemplo:

Após reiniciar o serviço do BIND, voltamos ao ACME.SH para testar a integração.

Copie a chave gerada (/etc/named/update.key no exemplo) para o host onde irá executar a emissão ou renovação do certificado e exporte as configurações para o ACME.

Neste exemplo:

Domínio (zona): heaven.capitallinux.com.br (é um subdomain de um domínio de teste que utilizo)

Servidor DNS: ns1.heaven.capitallinux.com.br

Caminho da chave: /root/update.key

export NSUPDATE_SERVER="ns1.heaven.capitallinux.com.br"

export NSUPDATE_KEY="/root/update.key"

export NSUPDATE_ZONE="heaven.capitallinux.com.br"

Exemplo de emissão de certificados, sendo que o acme.sh irá criar as entradas TXT necessárias para o desafio (challenge) do Let’s Encrypt automaticamente e após o desafio ser conclúido irá remover.

Endereço “www.heaven.capitallinux.com.br”:

 acme.sh --issue --dns dns_nsupdate -d www.heaven.capitallinux.com.br

Saída da emissão com sucesso:

Caminho dos arquivos do certificado gerado:

Emitindo um certificado Wildcard

Para emitir um certificado Wildcard, basta incluir o “*” na frente do seu domínio ou subdomínio:

 acme.sh --issue --dns dns_nsupdate -d "*.heaven.capitallinux.com.br"

Exemplo sem ser subdomínio:

 acme.sh --issue --dns dns_nsupdate -d "*.respirandolinux.com.br"

Não vai falar como instalar no Zimbra?

Para instalar no Zimbra, basta efetuar o download da ROOT CA da Let’s Encrypt e concatenar com o arquivo “fullchain.cer” gerado:

wget https://raw.githubusercontent.com/fsschmidt/temporario/master/rootca_x3.pem

cat rootca_x3.pem >> fullchain.cer

O restante do procedimento para instalação no Zimbra pode ser encontrado neste artigo:

https://respirandolinux.com.br/2017/05/13/zimbra-8-7-implementando-certificado-assinado-com-lets-encrypt/

Validação do certificado, chave e CA pelo Zimbra:

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s