Integração de acme-companion com API Gateways para Gerenciamento Automatizado de Certificados SSL

Arquitetura do Proxy Reverso com SSL Automatizado

O ecossistema Docker permite a orquestração de gateways de API com renovação automática de credenciais TLS através da Let's Encrypt. A stack tradicional combina o nginx-proxy para roteamento de requisições, o docker-gen para geração dinâmica de configurações baseadas em metadados de contêineres, e o acme-companion para interagir diretamente com a Autoridade Certificadora (CA).

Definição da Stack com Docker Compose

Em vez de configurar cada componente isoladamente através de comandos manuais ou scripts soltos, a abordagem recomendada utiliza um arquivo de composição unificado. Abaixo, apresentamos uma topologia reestruturada onde os volumes de configuração e os certificados são compartilhados de forma segura entre o gateway de borda e o provisionador de segurança.

version: '3.8'

services:
  edge_gateway:
    image: nginxproxy/nginx-proxy:alpine
    container_name: api_gateway
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - proxy_certs:/etc/nginx/certs:ro
      - proxy_vhost:/etc/nginx/vhost.d
      - proxy_html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - frontend_net

  tls_provisioner:
    image: nginxproxy/acme-companion:latest
    container_name: cert_manager
    environment:
      - DEFAULT_EMAIL=security@empresa.com
      - DHPARAM_BITS=4096
      - ACME_CA_URI=https://acme-v02.api.letsencrypt.org/directory
    volumes_from:
      - edge_gateway
    volumes:
      - proxy_certs:/etc/nginx/certs:rw
      - acme_state:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - frontend_net

volumes:
  proxy_certs:
  proxy_vhost:
  proxy_html:
  acme_state:

networks:
  frontend_net:
    driver: bridge

Persistência e Configurações de Volume

A integridade dos certificados e a prevenção de limitações de taxa (rate limits) impostas pela CA dependem diretamente da persistência de dados em disco. O diretório /etc/acme.sh foi mapeado para um volume dedicado (acme_state) para garantir que o estado das requisições sobreviva a reinicializações.

Para configurações personalizadas por domínio, arquivos específicos podem ser injetados em /etc/nginx/vhost.d. Caso seja necessário sobrescrever o comportamento padrão do proxy para uma rota particular, um arquivo nomeado com o domínio exato (por exemplo, api.exemplo.com) deve ser montado neste caminho.

Personalização de Parâmetros Criptográficos

O provisionador gera parâmetros Diffie-Hellman (DH) automaticamente em seu primeiro ciclo de execução. O tamanho desta chave é controlado via variável de ambiente DHPARAM_BITS, aceitando valores como 2048, 3072 ou 4096.

Se a infraestrutuar precisar suportra clientes legados (como aplicações baseadas em Java 6 ou 7) que falham ao negociar chaves superiores a 1024 bits, a geração automática deve ser contornada. Nesses cenários, um arquivo dhparam.pem pré-computado deve ser gerado externamente e montado diretamente no gateway:

  edge_gateway:
    volumes:
      - ./legacy_certs/dhparam.pem:/etc/nginx/certs/dhparam.pem:ro

Diagnóstico de Falhas na Emissão de Certificados

Problemas durante a execução do desafio HTTP-01 geralmente estão relacionados a bloqueios de rede, configurações incorretas de DNS ou falhas na leitura do socket do Docker.

  • Verifique se as portas 80 e 443 estão acessíveis publicamente e roteadas diretamente para o serviço edge_gateway.
  • Inspecione os logs do provisionador executando docker compose logs -f cert_manager para identificar erros de validação de domínio junto à API da Let's Encrypt.
  • Certifique-se de que o contêiner da aplicação de backend possui as variáveis de ambiente VIRTUAL_HOST e LETSENCRYPT_HOST devidamente declaradas. Sem esses metadados, o motor de templates não acionará o fluxo de criação do certificado.

Tags: Docker nginx Let's Encrypt ACME-Companion HTTPS

Publicado em 6-14 02:13 por Thomas