Zimbra 8.7 e 8.8: Implementando certificado assinado com Let’s Encrypt

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:

https://respirandolinux.com.br/2016/08/27/zimbra-porque-atualizar-para-a-versao-8-7-openssl-padding-oracle-instalei-um-certificado-valido-estou-seguro/

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:

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”:

21 comentários sobre “Zimbra 8.7 e 8.8: Implementando certificado assinado com Let’s Encrypt

  1. 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!

    1. 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

  2. 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,

      1. 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”.

    1. 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.

  3. 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

      1. Olá Fábio!
        Muito obrigado pela sua atenção à minha questão, já está resolvido o problema.
        Tudo de bom para si

  4. 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).

  5. 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…

Deixe uma resposta para Josué Piris Cancelar resposta

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