Configuração de Certificado SSL Gratuito do Let's Encrypt com Renovação Automática no Tomcat

Pré-requisitos

Antes de iniciar, verifique os seguintes itens:

  • Um domínio próprio registrado e apontado para o servidor. Certificados são emitidos para domínios; endereços IP não são aceitos.
  • O servidor deve estar acessível via HTTPS na porta 443 durante o processo de validação.
  • Ambiente Linux com acesso root ou permissões de administrador.

Instalação do Certbot

Faça o download do script do Certbot e conceda permissão de execução:

wget https://dl.eff.org/certbot-auto -O /opt/certbot/certbot-auto
chmod a+x /opt/certbot/certbot-auto

Na primeira execução, o Certbot baixa dependências do Python e outros pacotes. Caso a instalação pare no passo Installing Python packages, aguarde o download ou configure um mirror alternativo para o pip:

mkdir -p ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
EOF

Solicitando o cetrificado

Execute o cliente e siga as instruções interativas:

/opt/certbot/certbot-auto

Durante o processo, informe o e-mail para notificações, o(s) domínio(s) desejados e aceite os termos de serviço. Quando solicitado, escolha o método de validação e aponte para o diretório raiz da aplicação web, se aplicável.

Após a conclusão bem-sucedida, os arquivos do certificado estarão disponíveis em:

/etc/letsencrypt/live/seu-dominio.com/fullchain.pem
/etc/letsencrypt/live/seu-dominio.com/privkey.pem

Adaptando os certificados para o Tomcat

O Tomcat espera um keystore no formato JKS ou PKCS12. Como o Let's Encrypt gera arquivos PEM, é necessário convertê-los. O fluxo consiste em gerar um arquivo P12 a partir do fullchain e da chave privada, e depois importá-lo para um JKS.

openssl pkcs12 -export \
  -in /etc/letsencrypt/live/seu-dominio.com/fullchain.pem \
  -inkey /etc/letsencrypt/live/seu-dominio.com/privkey.pem \
  -out /opt/certbot/certs/cert.p12 \
  -name tomcat \
  -passout pass:senhaP12

Em seguida, importe o P12 para um keystore JKS:

keytool -importkeystore \
  -srckeystore /opt/certbot/certs/cert.p12 \
  -srcstoretype PKCS12 \
  -srcstorepass senhaP12 \
  -destkeystore /opt/certbot/certs/keystore.jks \
  -deststorepass senhaJKS \
  -destkeypass senhaJKS \
  -alias tomcat

Criando o script de renovação automática

Os certificados do Let's Encrypt possuem validade de 90 dias, sendo necessário renová-los periodicamente. O script a seguir força a renovação, converte os certificados e reinicia o Tomcat. Armazene-o em /opt/certbot/renova-ssl.sh:

#!/bin/bash
set -e

DOMINIO="seu-dominio.com"
BASE="/opt/certbot/certs"
LIVE="/etc/letsencrypt/live/${DOMINIO}"
SENHA_P12="senhaP12"
SENHA_JKS="senhaJKS"
CERTBOT="/opt/certbot/certbot-auto"

# Renova o certificado
${CERTBOT} renew --force-renewal

# Garante que o diretório de trabalho existe
mkdir -p "${BASE}"

# Copia os arquivos atualizados
cp "${LIVE}/fullchain.pem" "${BASE}/"
cp "${LIVE}/privkey.pem" "${BASE}/"

# Gera o arquivo PKCS12
openssl pkcs12 -export \
  -in "${BASE}/fullchain.pem" \
  -inkey "${BASE}/privkey.pem" \
  -out "${BASE}/cert.p12" \
  -name tomcat \
  -passin pass:"${SENHA_P12}" \
  -passout pass:"${SENHA_P12}"

# Faz backup do keystore antigo, se existir
if [ -f "${BASE}/keystore.jks" ]; then
    mv "${BASE}/keystore.jks" "${BASE}/keystore_$(date +%Y%m%d).jks"
fi

# Cria o novo JKS
keytool -importkeystore \
  -srckeystore "${BASE}/cert.p12" \
  -srcstoretype PKCS12 \
  -srcstorepass "${SENHA_P12}" \
  -destkeystore "${BASE}/keystore.jks" \
  -deststorepass "${SENHA_JKS}" \
  -destkeypass "${SENHA_JKS}" \
  -alias tomcat

# Reinicia o Tomcat
systemctl restart tomcat

Conceda permissão de execução ao script:

chmod +x /opt/certbot/renova-ssl.sh

Agendando a renovação com cron

Adicione uma tarefa no cron para executar o script automaticamente. Edite a crontab do root:

crontab -e

Insira a seguinte linha para executar o script todo domingo às 2h da manhã, descartando saídas:

0 2 * * 0 /opt/certbot/renova-ssl.sh >/dev/null 2>&1

Antes de depender do agendamento, execute o script manualmente e acompanhe os logs para confirmar que a renovação e a conversão dos certificados ocorrem sem erros.

Tags: Let's Encrypt Certbot tomcat openssl cron

Publicado em 7-7 03:48