Crittografia tramite chiavi pre-condivise
Panoramica
Ogni chiave precondivisa (PSK) in Zabbix è in realtà una coppia di:
- stringa di identità PSK non segreta,
- valore della stringa PSK segreta.
La stringa di identità PSK è una stringa UTF-8 non vuota. Ad esempio, "PSK ID 001 Zabbix agentd". È un nome univoco con cui questa specifica PSK viene indicata dai componenti di Zabbix. Non inserire informazioni sensibili nella stringa di identità PSK: viene trasmessa sulla rete senza crittografia.
Il valore PSK è una stringa di cifre esadecimali difficile da indovinare, ad esempio, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Limiti di dimensione
In Zabbix sono previsti limiti di dimensione per l'identità e il valore PSK; in alcuni casi, una libreria crittografica può avere un limite inferiore:
| Componente | Dimensione massima dell'identità PSK | Dimensione minima del valore PSK | Dimensione massima del valore PSK |
|---|---|---|---|
| Zabbix | 128 caratteri UTF-8 | 128 bit (PSK da 16 byte, inserita come 32 cifre esadecimali) | 2048 bit (PSK da 256 byte, inserita come 512 cifre esadecimali) |
| GnuTLS | 128 byte (può includere caratteri UTF-8) | - | 2048 bit (PSK da 256 byte, inserita come 512 cifre esadecimali) |
| OpenSSL 1.0.x, 1.1.0 | 127 byte (può includere caratteri UTF-8) | - | 2048 bit (PSK da 256 byte, inserita come 512 cifre esadecimali) |
| OpenSSL 1.1.1 | 127 byte (può includere caratteri UTF-8) | - | 512 bit (PSK da 64 byte, inserita come 128 cifre esadecimali) |
| OpenSSL 1.1.1a e versioni successive | 127 byte (può includere caratteri UTF-8) | - | 2048 bit (PSK da 256 byte, inserita come 512 cifre esadecimali) |
Il frontend Zabbix consente di configurare una stringa di identità PSK lunga fino a 128 caratteri e una PSK lunga 2048 bit, indipendentemente dalle librerie crittografiche utilizzate.
Se alcuni componenti Zabbix supportano limiti inferiori, è responsabilità dell'utente configurare l'identità e il valore PSK con una lunghezza consentita da tali componenti.
Il superamento dei limiti di lunghezza causa errori di comunicazione tra i componenti Zabbix.
Prima che il server Zabbix si connetta all'agent utilizzando una PSK, il server cerca nel database l'identità e il valore PSK configurati per quell'agent (in realtà nella cache di configurazione). Quando riceve una connessione, l'agent utilizza l'identità e il valore PSK dal proprio file di configurazione. Se entrambe le parti hanno la stessa stringa di identità PSK e lo stesso valore PSK, la connessione può avere esito positivo.
Ogni identità PSK deve essere associata a un solo valore. È responsabilità dell'utente assicurarsi che non esistano due PSK con la stessa stringa di identità ma con valori diversi. La mancata osservanza di questa regola può causare errori imprevedibili o interruzioni della comunicazione tra i componenti Zabbix che utilizzano PSK con questa stringa di identità PSK.
Generazione di PSK
Ad esempio, una PSK a 256 bit (32 byte) può essere generata usando i seguenti comandi:
- con OpenSSL:
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
- con GnuTLS:
$ psktool -u psk_identity -p database.psk -s 32
Generating a random key for user 'psk_identity'
Key stored to database.psk
$ cat database.psk
psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb
Si noti che "psktool" sopra genera un file database con una PSK identity e la relativa PSK. Zabbix si aspetta solo una PSK nel file PSK, quindi la stringa dell'identity e i due punti (':') devono essere rimossi dal file.
Configurazione del PSK per la comunicazione server-agent (esempio)
Sul host dell'agent, scrivere il valore PSK in un file, ad esempio
/home/zabbix/zabbix_agentd.psk. Il file deve contenere il PSK nella prima
riga di testo, ad esempio:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
Impostare i diritti di accesso al file PSK: deve essere leggibile solo dall'utente Zabbix.
Modificare i parametri TLS nel file di configurazione dell'agent di Zabbix (zabbix_agentd.conf). Ad esempio, impostare:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
L'agent si connetterà al server (controlli attivi) e accetterà dal server
e da zabbix_get solo connessioni che utilizzano il PSK. L'identità PSK sarà "PSK
001".
Riavviare l'agent. Ora è possibile testare la connessione utilizzando zabbix_get,
ad esempio:
zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk
(Per ridurre al minimo i tempi di inattività, vedere come modificare il tipo di connessione in Gestione della crittografia delle connessioni).
Configurare la crittografia PSK per questo agent nel frontend di Zabbix:
- Andare a: Raccolta dati > Host.
- Selezionare l'host e fare clic sulla scheda Crittografia.
- Configurare i dettagli della crittografia PSK.
Esempio:

Tutti i campi di input obbligatori sono contrassegnati da un asterisco rosso.
Quando la cache di configurazione viene sincronizzata con il database, le nuove connessioni utilizzeranno il PSK. Controllare i file di log del server e dell'agent per individuare eventuali messaggi di errore.
Configurazione del PSK per la comunicazione tra server e proxy attivo (esempio)
Sul proxy, scrivere il valore PSK in un file, ad esempio
/home/zabbix/zabbix_proxy.psk. Il file deve contenere il PSK nella prima
riga di testo, ad esempio:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Impostare i diritti di accesso al file PSK: deve essere leggibile solo dall'utente Zabbix.
Modificare i parametri TLS nel file di configurazione del proxy di Zabbix (zabbix_proxy.conf). Ad esempio, impostare:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
Il proxy si connetterà al server utilizzando il PSK. L'identità PSK sarà "PSK 002".
(Per ridurre al minimo i tempi di inattività, vedere come modificare il tipo di connessione in Gestione della crittografia delle connessioni ).
Configurare il PSK per questo proxy nel frontend di Zabbix. Andare a
Administration > Proxies, selezionare il proxy e aprire la scheda
Encryption. In "Connections from proxy", selezionare PSK. Incollare
"PSK 002" nel campo "PSK identity" e
"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" nel
campo "PSK". Fare clic su "Update".
Riavviare il proxy. Inizierà a utilizzare connessioni crittografate basate su PSK verso il server. Controllare i file di log del server e del proxy per verificare la presenza di messaggi di errore.
Per un proxy passivo, la procedura è molto simile.
L'unica differenza consiste nell'impostare TLSAccept=psk nel file di configurazione del proxy di Zabbix e impostare Connections to proxy su PSK nel frontend di Zabbix.
Risoluzione dei problemi relativi a PSK
PSK contiene un numero dispari di cifre esadecimali
Il proxy o l'agent non si avvia, messaggio nel log del proxy o dell'agent:
PSK non valida nel file "/home/zabbix/zabbix_proxy.psk"
La stringa di identità PSK più lunga di 128 byte viene passata a GnuTLS
Nel log del lato client TLS:
gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.
Nel log del lato server TLS:
gnutls_handshake() failed: -90 The SRP username supplied is illegal.
Valore PSK troppo lungo usato con OpenSSL 1.1.1
Nel log del lato di connessione:
...OpenSSL library (version OpenSSL 1.1.1 11 Sep 2018) initialized
...
...In zbx_tls_connect(): psk_identity:"PSK 1"
...zbx_psk_client_cb() requested PSK identity "PSK 1"
...End of zbx_tls_connect():FAIL error:'SSL_connect() set result code to SSL_ERROR_SSL: file ssl\statem\extensions_clnt.c line 801: error:14212044:SSL routines:tls_construct_ctos_early_data:internal error: TLS write fatal alert "internal error"'
Nel log del lato di accettazione:
...Message from 123.123.123.123 is missing header. Message ignored.
Questo problema si verifica in genere durante l'aggiornamento di OpenSSL da 1.0.x o 1.1.0 a 1.1.1 e se il valore PSK è più lungo di 512 bit (PSK da 64 byte, inserito come 128 cifre esadecimali).
Vedi anche: Limiti di dimensione dei valori