HTTPS
Tout le trafic passe par Traefik (pch_traefik, ports 80 et 443), qui termine le TLS et route vers les conteneurs. Aucun certificat n'est géré à la main.
Certificats
- Fournis par Let's Encrypt (défi HTTP sur le port 80), demandés automatiquement pour chaque nom déclaré dans les étiquettes Traefik des conteneurs.
- Renouvelés automatiquement par Traefik ; stockés dans le volume
traefik_letsencrypt(acme.json). - Le port 80 redirige vers 443 pour tous les noms.
Ajouter un nom d'hôte : créer l'enregistrement DNS d'abord, puis ajouter la règle Host(...) dans les étiquettes du conteneur concerné et le recréer. Si Traefik a tenté la demande avant que le DNS existe, il sert son « TRAEFIK DEFAULT CERT » : docker restart pch_traefik relance la demande.
L'adresse de contact déclarée à Let's Encrypt (option acme.email dans le compose) est celle du responsable technique actuel ; à remplacer par une adresse de l'UCP-PCH lors du passage de relais.
Noms servis
| Serveur | Nom | Vers |
|---|---|---|
| Production | bemba.ucp-pch.org, ucp-pch.org | application (/api, /photos → backend) |
| Production | mariacare.ucp-pch.org, sig.ucp-pch.org | redirection vers bemba.ucp-pch.org |
| Production | docubemba.ucp-pch.org | documentation |
| Préproduction | sig-preprod.ucp-pch.org | application |
| Préproduction | kf/kc/ee.kobo.ucp-pch.org | KoboToolbox (Traefik → nginx de Kobo) |
| Préproduction | gitlab.ucp-pch.org | GitLab |
En-têtes de sécurité
Posés par Nginx du frontend (nginx/frontend.conf) :
| En-tête | Valeur |
|---|---|
Strict-Transport-Security | un an, sous-domaines inclus |
Content-Security-Policy | default-src 'self', scripts du domaine seulement, connect-src limité au domaine, à KoboToolbox et à Sentry |
X-Frame-Options | SAMEORIGIN |
X-Content-Type-Options | nosniff |
Referrer-Policy | strict-origin-when-cross-origin |
Les versions de Nginx et de PHP ne sont pas annoncées (server_tokens off, expose_php Off).
Vérifier
curl -sI https://bemba.ucp-pch.org/ | grep -iE "strict-transport|content-security|x-frame"
curl -sv https://bemba.ucp-pch.org/ -o /dev/null 2>&1 | grep -E "issuer|expire date"
Test externe : SSL Labs (https://www.ssllabs.com/ssltest/).
Contenu mixte
L'application est servie uniquement en HTTPS et appelle l'API par un chemin relatif (/api) : aucun appel en HTTP clair n'est possible depuis le navigateur. Un service tiers en http:// serait de toute façon bloqué par la CSP.