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.