From dc05e316a0253777e3a5aa89cad2585f2652ea15 Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Wed, 10 Jun 2026 23:58:51 +0200 Subject: [PATCH] =?UTF-8?q?[DOCS]=20TLS-DB=20nis2:=20decisione=20C=20(defe?= =?UTF-8?q?r)=20=E2=80=94=20escluso=20da=20enforce,=20socket=20clear;=20pa?= =?UTF-8?q?th=20pulito=20futuro=20(bind=20172.21=20+=20validare=20da=20fpm?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/TLS_DB_PREEQUIP_NIS2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/TLS_DB_PREEQUIP_NIS2.md b/docs/TLS_DB_PREEQUIP_NIS2.md index 7d47e70..4467731 100644 --- a/docs/TLS_DB_PREEQUIP_NIS2.md +++ b/docs/TLS_DB_PREEQUIP_NIS2.md @@ -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.