Skip to content

Certificates FR

CyberMind-FR edited this page Oct 11, 2026 · 1 revision

Certificates — certificats TLS et leur renouvellement 🟠

EN | FR | 🟠 AUTH | /certs/ : ce qui est servi, jusqu'à quand, et qui le renouvelle

À quoi ça sert. La page /certs/ (paquet secubox-certs) liste les certificats TLS que HAProxy sert réellement, indique les jours restants de chacun, et permet à un administrateur d'en émettre, renouveler ou révoquer un. Cette page explique aussi la chaîne de renouvellement, car un certificat peut être renouvelé correctement sans jamais atteindre le frontal.

  • Paquet : secubox-certs · page /certs/ · API /api/v1/certs/ · configuration /etc/secubox/certs.toml
  • Liés : haproxyctl cert … (WAF-FR décrit le chemin HAProxy → sbxwaf → nginx), le moniteur de certificats de secubox-metrics.

Où vivent les certificats

Lieu Contenu
/data/haproxy/certs/<domaine>.pem ce que HAProxy sert : un fichier concaténé (chaîne + clé privée) par domaine
/etc/letsencrypt/live/<domaine>/ le magasin certbot (fullchain.pem, privkey.pem)
répertoire d'acme.sh (~/.acme.sh/<domaine>[_ecc]/) le magasin acme.sh (fullchain.cer, <domaine>.key) ; les certificats à courbe elliptique portent le suffixe _ecc

La page /certs/ lit /data/haproxy/certs. Droits attendus sur chaque fichier servi : 0640, propriétaire haproxy:secubox.

Pourquoi 0640 haproxy:secubox. Le module tourne sous l'utilisateur secubox. Un .pem laissé en 0600 root lui est illisible : avant le correctif, 14 certificats valides s'affichaient « expired ».

Du renouvellement au frontal

Renouveler dans un magasin ne fait rien de lui-même : HAProxy ne lit que son propre répertoire. Deux mécanismes portent le résultat, quel que soit l'outil émetteur.

Outil Renouvellement Porté vers HAProxy par
certbot minuterie systemd, via secubox-certbot (démarre certbot même si une dérive pip casse sa pile Python) le hook de déploiement /etc/letsencrypt/renewal-hooks/deploy/secubox-haproxy, qui lance haproxyctl cert sync après chaque renouvellement réussi seulement
acme.sh son propre cron quotidien (02:00) certsctl deploy --apply, lancé par une minuterie quotidienne à 03:15 (Persistent=true : un passage manqué est rattrapé)

Les deux suivent les mêmes garde-fous :

  • Idempotent, et HAProxy n'est rechargé que si un fichier a changé : un rechargement coupe les connexions en cours.
  • Le contenu décide, pas les dates : un mtime récent ne prouve rien.
  • Jamais raccourcir la vie d'un certificat servi : un .pem qui expire plus tard que la source est laissé tel quel (joker ou dépôt manuel possibles).
  • Jamais remplacer par un plus ancien, et jamais déployer quand une date est illisible.
  • Écriture atomique (fichier temporaire puis renommage) : un .pem tronqué ferait échouer HAProxy au rechargement, pour tous les vhosts.
  • Si un domaine est dans les deux magasins, acme.sh l'emporte (il gère l'essentiel du parc).

certsctl deploy sans --apply simule seulement ; certsctl status compte les certificats expirés / proches de l'échéance (21 jours) / valides. haproxyctl cert sync peut être lancé à la main à tout moment.

Lire la page

État Règle
healthy plus de 30 jours restants
warning 8 à 30 jours
critical 0 à 7 jours
expired date de fin dépassée
unknown le fichier est illisible (❔, « illisible » dans la page)

Un certificat illisible est « inconnu », jamais « expiré ». Presque toujours c'est un problème de droits (0600 root) : lancer haproxyctl cert sync ou corriger le mode en 0640 haproxy:secubox. Un échec de lecture n'est pas mémorisé : le fichier redevient visible dès qu'il est lisible, et le renouvellement groupé ignore les inconnus.

Actions (administrateur) : New Cert (assistant en 3 étapes avec contrôles préalables — résolution DNS, port 80 — puis émission, défi HTTP ou DNS), Renew un certificat, Renew Expiring (tous ceux à moins de 30 jours), Revoke (révoque via certbot et supprime le .pem, puis recharge HAProxy).

Méthode Chemin Garde Rôle
GET /list, /status, /details/{domaine}, /metrics session admin inventaire et détail
POST /check session admin contrôles préalables
POST /issue, /renew/{domaine}, /renew-all administrateur émettre et renouveler
DELETE /revoke/{domaine} administrateur révoquer et supprimer

Le moniteur (tuile du portail, tableau de bord)

secubox-metrics fait tourner chaque minute un agrégateur de certificats (hors de la boucle d'événements) et publie valid / expiring_soon / expiring_critical / expired avec le prochain renouvellement. Il lit /etc/letsencrypt/live/*/cert.pem (seuils de 30 et 7 jours par défaut) — le magasin certbot, pas le .pem servi. Un certificat géré seulement par acme.sh est donc vu par la page /certs/, pas par cet agrégateur. La page Portal-FR affiche sa synthèse.

Un domaine est abandonné — que faire

Un domaine abandonné s'affiche « expire bientôt » puis « expiré » pour toujours, et les outils de renouvellement continuent d'essayer. Procéder dans cet ordre, sans révoquer sauf si une clé est compromise :

  1. Retirer le vhost : haproxyctl vhost remove <nom> (il régénère la configuration de HAProxy, qui ne référence donc plus le certificat).
  2. Mettre le .pem de côté : déplacer /data/haproxy/certs/<domaine>.pem hors du répertoire (par exemple dans un dossier d'archive daté, en 0600) plutôt que le supprimer.
  3. Arrêter le renouvellement : acme.sh --remove -d <domaine> (ajouter --ecc pour un certificat EC). Pour un certificat géré par certbot, certbot delete --cert-name <domaine>.
  4. Recharger HAProxy et vérifier que la page ne liste plus le domaine.

Oublier l'étape 3 est le piège classique : le domaine disparaît du frontal et revient au prochain passage de renouvellement.


Voir aussi

SecuBox | FR | DE | 中文 | v3.0.0-alpha.12


Projet

Soutenir


🔴 BOOT — Démarrer

🟢 ROOT — Configuration

🟣 MIND — Modules

🔵 MESH — Référence

🟠 WALL — Matériel

🤖 Workflow Agents


Liens

Clone this wiki locally