---
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
