Este guia descreve o processo de obtenção e configuração de um certificado SSL gratuito do Let’s Encrypt em um servidor que utiliza o HAProxy, sem precisar do Apache ou Nginx (modo standalone).

1. Instalar o Certbot

No CentOS, RHEL, AlmaLinux ou Rocky Linux (versões 8 ou 9), siga os passos abaixo para instalar o Certbot:

# Instalar o repositório EPEL
dnf install epel-release -y

# Instalar o Certbot
dnf install certbot -y

Nota: Para ambientes que utilizam apenas o Certbot standalone (sem servidor web como Apache ou Nginx), a instalação acima já é suficiente.

2. Parar o HAProxy temporariamente

O Certbot precisa usar a porta 80 para realizar a validação do domínio.
Se o HAProxy estiver em execução e utilizando essa porta, é necessário pará-lo temporariamente:

systemctl stop haproxy

3. Obter o certificado SSL

Execute o comando abaixo para solicitar o certificado SSL para o seu domínio. Substitua seu.dominio.com pelo domínio real que você quer proteger:

certbot certonly --standalone -d seu.dominio.com

Ao final, os certificados serão gerados nos seguintes caminhos:

  • Certificado completo (Full Chain):
    /etc/letsencrypt/live/seu.dominio.com/fullchain.pem
  • Chave privada:
    /etc/letsencrypt/live/seu.dominio.com/privkey.pem

4. Criar o arquivo .pem único para o HAProxy

O HAProxy precisa de um arquivo .pem que contenha tanto o certificado quanto a chave privada. Crie-o com o comando:

cat /etc/letsencrypt/live/seu.dominio.com/fullchain.pem \
    /etc/letsencrypt/live/seu.dominio.com/privkey.pem \
    > /etc/haproxy/certs/seu.dominio.com.pem

Em seguida, ajuste as permissões do arquivo para garantir a segurança:

chmod 600 /etc/haproxy/certs/seu.dominio.com.pem

Importante: O diretório /etc/haproxy/certs/ deve existir. Caso não exista, crie-o:

mkdir -p /etc/haproxy/certs/

5. Configurar o HAProxy para usar SSL

Edite o arquivo de configuração do HAProxy, geralmente localizado em /etc/haproxy/haproxy.cfg, e adicione as seguintes configurações:

frontend myfrontend
mode http
bind <IP-do-HAProxy>:80
bind <IP-do-HAProxy>:443 ssl crt /etc/haproxy/certs/seu.dominio.com.pem
acl letsencrypt-acl path_beg /.well-known/acme-challenge/
use_backend letsencrypt-backend if letsencrypt-acl
redirect scheme https code 301 if !{ ssl_fc }

Explicação dos parâmetros:

  • bind: Define os IPs e portas que o HAProxy escutará (HTTP 80 e HTTPS 443).
  • ssl crt: Informa o caminho para o arquivo .pem contendo o certificado SSL.
  • acl letsencrypt-acl: Cria uma ACL (Access Control List) para permitir o tráfego necessário para renovação de certificado via Let’s Encrypt.
  • use_backend letsencrypt-backend: Redireciona requisições específicas para o backend de validação (configuração opcional).
  • redirect: Redireciona requisições HTTP para HTTPS automaticamente.

6. Iniciar novamente o HAProxy

Após realizar as configurações, reinicie o serviço do HAProxy:

systemctl start haproxy

Verifique o status para garantir que ele iniciou corretamente:

systemctl status haproxy

AVISO LEGAL: Os procedimentos descritos neste documento devem ser executados de acordo com o contexto de cada sistema, de forma a evitar impactos negativos à segurança, disponibilidade, integridade e privacidade de dados. A CentralServer se reserva o direito de modificar a qualquer tempo e sem aviso prévio as informações aqui apresentadas a fim de refletir o lançamento de novos serviços, atualizações físicas e operacionais, e evolução do estado-da-arte da tecnologia.