From 66d50cd2cf02a7ae9ac219f3e89764aba3f51b8b Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Thu, 11 Jun 2026 10:10:22 +0200 Subject: [PATCH] =?UTF-8?q?[DOCS]=20TLS-DB=20nis2:=20CUTOVER=20FATTO=20202?= =?UTF-8?q?6-06-11=20=E2=80=94=20app=20su=20container=20nis2-db=20(TCP+TLS?= =?UTF-8?q?v1.3,=20REQUIRE=20SSL)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Anomalia socket chiusa. App ora client TCP+TLS verso il proprio container nis2-db (DB_HOST=172.21.0.4), dati migrati (19 utenti), Ssl_version=TLSv1.3, REQUIRE SSL enforced (plain rifiutato 1045), verificato dal worker fpm reale (login Fattori 200, ARIA RAG ok). Runbook + context aggiornati. Guard anti-outage gia' in 4548cc6. Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/CONTEXT_LAST_SESSION.md | 13 +++++++++++++ docs/TLS_DB_PREEQUIP_NIS2.md | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/docs/CONTEXT_LAST_SESSION.md b/docs/CONTEXT_LAST_SESSION.md index 20ddb39..fa8370b 100644 --- a/docs/CONTEXT_LAST_SESSION.md +++ b/docs/CONTEXT_LAST_SESSION.md @@ -2,6 +2,19 @@ > Il 2026-05-29 ci sono state DUE sessioni: **pomeriggio** e **mattina** (TRPG). Il 2026-05-30 sessione lunga: gap competitivi P1/P2/P3 + connettori + review multi-agente + fix. +## 2026-06-11 — ✅ CUTOVER TLS-DB FATTO: NIS2 su container nis2-db (TCP+TLS), anomalia socket chiusa + +Dopo 3 outage notturni (TLS-su-socket), risolto definitivo con lo standard "come TRPG": +- VIGILE ha **migrato** host→container `nis2-db` (copia esatta 60 tab/19 utenti/max_id 392; host intatto, backup `/root/backups/nis2-migration-20260611/`). +- Io: `.env` **`DB_HOST=172.21.0.4`** (IP del container — fpm NON risolve `db`) + reload fpm (`docker exec nis2-app kill -USR2 1`) → **TCP verde** (login reale 401, container, 19 utenti). Poi `touch application/config/.db_ssl_on` (+ CA container già giusta) + reload → **`Ssl_version=TLSv1.3`** dal worker reale, login Fattori 200, ARIA RAG ok → **TLS verde**. +- VIGILE: `ALTER USER 'nis2_user'@'%' REQUIRE SSL` sul container → **post-check verde**: plain no-SSL **rifiutato (1045)**, app 200/ok. +- **Guard anti-outage** in `Database::sslOptions()` (commit `4548cc6`): salta SSL su connessione socket → riaccendere il flag su socket non può più causare outage. +- Tecnica usata senza SSH continuo: edit file bind-mounted (`.env` posseduto da uid 1000, `application/config/`, `public/`) + diag serviti da `public/` via HTTPS + reload fpm via SSH host. **Regola d'oro confermata: verificare SEMPRE dal worker fpm reale (login), MAI da CLI/`docker exec`/api-status** (CLI dava falsi positivi: DB_HOST e source-IP divergono). +- File d'ambiente (`.env`, `.db_ssl_on`, `db-ca.pem`) sono **gitignored** (corretto). Memoria `project_db_topology` aggiornata (ora: container via TCP+TLS). +- ⏭️ Residuo VIGILE: decommission host (`DROP nis2_user@localhost`) quando confermata stabilità → NIS2 self-contained come TRPG. + +--- + ## 2026-06-10 — TLS-DB pre-equip (VIGILE) + SCOPERTA split DB host/container > Task da CLAUDE.md (cima, "VIGILE 2026-06-10"): pre-equip PHP-PDO/CA per TLS-in-transito DB, gated default-OFF, **senza** enforce (l'`ALTER USER` è di VIGILE). Eseguito con precisione chirurgica + 2 agenti background di review. diff --git a/docs/TLS_DB_PREEQUIP_NIS2.md b/docs/TLS_DB_PREEQUIP_NIS2.md index 4467731..304c05b 100644 --- a/docs/TLS_DB_PREEQUIP_NIS2.md +++ b/docs/TLS_DB_PREEQUIP_NIS2.md @@ -1,5 +1,10 @@ # TLS-in-transito DB — pre-equip NIS2 (VIGILE 2026-06-10) +> # ✅✅ FATTO — CUTOVER COMPLETATO 2026-06-11 +> NIS2 è ora **client TCP+TLS verso il suo container `nis2-db`** (come TRPG). Sequenza eseguita e verificata **dal worker fpm reale**: +> 1. VIGILE ha **migrato** i dati host → container (copia esatta: 60 tab/19 utenti/max_id 392). 2. Switch `.env` **`DB_HOST=172.21.0.4`** (IP del container — NON `db`) + reload fpm. 3. **`Ssl_version=TLSv1.3`** (cipher TLS_AES_256_GCM_SHA384) + flag `.db_ssl_on` + CA container. 4. `ALTER USER 'nis2_user'@'%' REQUIRE SSL` sul container → **plain rifiutato (1045)**, app verde (login Fattori 200, ARIA RAG ok, api-status db:ok). 5. Guard anti-outage nel codice (commit `4548cc6`). +> **Anomalia socket chiusa.** Resta (a cura VIGILE, quando confermata stabilità): decommission host (`DROP nis2_user@localhost` + archivio backup `/root/backups/nis2-migration-20260611/`). La parte qui sotto (decisione C / socket) è **storica/superata**. + > ✅ **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'è.**