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.
Top comments (0)