Olá ! Nesse artigo eu gostaria de compartilhar com vocês as orientações para implementar um certificado válido e gratuito da Let’s Encrypt no Zimbra 8.7 e 8.8.
(Essa implementação é idêntica para a versões Open Source, Suite Plus e Network)
CONTEÚDO ATUALIZADO EM OUTUBRO DE 2021 APÓS EXPIRAÇÃO DA DST Root CA X3
Tenho observado que mesmo com a divulgação dos certificados gratuitos da Let’s Encrypt e a diminuição do custo de certificados assinados no Brasil em geral, muitos administradores Zimbra ainda não implementaram um certificado válido no seu ambiente.
Neste outro artigo explico um pouco mais sobre a importância da utilização de um certificado assinado, além da atualização para a versão 8.7:
Dica: Após a instalação do certificado não deixe de efetuar a implementação do artigo https://respirandolinux.com.br/2016/08/28/zimbra-8-7-obtendo-a-no-teste-de-seguranca-ssl-labs/ , para obtenção do resultado A+ no teste da SSL LABS.
Vamos ao que interessa !
A emissão de certificados pela Let’s Encrypt é bem simples: Você instala o pacote, solicita o certificado com o nome principal e nomes alternativos (opcional) que deseja e a validação é efetuda através de consultas DNS: Se a sua solicitação estiver partindo do endereço IP para qual o(s) endereço(s) resolve(m), o certificado será emitido.
(Também é possível efetuar a validação com uma URL específica, espero abordar isso em um próximo artigo)
A solicitação pode ser executada no próprio servidor Zimbra (se a requisição na Let’s Encrypt chegar com o endereço IP do endereço requisitado), para isso, é necessário parar o serviço de Proxy OU Mailbox (aquele que estiver respondendo pelas requisições dos clientes nas portas 80 e 443):
zmproxyctl stop zmmailboxdctl stop
O próximo passo é efetuar o download do pacote da Let’s Encrypt e entrar no diretório letsencrypt:
git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt
Para entendimento, o endereço público do meu ambiente Zimbra neste artigo é “webmail.linuxvibe.com.br“. Para o Zimbra (e-mail e colaboração), basta um endereço público, porém neste certificado também estou contemplado os outros endereços abaixo, que são necessários para instalação da solução Zimbra Talk (irei publicar o artigo aqui em breve):
No diretório “letsencrypt“, execute o comando abaixo para geração do certificado com os endereços desejados (opção -d):
./letsencrypt-auto certonly --standalone --preferred-chain "ISRG Root X1" -d xmpp.linuxvibe.com.br -d conference.linuxvibe.com.br -d external.linuxvibe.com.br -d auth.linuxvibe.com.br -d jitsi-videobridge.linuxvibe.com.br -d focus.linuxvibe.com.br -d turn.linuxvibe.com.br -d webmail.linuxvibe.com.br
Caso deseje iniciar o script informando o endereço de modo interativo, execute-o apenas com as opções abaixo:
./letsencrypt-auto certonly --standalone --preferred-chain "ISRG Root X1"
O script irá configurar um servidor WEB temporário para validação e emissão do certificado, sendo necessário concordar com a licença e informar o e-mail para contato:
Ocorrendo tudo bem com a validação, o certificado (certificado+chave publica+cadeia) será emitido em armazenado em “/etc/letsencrypt/live/endereço/“:
Neste momento, você já pode iniciar o seu serviço novamente (proxy ou mailbox) e iniciar a instalação do certificado assinado. Um desafio com a utilização de certificados da Let’s Encrypt é a renovação do mesmo, que deve ser efetuada a cada 90 dias, que pode ser automizada com o Certbot (https://certbot.eff.org/). O outro desafio é que com a renovação, será gerado um novo certificado, sendo necessário implementar novamente no Zimbra.
Para implementar o certificado no Zimbra, você irá precisar complementar a cadeia (chain) com a “root CA”, que é efetuada da seguinte maneira:
- Criar um arquivo com a “root CA” e as cadeias do arquivo “chain1.pem”, nesta ordem)
- Link para download da “root CA”: https://letsencrypt.org/certs/isrgrootx1.pem.txt
root CA: (https://www.identrust.com/certificates/trustid/root-download-x3.html)
Efetuada a criação do arquivo com a cadeia completa, valide os arquivos com o comando abaixo (ordem: chave, certificado e cadeia completa):
/opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem CHAIN_COMPLETA.pem
O resultado deve ser a validação do certificado, chave privada e cadeia completa:
Efetuada a validação, faça o backup dos certificados atuais (muito recomendado) e efetue a cópia da chave privada para o diretório “/opt/zimbra/ssl/zimbra/commercial“, com o nome “commercial.key”:
cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d") cp privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
Efetue a instalação do certificado e reinicialize os serviços para validação da implementação (ordem: certificado e cadeia completa):
/opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem CHAIN_COMPLETA.pem
Instalação correta do certificado:
Reinicialização dos serviços com “zmcontrol restart”:
Boa tarde, ha algum problema em implementar o certificado com o zimbra autenticando no ad?
Olá José Eduardo,
Não tem nenhum problema.
Obrigado, é que deu uma treta ao adicionar ja com ele integrado no dominio, mas descobri que era referente ao hostname, esse era o erro
Warning: ldap_start_tls() [function.ldap-start-tls]: Unable to start TLS: Connect error in
obrigado pelo retorno!
Olá José Eduardo!
Quando o hostname real do servidor não está nos endereços informados do certificado, eu altero o parametro local conforme abaixo:
zmlocalconfig -e ldap_starttls_supported=0
Boa tarde,
Não consegui realizar o processo da root chain.
Efetuada a criação do arquivo com a cadeia completa, valide os arquivos com o comando abaixo (ordem: chave, certificado e cadeia completa)
Será que houve alguma alteração para baixar? Existe algum passo-a-passo desse procedimento?
Obrigado,
Olá !
Não mudou o procedimento, como você está realizando o processo?
Ola Fabio,
Na verdade eu tinha esquecido de colocar o —- BEGIN CERTIFICATE — e o — END CERTIFICATE —
Coloquei e ele conseguiu validar normalmente. Tenho hoje vários domínios no meu servidor, você sabe se ele irá acertar vários certificados? O principal ficou ok, mas os secundários ainda constam como “Não Seguros”.
Olá,
para utilizar múltiplos certificados você precisar implementar Server Name Indication (SNI):
https://wiki.zimbra.com/wiki/Multiple_SSL_Certificates,_Server_Name_Indication_(SNI)_for_HTTPS
É possivel usar o Lets Encrypt com o ZCS 7? É necessário usar o proxy?
Boa tarde Ricardo, obrigado pelo acesso.
Sim, é possível utilizar com ZCS 7, embora eu recomendaria, por motivos de segurança, urgentemente a atualização do mesmo. Não é obrigatório o proxy na versão 7.
Há muito tempo venho tentando instalar, mas nao consigo resolver o problema:
error: while accessing https://github.com/letsencrypt/letsencrypt/info/refs
fatal: HTTP request failed
Olá Fábio!
Gostei do seu blog, foi muito útil para mim
Estou tendo dificuldades neste passo “Criar um arquivo com a “root CA” e as cadeias do arquivo “fullchain1.pem”, nesta ordem)”, pode, por favor, mostrar-me o que devo fazer exactamente?
Agradeço antecipadamente a sua ajuda
Olá Rogério, irei criar um artigo explicando mais detalhadamente em passo, acredito que ainda este fim de semana.
Obrigado pelo acesso.
Olá Rogério, atualizei o artigo colocando um link para download direto da root CA, para concatenar com o arquivo “fullchain”.
Olá Fábio!
Muito obrigado pela sua atenção à minha questão, já está resolvido o problema.
Tudo de bom para si
Muito obrigado, Fábio. Facilitou muito o tutorial.
Obrigado, ajudou muito.
Olá Mauro,
Obrigado pelo acesso e por informar que te ajudou. Esse é o motivo deste blog existir.
Olá Fabio, show de bola o artigo….
Sugiro uma complementação…. como fazer para “renovar” esse certificado gerado, e (também) como, automatizar essa renovação (via cron por exemplo).
Poxa vida, agora fiquei confuso! A documentação do Zimbra diz: “chain.pem deve ser concatenado com a CA raiz. Primeiro a cadeia e o final do arquivo a CA raiz. A ordem é importante.”, porém aqui, a ordem é invertida e o arquivo indicado é o “fullchain”, aos invés do “chain.pem”. A mesma documentação (do Zimbra) sugere o seguinte site para a CA raiz: https://www.identrust.com/certificates/trustid/root-download-x3.html, porém redireciona para uma página de downloads com várias opções disponíveis; o desafio é saber qual seria o mais adequado. Mas mesmo notando estas dibergências, percebo relatos de usuários que obtiveram exito no procedimento, por isso que fiquei confuso…
Bom DIa!!!
Como fazer essa instalação em um zimbra multiserver
Boa tarde Fábio,
Muito boa explicação, funcionou de primeira.
Está de parabéns pelo blog, posts fáceis de entender e que ajudam demais.
Obrigado pelo acesso Bruno,
Fico feliz demais que o blog tenha te ajudado.
Olá.. Chegaste a fazer a renovação do certificado no Ubuntu 16.04 com a chave “ISRG Root X1” ? pelo que percebi o OpenSSL 1.0.2 não é compatível com essa chave e o Ubuntu 16.04 não aceita a versão mais atual do OpenSSL
Olá Rafael, pesquise pelo acme.sh aqui no blog, terá um procedimento que funciona nesse sistema