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:
Validação do certificado, chave e CA pelo Zimbra: