TLS et certificats¶
Comment fonctionne le HTTPS automatique sur tous les services internes.
Vue d'ensemble¶
Tous les services internes sont accessibles en HTTPS avec un certificat Let's Encrypt valide, meme s'ils ne sont pas exposes sur Internet.
La magie repose sur le DNS challenge Cloudflare :
- Traefik detecte un nouveau service (via les labels Docker)
- Il demande un certificat a Let's Encrypt
- Let's Encrypt verifie la propriete du domaine en demandant un record TXT DNS
- Traefik cree automatiquement ce record via l'API Cloudflare
- Certificat delivre, stocke, renouvele automatiquement
Pourquoi le DNS challenge ?¶
| Methode | HTTP challenge | DNS challenge |
|---|---|---|
| Port 80 expose sur Internet | Oui (obligatoire) | Non |
| Fonctionne pour des domaines internes | Non | Oui |
| Wildcard possible | Non | Oui |
| Config supplementaire | Aucune | Token API Cloudflare |
Pour un homelab avec des services internes, le DNS challenge est la seule option viable.
Configuration Traefik¶
traefik.yml¶
certificatesResolvers:
letencrypt:
acme:
email: [email protected]
storage: /certs/acme.json
caServer: https://acme-v02.api.letsencrypt.org/directory
dnsChallenge:
provider: cloudflare
Variables d'environnement¶
environment:
- CF_API_EMAIL=${CF_API_EMAIL} # Email du compte Cloudflare
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} # Token API (pas la Global API Key)
Token API vs Global API Key
Utilise un API Token avec uniquement la permission Zone:DNS:Edit sur ta zone, pas la Global API Key. Principe de moindre privilege.
Labels Docker (par service)¶
labels:
- "traefik.http.routers.SERVICE.tls=true"
- "traefik.http.routers.SERVICE.tls.certresolver=letencrypt"
Stockage des certificats¶
Les certificats sont stockes dans le volume Docker traefik-certs au fichier /certs/acme.json.
- Renouvellement automatique avant expiration (30 jours avant)
- Un seul fichier JSON contient tous les certificats
- Si le fichier est perdu, Traefik re-demande tous les certificats au prochain demarrage
Rate limits Let's Encrypt
Let's Encrypt a des limites : 50 certificats par domaine par semaine. Pour tester, utiliser le serveur staging :
Entrypoints et redirection HTTP → HTTPS¶
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
Tout le trafic HTTP (port 80) est automatiquement redirige vers HTTPS (port 443). Aucun service n'est accessible en clair.