--- title: Cert Warden created: 2026-06-06 updated: 2026-06-06 type: app tags: [catalogue, certificats, acme, lets-encrypt, tls, automatisation, go] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Reverse+Proxy, https://github.com/gregtwallace/certwarden] --- # 🚩 Cert Warden > **Client ACME centralisĂ© : gĂ©nĂšre et distribue automatiquement des certificats Let's Encrypt vers tous vos services via API key**. IdĂ©al pour les infrastructures multi-serveurs qui veulent dĂ©coupler la gestion TLS du reverse proxy principal. ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | [certwarden.com](https://www.certwarden.com/) | | **GitHub** | [gregtwallace/certwarden](https://github.com/gregtwallace/certwarden) | | **License** | BSD-3-Clause | | **Langage** | Dockerfile (orchestration), Go (backend, repo sĂ©parĂ©), TypeScript (frontend, repo sĂ©parĂ©) | | **Étoiles GitHub** | 584 ⭐ | | **DerniĂšre MAJ** | 2026-05-22 (v0.29.5) | | **CatĂ©gorie** | [[cat-reverse-proxy|Reverse Proxy]], Certificats, TLS, Automatisation | ## 📝 Description **Cert Warden** (anciennement *Cert Warden* par gregtwallace) est un **client ACME centralisĂ©** : au lieu que chaque service (reverse proxy, NAS, serveur mail, etc.) gĂšre ses propres certificats Let's Encrypt indĂ©pendamment, **un seul point** les gĂ©nĂšre, les stocke, et les **sert via une API authentifiĂ©e par clĂ©s** aux consommateurs qui en ont besoin. C'est la rĂ©ponse au problĂšme classique : "j'ai 3 reverse proxy et 2 services qui ont besoin de TLS, et je veux que tous les certificats soient renouvelĂ©s au mĂȘme endroit, monitorĂ©s, et tĂ©lĂ©chargeables simplement". **CaractĂ©ristiques principales** : - ✅ **Client ACME Let's Encrypt** (ou toute CA ACME-compatible : Buypass, ZeroSSL, etc.) - ✅ **API REST** pour que les services fetch leurs certificats par API key - ✅ **Providers de validation multiples** : HTTP-01 et DNS-01 - ✅ **DNS providers** : Cloudflare, Route53, DigitalOcean, Hetzner, OVH, Porkbun, etc. - ✅ **Stockage centralisĂ©** des certs + clĂ©s privĂ©es (chiffrĂ© au repos) - ✅ **Distribution automatique** : les clients fetch en HTTP(S) leur cert + key - ✅ **Alertes** : webhook/email sur renouvellement, Ă©chec, expiration proche - ✅ **Web UI** pour visualiser/manager les certs (frontend sĂ©parĂ©) - ✅ **Client lĂ©ger dĂ©diĂ©** ([certwarden-client](https://github.com/gregtwallace/certwarden-client)) pour distribuer sur des serveurs distants - ✅ **Cross-platform** : Linux, ARM (Raspberry Pi), Windows, macOS **Public cible** : administrateurs d'**infrastructures multi-serveurs** (home lab avec plusieurs machines, PME, associations) qui veulent **un point unique de gestion TLS** au lieu de dupliquer la config certbot sur 5 serveurs. ParticuliĂšrement pertinent quand on a des services qui ne supportent pas nativement ACME (synology, vieux nginx custom, etc.). ## 🚀 Installation ### Option 1 : Docker Compose (recommandĂ©) ```yaml # docker-compose.yml version: '3.8' services: certwarden: image: ghcr.io/gregtwallace/certwarden:latest container_name: certwarden restart: unless-stopped ports: - "8080:8080" # web UI + API volumes: - ./data:/app/data # certs, db, config environment: - TZ=Europe/Paris networks: - proxy networks: proxy: external: true ``` ### Variante Traefik (exposer derriĂšre Traefik + auth) ```yaml # docker-compose.yml (variante) version: '3.8' services: certwarden: image: ghcr.io/gregtwallace/certwarden:latest container_name: certwarden restart: unless-stopped volumes: - ./data:/app/data environment: - TZ=Europe/Paris labels: - "traefik.enable=true" - "traefik.docker.network=proxy" - "traefik.http.routers.certwarden.rule=Host(`certs.example.com`)" - "traefik.http.routers.certwarden.entrypoints=websecure" - "traefik.http.routers.certwarden.tls.certresolver=letsencrypt" - "traefik.http.services.certwarden.loadbalancer.server.port=8080" - "traefik.http.routers.certwarden.middlewares=auth-basique@docker" networks: - proxy networks: proxy: external: true ``` ### Option 2 : Client Cert Warden sur un serveur distant ```yaml # Sur une machine distante qui fetch ses certs via l'API Cert Warden version: '3.8' services: certwarden-client: image: ghcr.io/gregtwallace/certwarden-client:latest container_name: certwarden-client restart: unless-stopped volumes: - /etc/ssl/private:/certs # destination des certs fetched environment: - CW_SERVER=https://certs.example.com - CW_API_KEY=your-api-key-here - CW_CERT_NAMES=example.com,api.example.com - CW_AUTO_RELOAD=true ``` ## ⚙ Configuration Initiale 1. **Lancer le conteneur** et accĂ©der Ă  `http://YOUR_HOST:8080`. 2. **Compte admin** : créé au premier dĂ©marrage (consulter les logs du conteneur pour le password initial). 3. **Ajouter un ACME Account** : menu "ACME Accounts" → provider (Let's Encrypt prod/staging) + contact email. 4. **Configurer un Challenge Provider** : DNS-01 (avec token API du provider DNS) ou HTTP-01 (nĂ©cessite le port 80 ouvert). 5. **CrĂ©er un Certificate Profile** : domains (SAN), validation method, renewal window. 6. **CrĂ©er un Client (API key)** : chaque service qui fetch ses certs aura sa propre clĂ©. 7. **Tester le fetch** : `curl -H "X-API-Key: your-key" https://certs.example.com/certificates/example.com` retourne le bundle complet (cert + chain + key). 8. **IntĂ©grer dans le service final** : nginx, Caddy, Synology DSM, etc. via cron, systemd timer, ou le client dĂ©diĂ©. > 🎯 **Pattern typique** : Traefik/Caddy font leur propre ACME (DNS-01 avec Cloudflare) → les services qui ne supportent pas ACME (Synology, vieux apps) fetchent via Cert Warden. ## 🔄 Alternatives ### Open Source - **Caddy** — ACME automatique intĂ©grĂ© (mais pas centralisĂ©) - **Traefik** — ACME automatique intĂ©grĂ© (mais pas centralisĂ©) - **acme.sh** — script bash ACME mature, fichiers statiques - **Certbot** — client ACME de rĂ©fĂ©rence (EFF) - **Step-CA** — CA privĂ©e complĂšte (cf. [smallstep](https://smallstep.com/certificates/)) - **HashiCorp Vault PKI** — pour les infrastructures HashiCorp - **Caddy + DNS module** — centralisation possible via API DNS ### PropriĂ©taires (ce que Cert Warden remplace) - **Cloudflare SSL/TLS** (avec mode "Full" et API tokens) - **AWS Certificate Manager** + **ALB/CloudFront** - **DigiCert CertCentral** (entreprise) - **Venafi** (entreprise) - **Google Trust Services** (managed CA) ### Comparaison rapide | CritĂšre | Cert Warden | acme.sh | Caddy intĂ©grĂ© | | :--- | :--- | :--- | :--- | | Centralisation | ✅ API centrale | ❌ (fichiers par host) | ❌ (par instance) | | API distribution | ✅ | ❌ (fs/scp) | ❌ | | Web UI | ✅ | ❌ | ✅ (Caddy) | | DNS providers | ✅ (12+) | ✅ (150+) | ✅ (50+) | | Multi-serveur | ✅ Natif | ⚠ DIY | ❌ | | License | BSD-3-Clause | MIT | Apache-2.0 | | Stars | 584 | 43k+ | 73k | **Verdict** : **Cert Warden** pour qui veut **centraliser la distribution** de certs vers des services hĂ©tĂ©rogĂšnes (NAS, IoT, vieux services). **acme.sh** pour qui a peu de serveurs et accepte de scripter. **Caddy/Traefik** pour qui peut tout faire gĂ©rer par le reverse proxy lui-mĂȘme. ## 🔐 SĂ©curitĂ© - **Stockage chiffrĂ© au repos** : clĂ©s privĂ©es dans `./data` Ă  sĂ©curiser (`chmod 700`) - **API keys distinctes par client** : rotation facilitĂ©e, rĂ©vocation immĂ©diate - **Pas d'exposition Internet du port 8080 sans auth** : toujours derriĂšre Traefik + basicauth/Authentik - **Renouvellement proactif** : fenĂȘtre par dĂ©faut 30 jours avant expiration → marge de sĂ©curitĂ© - **Logs d'accĂšs API** : auditer qui fetche quoi - ⚠ **Si quelqu'un obtient l'API key + accĂšs au port**, il peut tĂ©lĂ©charger votre clĂ© privĂ©e → **2FA sur l'UI** et **restrictions IP** recommandĂ©es - **Webhook secrets** : signer les webhooks d'alerte pour Ă©viter les faux positifs - **Backups rĂ©guliers** de `./data` : si vous perdez la DB, vous perdez les certs ## 📚 Ressources - [Site officiel](https://www.certwarden.com/) - [Documentation GitHub](https://github.com/gregtwallace/certwarden) - [Cert Warden Client (consommateur)](https://github.com/gregtwallace/certwarden-client) - [Forum Cert Warden](https://forum.certwarden.com/) - [Reddit r/selfhosted: TLS multi-serveur](https://www.reddit.com/r/selfhosted/comments/1kf89kg/automating_tls_certificate_updates_across/) ## Pages LiĂ©es - [[cat-reverse-proxy]] — CatĂ©gorie Reverse Proxy - [[app-caddy]] — ACME automatique par reverse proxy - [[app-traefik]] — Idem, ACME intĂ©grĂ© - [[tls-https]] — Concepts TLS/HTTPS - [[comparatif-reverse-proxy]] — Comparaison dĂ©taillĂ©e - [[certbot]] — Alternative script bash