From 95b192858b862a5d24ce14e95f16ccc9047f53b8 Mon Sep 17 00:00:00 2001 From: matthieu Date: Thu, 25 Jun 2026 22:05:03 +0200 Subject: [PATCH] docs : recap HTTPS/CA interne pour l'error tracking GlitchTip (INFRA #153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sous-section "Certificat HTTPS interne (CA auto-signée)" : contexte (CA interne, domaine non public, Let's Encrypt impossible), fix backend (CA bakée dans l'image), fix postes via GPO (+ caveat Firefox), procédure de renouvellement. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/README.md b/README.md index 833ea74..778f3d0 100644 --- a/README.md +++ b/README.md @@ -316,6 +316,72 @@ SENTRY_DSN=http://@glitchtip.interne:/ 3. Frontend : ajouter les secrets Gitea ci-dessus. 4. Tagger une version (`v*`) → la CI build l'image avec le DSN front baké → `deploy.sh`. +### Certificat HTTPS interne (CA auto-signée) + +GlitchTip est servi en **HTTPS** sur `https://logs.malio-dev.fr` (nginx devant), avec un certificat +**auto-signé** par une **CA interne** (« MALIO-DEV Local Root CA », cert serveur `*.malio-dev.fr`). +`malio-dev.fr` est un **domaine interne uniquement** (DNS local, pas de résolution publique). + +> **Pourquoi pas Let's Encrypt ?** Une CA publique doit valider le domaine via Internet (challenge +> HTTP ou DNS public). Comme `malio-dev.fr` n'existe qu'en interne, aucune validation n'est +> possible → on reste sur la CA interne, qu'il faut faire **approuver partout** où la connexion TLS +> est établie. Tant que la CA n'est pas approuvée, **rien ne remonte** : le backend logue +> « Message not sent » (SDK Sentry) et le navigateur affiche « connexion non sécurisée » (le front +> n'envoie rien). + +**Qui doit faire confiance à la CA ?** La connexion à `logs.malio-dev.fr` part de deux endroits +différents, donc deux fixes distincts : + +| Émetteur des erreurs | Qui établit le TLS | Où approuver la CA | +|---|---|---| +| Backend (Symfony) | le **container PHP** | CA bakée dans l'**image Docker** (ci-dessous) | +| Frontend (SPA) | le **navigateur du poste** | CA poussée sur les **postes via GPO** (ci-dessous) | + +#### Fix backend — CA bakée dans l'image + +Le certificat **public** de la root CA est committé dans le repo (`infra/prod/malio-dev-root-ca.crt`, +aucune clé privée) et installé dans le trust store du container au build (`infra/prod/Dockerfile`, +stage production — `ca-certificates` est déjà installé) : + +```dockerfile +COPY infra/prod/malio-dev-root-ca.crt /usr/local/share/ca-certificates/malio-dev-root-ca.crt +RUN update-ca-certificates +``` + +Le container fait alors confiance à tout `*.malio-dev.fr` interne et le SDK Sentry backend peut +envoyer. Vérification : + +```bash +curl --cacert infra/prod/malio-dev-root-ca.crt https://logs.malio-dev.fr/api/1/store/ # → HTTP 200 +``` + +#### Fix postes — CA poussée par GPO (Active Directory) + +Le front est une SPA : c'est le **navigateur de l'utilisateur** qui contacte `logs.malio-dev.fr`, +donc c'est le **poste** qui doit faire confiance à la CA (la CA de l'image ne sert qu'au backend). +Sur le domaine Active Directory, on pousse la CA **une seule fois via GPO** plutôt que poste par poste : + +1. Contrôleur de domaine → **Group Policy Management** → éditer une GPO. +2. `Configuration ordinateur → Stratégies → Paramètres Windows → Paramètres de sécurité → Stratégies + de clé publique → Autorités de certification racines de confiance`. +3. Clic droit → **Importer** → sélectionner `rootCA.crt` (« MALIO-DEV Local Root CA »). +4. Sur les postes : `gpupdate /force` (ou attendre le rafraîchissement), puis **redémarrer le navigateur**. + +- Chrome / Edge utilisent le magasin Windows → confiance automatique. +- ⚠️ **Firefox** a son propre magasin : activer `security.enterprise_roots.enabled = true` + (`about:config` ou via policy) pour qu'il lise le magasin Windows. + +> **Validation poste** : ouvrir `https://logs.malio-dev.fr` → cadenas vert sans avertissement = CA +> approuvée = le front peut envoyer. + +#### Renouvellement / changement de CA + +Si la CA interne change (rotation, expiration) : + +1. Remplacer `infra/prod/malio-dev-root-ca.crt` par le nouveau certificat public, commit + **rebuild + de l'image** (re-tag `v*`) pour le backend. +2. **Re-pousser** la nouvelle CA via GPO (étapes ci-dessus) pour les postes. + ## Licence Propriétaire — Tous droits réservés.