Precisa fornecer automaticamente certificados SSL para os usuários do seu SaaS (Software as a Service)? Pode parecer uma tarefa difícil à medida que você expande a quantidade de domínios. A boa notícia é que há uma solução viável e simples chamada Caddy.
Claro que existem várias soluções pagas disponíveis no mercado, tipo SSL para SaaS da Cloudflare, que simplificam o processo. Só que os preços são salgados, especialmente para empresas que estão começando e ainda não podem fazer esse investimento.
Depois de uma boa pesquisa e testes, descobri o Caddy, que oferece https on_demand, com validação de domínio.
Vou te mostrar como implementei essa configuração usando Docker e Docker-compose.
Considerando um docker-compose com a aplicação principal e um container caddy. No container caddy, temos 3 volumes mapeados: “caddydata”, “caddycfg” e o Caddyfile (próximo parágrafo).
version: '3' services: caddy: image: caddy:latest restart: always ports: - '80:80' - '443:443' - '443:443/udp' volumes: - caddydata:/data - caddycfg:/config - ./Caddyfile:/etc/caddy/Caddyfile depends_on: - app networks: - app app: build: context: . dockerfile: ./dockerassets/app/Dockerfile restart: always networks: - app networks: app: volumes: caddydataprod: caddycfgprod:
Criando o Caddyfile:
{ email email@suaempresa.com on_demand_tls { ask http://app/api/check-domain interval 2m burst 5 } }
No topo do arquivo, temos as configurações gerais do Caddy, incluindo o e-mail usado para emitir os certificados SSL e as configurações do on demand tls. No “on_demand_tls”, definimos a URL que responde com status 200, caso o domínio esteja cadastrado e ativo na sua aplicação, além do tempo de cache.
Assim, sempre que uma requisição de um domínio que ainda não tem certificado chega no servidor, o Caddy envia uma requisição para a URL do parâmetro “ask”, com o domínio como parâmetro de URL. Por exemplo: http://app/api/check-domain?domain=dominio.com. (lembre-se do www).
Aqui, temos o redirecionamento de http para https.
http:// { redir https://{host}{uri} permanent }
E finalmente, o proxy reverso com tls on demand para a aplicação.
https:// { tls { on_demand } reverse_proxy app:80 }
Confira o Caddyfile completo com todas as configurações acima:
{ email email@suaempresa.com on_demand_tls { ask http://app/api/check-domain interval 2m burst 5 } } http:// { redir https://{host}{uri} permanent } https:// { tls { on_demand } reverse_proxy app:80 }
Pronto! Com tudo configurado corretamente, basta um simples “docker compose up -d” para que sua aplicação comece a fornecer certificados SSL para domínios apontados para o seu servidor.