[DOCS] TLS-DB nis2: decisione C (defer) — escluso da enforce, socket clear; path pulito futuro (bind 172.21 + validare da fpm)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-10 23:58:51 +02:00
co-authored by Claude Opus 4.8
parent d98d52ed58
commit dc05e316a0
+2
View File
@@ -1,5 +1,7 @@
# TLS-in-transito DB — pre-equip NIS2 (VIGILE 2026-06-10)
> ✅ **DECISIONE 2026-06-10: opzione C (DEFER).** NIS2 resta 🔵 **escluso dall'enforce** / connessione **socket clear** (verde). Motivo: l'app fpm usa il MySQL host via **UNIX socket** = IPC locale, **nessun transito di rete da cifrare** → il TLS non aggiunge sicurezza reale. Scartate: A (`GRANT @'135.181.149.254'` = largo come `@'%'`, smell su prodotto di compliance) e B (fix NAT per-uid, rischioso). **Path pulito futuro** (finestra pianificata, con restart MySQL): aggiungere `172.21.0.1` al `bind_address` host + grant `nis2_user@'172.21.%'` + switch app `DB_HOST=172.21.0.1` + attivare il pre-equip — **validando dal path fpm (www-data), NON da CLI** (il source-bind-su-gateway per-uid può ripresentarsi anche su 172.21). Pre-equip codice già committato e pronto (`4d89b1e`).
> 🔴 **AGGIORNAMENTO 2026-06-10 (post-test reale): nis2 NON è TLS-izzabile così com'è.**
> Verificato in contesto **php-fpm reale**: l'app HTTP connette al **MySQL HOST `dfm-dev` (8.0.46) via UNIX SOCKET** (`DB_HOST=localhost` fallback, env non propagato ai worker www-data). **TLS-in-transito NON si applica a un socket** (IPC locale, nessun transito) e **forzarlo rompe la connessione**: attivando il flag `.db_ssl_on` → `PDOException [2002] Cannot connect to MySQL using SSL` → **outage live** (api-status `database:error`, login 500). Ripristinato con `rm .db_ssl_on` + `kill -USR2 1`.
> **Conseguenze**: (1) il pre-equip codice (`Database::sslOptions()`) resta corretto e **inerte default-OFF**, ma **il flag NON va attivato** per nis2; (2) per fare TLS l'app andrebbe prima spostata su **TCP** verso un endpoint di rete (e poi CA+enforce su QUEL server); (3) l'enforce `REQUIRE SSL` fatto sul **container nis2-db** è **irrilevante** per l'HTTP (che usa il socket host) → **nis2 va ESCLUSO dall'enforce** finché resta su socket. (4) ⚠️ Il `docker exec nis2-app php` mostra il path CLI (`db`→container), **non** quello dell'app — non usarlo per validare.