Chiffrement à l'aide de clés prépartagées
Vue d'ensemble
Chaque clé pré-partagée (PSK) dans Zabbix est en réalité une paire composée de :
- une chaîne d'identité PSK non secrète,
- une valeur de chaîne PSK secrète.
La chaîne d'identité PSK est une chaîne UTF-8 non vide. Par exemple, "PSK ID 001 Zabbix agentd". Il s'agit d'un nom unique par lequel cette PSK spécifique est désignée par les composants Zabbix. N'insérez pas d'informations sensibles dans la chaîne d'identité PSK - elle est transmise sur le réseau sans chiffrement.
La valeur PSK est une chaîne de chiffres hexadécimaux difficile à deviner, par exemple, "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Limites de taille
Il existe des limites de taille pour l'identité PSK et la valeur PSK dans Zabbix, et dans certains cas une bibliothèque cryptographique peut avoir une limite inférieure :
| Component | PSK identity max size | PSK value min size | PSK value max size |
|---|---|---|---|
| Zabbix | 128 caractères UTF-8 | 128 bits (PSK de 16 octets, saisi sous forme de 32 chiffres hexadécimaux) | 2048 bits (PSK de 256 octets, saisi sous forme de 512 chiffres hexadécimaux) |
| GnuTLS | 128 octets (peut inclure des caractères UTF-8) | - | 2048 bits (PSK de 256 octets, saisi sous forme de 512 chiffres hexadécimaux) |
| OpenSSL 1.0.x, 1.1.0 | 127 octets (peut inclure des caractères UTF-8) | - | 2048 bits (PSK de 256 octets, saisi sous forme de 512 chiffres hexadécimaux) |
| OpenSSL 1.1.1 | 127 octets (peut inclure des caractères UTF-8) | - | 512 bits (PSK de 64 octets, saisi sous forme de 128 chiffres hexadécimaux) |
| OpenSSL 1.1.1a and later | 127 octets (peut inclure des caractères UTF-8) | - | 2048 bits (PSK de 256 octets, saisi sous forme de 512 chiffres hexadécimaux) |
L'interface Zabbix permet de configurer une chaîne d'identité PSK d'une longueur maximale de 128 caractères et un PSK d'une longueur maximale de 2048 bits, quelle que soit la bibliothèque cryptographique utilisée.
Si certains composants Zabbix prennent en charge des limites inférieures, il incombe à l'utilisateur de configurer l'identité PSK et la valeur PSK avec une longueur autorisée pour ces composants.
Le dépassement des limites de longueur entraîne des échecs de communication entre les composants Zabbix.
Avant que le serveur Zabbix ne se connecte à l'agent à l'aide de PSK, le serveur recherche l'identité PSK et la valeur PSK configurées pour cet agent dans la base de données (en réalité dans le cache de configuration). Lors de la réception d'une connexion, l'agent utilise l'identité PSK et la valeur PSK de son fichier de configuration. Si les deux parties ont la même chaîne d'identité PSK et la même valeur PSK, la connexion peut réussir.
Chaque identité PSK doit être associée à une seule valeur. Il incombe à l'utilisateur de s'assurer qu'il n'existe pas deux PSK avec la même chaîne d'identité mais des valeurs différentes. Le non-respect de cette consigne peut entraîner des erreurs imprévisibles ou des interruptions de communication entre les composants Zabbix utilisant des PSK avec cette chaîne d'identité PSK.
Génération d'une PSK
Par exemple, une PSK de 256 bits (32 octets) peut être générée à l'aide des commandes suivantes :
- avec OpenSSL :
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
- avec 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
Notez que « psktool » ci-dessus génère un fichier de base de données avec une identité PSK et la PSK associée. Zabbix attend uniquement une PSK dans le fichier PSK, donc la chaîne d'identité et le deux-points (':') doivent être supprimés du fichier.
Configuration de PSK pour la communication serveur-agent (exemple)
Sur l'hôte de l'agent, écrivez la valeur PSK dans un fichier, par exemple
/home/zabbix/zabbix_agentd.psk. Le fichier doit contenir le PSK dans la première
chaîne de texte, par exemple :
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
Définissez les droits d'accès au fichier PSK - il doit être lisible uniquement par l'utilisateur Zabbix.
Modifiez les paramètres TLS dans le fichier de configuration de l'agent Zabbix (zabbix_agentd.conf). Par exemple, définissez :
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
L'agent se connectera au serveur (vérifications actives) et acceptera depuis le serveur
et zabbix_get uniquement les connexions utilisant PSK. L'identité PSK sera "PSK
001".
Redémarrez l'agent. Vous pouvez maintenant tester la connexion à l'aide de zabbix_get,
par exemple :
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
(Pour minimiser le temps d'arrêt, voir comment changer le type de connexion dans la gestion du chiffrement des connexions).
Configurez le chiffrement PSK pour cet agent dans l'interface Zabbix :
- Allez dans : Collecte de données > Hôtes.
- Sélectionnez l'hôte et cliquez sur l'onglet Chiffrement.
Exemple :

Tous les champs de saisie obligatoires sont marqués d'un astérisque rouge.
Lorsque le cache de configuration est synchronisé avec la base de données, les nouvelles connexions utiliseront PSK. Vérifiez les fichiers journaux du serveur et de l'agent pour détecter d'éventuels messages d'erreur.
Configuration de PSK pour la communication serveur - proxy actif (exemple)
Sur le proxy, écrivez la valeur PSK dans un fichier, par exemple,
/home/zabbix/zabbix_proxy.psk. Le fichier doit contenir PSK dans la première
chaîne de texte, par exemple :
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Définissez les droits d'accès au fichier PSK - il doit être lisible uniquement par l'utilisateur Zabbix.
Modifiez les paramètres TLS dans le fichier de configuration du proxy Zabbix (zabbix_proxy.conf). Par exemple, définissez :
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
Le proxy se connectera au serveur en utilisant PSK. L'identité PSK sera "PSK 002".
(Pour minimiser le temps d'indisponibilité, voir comment changer le type de connexion dans Gestion du chiffrement des connexions).
Configurez PSK pour ce proxy dans l'interface Zabbix. Allez dans
Administration > Proxies, sélectionnez le proxy, puis ouvrez l'onglet Encryption. Dans
"Connections from proxy", cochez PSK. Collez dans le champ "PSK identity"
"PSK 002" et
"e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" dans le
champ "PSK". Cliquez sur "Update".
Redémarrez le proxy. Il commencera à utiliser des connexions chiffrées basées sur PSK vers le serveur. Vérifiez les fichiers journaux du serveur et du proxy pour détecter d'éventuels messages d'erreur.
Pour un proxy passif, la procédure est très similaire.
La seule différence - définissez TLSAccept=psk dans le fichier de configuration du proxy Zabbix et définissez Connections to proxy dans l'interface Zabbix sur PSK.
Résolution des problèmes PSK
Le PSK contient un nombre impair de chiffres hexadécimaux
Le proxy ou l'agent ne démarre pas, message dans le journal du proxy ou de l'agent :
PSK invalide dans le fichier "/home/zabbix/zabbix_proxy.psk"
Chaîne d'identité PSK de plus de 128 octets transmise à GnuTLS
Dans le journal du côté client TLS :
gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.
Dans le journal du côté serveur TLS.
gnutls_handshake() failed: -90 The SRP username supplied is illegal.
Valeur PSK trop longue utilisée avec OpenSSL 1.1.1
Dans le journal du côté de la connexion :
...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"'
Dans le journal du côté de l'acceptation :
...Message from 123.123.123.123 is missing header. Message ignored.
Ce problème survient généralement lors de la mise à niveau d'OpenSSL de 1.0.x ou 1.1.0 vers 1.1.1, et si la valeur PSK est supérieure à 512 bits (PSK de 64 octets, saisi sous forme de 128 chiffres hexadécimaux).
Voir aussi : Limites de taille des valeurs