[FIX] TLS-DB nis2: guard anti-outage — salta SSL su connessione via UNIX socket

Lezione 2026-06-10 (3 outage): forzare SSL su una connessione via socket (DB_HOST
'localhost'/vuoto/path) da' PDOException [2002] "Cannot connect to MySQL using SSL"
su ogni richiesta -> app giu'. sslOptions() ora ritorna [] (resta in chiaro + log) se
DB_HOST indica un socket, anche col flag/env attivo. SSL si applica solo alle
connessioni TCP. Il socket e' IPC locale: nessun transito di rete da cifrare.
Cosi' riaccendere .db_ssl_on mentre l'app e' su socket NON puo' piu' causare outage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-11 06:45:19 +02:00
co-authored by Claude Opus 4.8
parent dc05e316a0
commit 4548cc6ff2
+12
View File
@@ -85,6 +85,18 @@ class Database
return [];
}
// GUARD anti-outage (lezione 2026-06-10, 3 outage): il TLS NON si applica a
// una connessione via UNIX socket (DB_HOST 'localhost', vuoto o path '/...').
// Forzarlo da' PDOException [2002] "Cannot connect to MySQL using SSL" su OGNI
// richiesta. Il socket e' IPC locale (nessun transito di rete da cifrare):
// restiamo in chiaro + log, anche se il flag/env e' attivo. SSL si applica solo
// alle connessioni TCP (es. 127.0.0.1 o un host di rete).
$host = defined('DB_HOST') ? (string) DB_HOST : '';
if ($host === '' || strcasecmp($host, 'localhost') === 0 || $host[0] === '/') {
error_log('[Database] DB_SSL attivo ma connessione via UNIX socket (DB_HOST=' . $host . '): SSL non applicabile, resto in chiaro (socket = IPC locale, nessun transito da cifrare).');
return [];
}
$ca = Env::get('DB_SSL_CA', __DIR__ . '/db-ca.pem');
if (!$ca || !is_file($ca) || !is_readable($ca)) {
error_log('[Database] DB_SSL attivo ma CA non trovato/leggibile (' . $ca . '): connessione NON cifrata (serve il CA file).');