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)
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 ambinete 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 -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
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 “fullchain1.pem”, nesta ordem)
- Link para download da “root CA”: https://raw.githubusercontent.com/fsschmidt/temporario/master/rootca_x3.pem
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…