Áú»¢¶Ä²©

This is a translation of the original English documentation page. Help us make it better.

17. Chiffrement

Aper?u

Áú»¢¶Ä²© prend en charge les communications chiffr¨¦es entre les composants Áú»¢¶Ä²© ¨¤ l'aide du protocole Transport Layer Security (TLS) v.1.2 et 1.3 (selon la biblioth¨¨que de chiffrement). Le chiffrement bas¨¦ sur des certificats et bas¨¦ sur des cl¨¦s pr¨¦-partag¨¦es est pris en charge.

Le chiffrement peut ¨ºtre configur¨¦ pour les connexions :

Le chiffrement est facultatif et configurable pour les composants individuels :

  • Certains proxies et agents peuvent ¨ºtre configur¨¦s pour utiliser le chiffrement bas¨¦ sur certificat avec le serveur, tandis que d'autres peuvent utiliser le chiffrement bas¨¦ sur une cl¨¦ pr¨¦-partag¨¦e, et d'autres encore continuent avec des communications non chiffr¨¦es (comme auparavant)
  • Le serveur (proxy) peut utiliser diff¨¦rentes configurations de cryptage pour diff¨¦rents h?tes

Les d¨¦mons Áú»¢¶Ä²© utilisent un port d'¨¦coute pour les connexions entrantes chiffr¨¦es et non chiffr¨¦es. L'ajout d'un cryptage ne n¨¦cessite pas l'ouverture de nouveaux ports sur les pare-feux.

Limitations

  • Les cl¨¦s priv¨¦es sont stock¨¦es en texte brut dans des fichiers lisibles par les composants Áú»¢¶Ä²© lors du d¨¦marrage
  • Les cl¨¦s pr¨¦-partag¨¦es sont saisies dans l'interface Áú»¢¶Ä²© et stock¨¦es dans la base de donn¨¦es Áú»¢¶Ä²© en texte brut
  • Le cryptage int¨¦gr¨¦ ne prot¨¨ge pas les communications :
    • Entre le serveur Web ex¨¦cutant l'interface Áú»¢¶Ä²© et le navigateur Web de l'utilisateur
    • Entre l'interface Áú»¢¶Ä²© et le serveur Áú»¢¶Ä²©
  • Actuellement, chaque connexion crypt¨¦e s'ouvre avec une v¨¦rification TLS compl¨¨te, aucune mise en cache de session et les tickets ne sont impl¨¦ment¨¦s
  • L'ajout du chiffrement augmente le temps de v¨¦rification et d'action des ¨¦l¨¦ments, en fonction de la latence du r¨¦seau :
    • Par exemple, si le d¨¦lai de paquet est de 100 ms, l'ouverture d'une connexion TCP et l'envoi d'une requ¨ºte non chiffr¨¦e prend environ 200 ms. Avec le cryptage, environ 1000 ms sont ajout¨¦es pour ¨¦tablir la connexion TLS ;
    • Il peut ¨ºtre n¨¦cessaire d'augmenter les timeouts, sinon certains ¨¦l¨¦ments et actions ex¨¦cutant des scripts distants sur des agents peuvent fonctionner avec des connexions non chiffr¨¦es, mais ¨¦chouer avec un d¨¦lai d'expiration chiffr¨¦.
  • Le chiffrement n'est pas pris en charge par la d¨¦couverte du r¨¦seau. Les v¨¦rifications de l'agent Áú»¢¶Ä²© effectu¨¦es par la d¨¦couverte du r¨¦seau ne seront pas chiffr¨¦es et si l'agent Áú»¢¶Ä²© est configur¨¦ pour rejeter les connexions non chiffr¨¦es, ces v¨¦rifications ¨¦choueront.

Compiler Áú»¢¶Ä²© avec prise en charge du chiffrement

Pour prendre en charge le chiffrement, Áú»¢¶Ä²© doit ¨ºtre compil¨¦ et li¨¦ ¨¤ l'une des biblioth¨¨ques de chiffrement prises en charge :

  • GnuTLS - ¨¤ partir de la version 3.1.18
  • OpenSSL - versions 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x. Notez que 3.0.x est pris en charge depuis Áú»¢¶Ä²© 6.0.4.
  • LibreSSL - test¨¦ avec les versions 2.7.4, 2.8.2 :
    • LibreSSL 2.6.x n'est pas pris en charge
    • LibreSSL est pris en charge en tant que remplacement compatible d'OpenSSL ; les nouvelles fonctions API tls_*() sp¨¦cifiques ¨¤ LibreSSL ne sont pas utilis¨¦es. Les composants Áú»¢¶Ä²© compil¨¦s avec LibreSSL ne pourront pas utiliser PSK, seuls les certificats peuvent ¨ºtre utilis¨¦s.

La biblioth¨¨que est s¨¦lectionn¨¦e en sp¨¦cifiant l'option respective pour "configurer" le script :

  • --with-gnutls[=DIR]
  • --with-openssl[=DIR] (¨¦galement utilis¨¦ pour LibreSSL)

Par exemple, pour configurer les sources du serveur et de l'agent avec OpenSSL, vous pouvez utiliser quelque chose comme :

./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl

Diff¨¦rents composants Áú»¢¶Ä²© peuvent ¨ºtre compil¨¦s avec diff¨¦rentes biblioth¨¨ques de chiffrement (par exemple, un serveur avec OpenSSL, un agent avec GnuTLS).

Si vous pr¨¦voyez d'utiliser des cl¨¦s pr¨¦-partag¨¦es (PSK), envisagez d'utiliser les biblioth¨¨ques GnuTLS ou OpenSSL 1.1.0 (ou plus r¨¦cent) dans les composants Áú»¢¶Ä²© utilisant des PSK. Les biblioth¨¨ques GnuTLS et OpenSSL 1.1.0 prennent en charge les suites de chiffrement PSK avec . Les anciennes versions de la biblioth¨¨que OpenSSL (1.0.1, 1.0.2c) prennent ¨¦galement en charge les PSK, mais les suites de chiffrement PSK disponibles ne fournissent pas Perfect Forward Secrecy.

Gestion du chiffrement des connexions

Les connexions dans Áú»¢¶Ä²© peuvent utiliser :

Deux param¨¨tres importants sont utilis¨¦s pour sp¨¦cifier le chiffrement entre les composants Áú»¢¶Ä²© :

  • TLSConnect - sp¨¦cifie le chiffrement ¨¤ utiliser pour les connexions sortantes (non chiffr¨¦, PSK ou certificat)
  • TLSAccept - sp¨¦cifie quels types de connexions sont autoris¨¦s pour les connexions entrantes (non crypt¨¦es, PSK ou certificat). Une ou plusieurs valeurs peuvent ¨ºtre sp¨¦cifi¨¦es.

TLSConnect est utilis¨¦ dans les fichiers de configuration pour le proxy Áú»¢¶Ä²© (en mode actif, sp¨¦cifie uniquement les connexions au serveur) et l'agent Áú»¢¶Ä²© (pour les v¨¦rifications actives). Dans l'interface Áú»¢¶Ä²©, l'¨¦quivalent TLSConnect est le champ Connexions ¨¤ l'h?te dans l'onglet Configuration ¡ú H?tes ¡ú <un h?te> ¡ú Chiffrement et le champ Connexions au proxy dans l'onglet Administration ¡ú Proxies ¡ú <un proxy> ¡ú Chiffrement . Si le type de chiffrement configur¨¦ pour la connexion ¨¦choue, aucun autre type de chiffrement ne sera essay¨¦.

TLSAccept est utilis¨¦ dans les fichiers de configuration pour le proxy Áú»¢¶Ä²© (en mode passif, sp¨¦cifie uniquement les connexions depuis le serveur) et l'agent Áú»¢¶Ä²© (pour les v¨¦rifications passives). Dans l'interface Áú»¢¶Ä²©, l'¨¦quivalent TLSAccept est le champ Connexions depuis l'h?te dans l'onglet Configuration ¡ú H?tes ¡ú <un h?te> ¡ú Chiffrement et le champ Connexions depuis le proxy dans l'onglet Administration ¡ú Proxies ¡ú <un proxy> ¡ú Chiffrement .

Normalement, vous ne configurez qu'un seul type de chiffrement pour les chiffrements entrants. Mais vous voudrez peut-¨ºtre changer le type de cryptage, par exemple de non crypt¨¦ ¨¤ bas¨¦ sur certificat avec un temps d'arr¨ºt minimum et une possibilit¨¦ de restauration. Pour y parvenir :

  • ¶Ù¨¦´Ú¾±²Ô¾±²õ²õ±ð³ú TLSAccept=unencrypted,cert dans le fichier de configuration de l'agent et red¨¦marrez l'agent Áú»¢¶Ä²©
  • Testez la connexion avec zabbix_get ¨¤ l'agent ¨¤ l'aide du certificat. Si cela fonctionne, vous pouvez reconfigurer le chiffrement pour cet agent dans l'interface Áú»¢¶Ä²© dans l'onglet Configuration ¡ú H?tes ¡ú <un h?te> ¡ú Chiffrement en d¨¦finissant Connexions ¨¤ l'h?te sur "Certificat".
  • Lorsque le cache de configuration du serveur est mis ¨¤ jour (et que la configuration du proxy est mise ¨¤ jour si l'h?te est surveill¨¦ par proxy), les connexions ¨¤ cet agent seront crypt¨¦es
  • Si tout fonctionne comme pr¨¦vu, vous pouvez d¨¦finir TLSAccept=cert dans le fichier de configuration de l'agent et red¨¦marrer l'agent Áú»¢¶Ä²©. D¨¦sormais, l'agent n'acceptera que les connexions bas¨¦es sur des certificats chiffr¨¦s. Les connexions non chiffr¨¦es et bas¨¦es sur PSK seront rejet¨¦es.

De la m¨ºme mani¨¨re, cela fonctionne sur le serveur et le proxy. Si, dans l'interface Áú»¢¶Ä²©, dans la configuration de l'h?te, Connexions depuis l'h?te est d¨¦fini sur "Certificat", seules les connexions chiffr¨¦es bas¨¦es sur un certificat seront accept¨¦es par l'agent (v¨¦rifications actives) et zabbix_sender (¨¦l¨¦ments de trappeur).

Vous configurerez tr¨¨s probablement les connexions entrantes et sortantes pour utiliser le m¨ºme type de cryptage ou aucun cryptage du tout. Mais techniquement, il est possible de le configurer de mani¨¨re asym¨¦trique, par ex. chiffrement bas¨¦ sur certificat pour les connexions entrantes et bas¨¦ sur PSK pour les connexions sortantes.

La configuration du chiffrement pour chaque h?te est affich¨¦e dans l'interface Áú»¢¶Ä²©, dans Configuration ¡ú H?tes dans la colonne Chiffrement de l'agent. Par exemple:

Exemple Connexions ¨¤ l'h?te Connexions autoris¨¦es depuis l'h?te Connexions rejet¨¦es depuis l'h?te
none_none.png Non crypt¨¦ Non crypt¨¦ Crypt¨¦, certificat et cryptage bas¨¦ sur PSK
cert_cert.png Crypt¨¦, bas¨¦ sur un certificat Crypt¨¦, bas¨¦ sur un certificat Non crypt¨¦ et crypt¨¦ par PSK
psk_psk.png Crypt¨¦, bas¨¦ sur PSK Crypt¨¦, bas¨¦ sur PSK Crypt¨¦ non crypt¨¦ et crypt¨¦ sur certificat
psk_none_psk.png Crypt¨¦, bas¨¦ sur PSK Non crypt¨¦ et crypt¨¦ PSK Crypt¨¦ bas¨¦ sur certificat
cert_all.png Crypt¨¦, bas¨¦ sur certificat Non crypt¨¦, PSK ou crypt¨¦ bas¨¦ sur certificat -

Les connexions ne sont pas chiffr¨¦es par d¨¦faut. Le chiffrement doit ¨ºtre configur¨¦ pour chaque h?te et proxy individuellement.

zabbix_get et zabbix_sender avec chiffrement

Voir les man-pages zabbix_get et zabbix_sender pour une utilisation avec chiffrement.

Suite de chiffrement

Les suites de chiffrement par d¨¦faut sont configur¨¦es en interne lors du d¨¦marrage de Áú»¢¶Ä²© et, avant Áú»¢¶Ä²© 4.0.19, 4.4.7, ne sont pas configurables par l'utilisateur.

Depuis Áú»¢¶Ä²© 4.0.19, 4.4.7, les suites de chiffrement configur¨¦es par l'utilisateur sont ¨¦galement prises en charge pour GnuTLS et OpenSSL. Les utilisateurs peuvent configurer des suites de chiffrement en fonction de leurs politiques de s¨¦curit¨¦. L'utilisation de cette fonctionnalit¨¦ est facultative (les suites de chiffrement par d¨¦faut int¨¦gr¨¦es fonctionnent toujours).

Pour les biblioth¨¨ques de chiffrement compil¨¦es avec les param¨¨tres par d¨¦faut, les r¨¨gles int¨¦gr¨¦es de Áú»¢¶Ä²© entra?nent g¨¦n¨¦ralement les suites de chiffrement suivantes (dans l'ordre de priorit¨¦ la plus ¨¦lev¨¦e ¨¤ la plus faible) :

Librairie Suite de chiffrement Certificat Suite de chiffrement PSK
GnuTLS 3.1.18 TLS_ECDHE_RSA_AES_128_GCM_SHA256
TLS_ECDHE_RSA_AES_128_CBC_SHA256
TLS_ECDHE_RSA_AES_128_CBC_SHA1
TLS_RSA_AES_128_GCM_SHA256
TLS_RSA_AES_128_CBC_SHA256
TLS_RSA_AES_128_CBC_SHA1
TLS_ECDHE_PSK_AES_128_CBC_SHA256
TLS_ECDHE_PSK_AES_128_CBC_SHA1
TLS_PSK_AES_128_GCM_SHA256
TLS_PSK_AES_128_CBC_SHA256
TLS_PSK_AES_128_CBC_SHA1
OpenSSL 1.0.2c ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-SHA256
AES128-SHA
PSK-AES128-CBC-SHA
OpenSSL 1.1.0 ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-CCM8
AES128-CCM
AES128-SHA256
AES128-SHA
ECDHE-PSK-AES128-CBC-SHA256
ECDHE-PSK-AES128-CBC-SHA
PSK-AES128-GCM-SHA256
PSK-AES128-CCM8
PSK-AES128-CCM
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA
OpenSSL 1.1.1d TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
ECDHE-RSA-AES128-GCM-SHA256
ECDHE-RSA-AES128-SHA256
ECDHE-RSA-AES128-SHA
AES128-GCM-SHA256
AES128-CCM8
AES128-CCM
AES128-SHA256
AES128-SHA
TLS_CHACHA20_POLY1305_SHA256
TLS_AES_128_GCM_SHA256
ECDHE-PSK-AES128-CBC-SHA256
ECDHE-PSK-AES128-CBC-SHA
PSK-AES128-GCM-SHA256
PSK-AES128-CCM8
PSK-AES128-CCM
PSK-AES128-CBC-SHA256
PSK-AES128-CBC-SHA

Suites de chiffrement configur¨¦es par l'utilisateur

Les crit¨¨res de s¨¦lection de suite de chiffrement int¨¦gr¨¦s peuvent ¨ºtre remplac¨¦s par des suites de chiffrement configur¨¦es par l'utilisateur.

Les suites de chiffrement configur¨¦es par l'utilisateur sont une fonctionnalit¨¦ destin¨¦e aux utilisateurs avanc¨¦s qui comprennent les suites de chiffrement TLS, leur s¨¦curit¨¦ et les cons¨¦quences des erreurs, et qui sont ¨¤ l'aise avec le d¨¦pannage TLS.

Les crit¨¨res de s¨¦lection de la suite de chiffrement int¨¦gr¨¦e peuvent ¨ºtre remplac¨¦s ¨¤ l'aide des param¨¨tres suivants :

Remplacer la port¨¦e ±Ê²¹°ù²¹³¾¨¨³Ù°ù±ð Valeur Description
S¨¦lection de la suite de chiffrement pour les certificats TLSCipherCert13 OpenSSL 1.1.1 valides pour le protocole TLS 1.3 (leurs valeurs sont transmises ¨¤ la fonction OpenSSL SSL_CTX_set_ciphersuites()). Crit¨¨res de s¨¦lection de la suite de chiffrement bas¨¦e sur les certificats pour TLS 1.3

Uniquement OpenSSL 1.1.1 ou version ult¨¦rieure.
TLSCipherCert OpenSSL valides pour TLS 1.2 ou GnuTLS valides. Leurs valeurs sont respectivement transmises aux fonctions SSL_CTX_set_cipher_list() ou gnutls_priority_init(). Crit¨¨res de s¨¦lection des suites de chiffrement bas¨¦es sur des certificats pour TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
S¨¦lection de la suite de chiffrement pour PSK TLSCipherPSK13 OpenSSL 1.1.1 valides pour le protocole TLS 1.3 (leurs valeurs sont transmises ¨¤ la fonction OpenSSL SSL_CTX_set_ciphersuites()). Crit¨¨res de s¨¦lection des suites de chiffrement bas¨¦es sur PSK pour TLS 1.3

Uniquement OpenSSL 1.1.1 ou plus r¨¦cent.
TLSCipherPSK OpenSSL valides pour TLS 1.2 ou GnuTLS valides. Leurs valeurs sont respectivement transmises aux fonctions SSL_CTX_set_cipher_list() ou gnutls_priority_init(). Crit¨¨res de s¨¦lection de suite de chiffrement bas¨¦s sur PSK pour TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)
Liste combin¨¦e de suites de chiffrement pour certificat et PSK TLSCipherAll13 OpenSSL 1.1.1 valides pour le protocole TLS 1.3 (leurs valeurs sont transmises ¨¤ la fonction OpenSSL SSL_CTX_set_ciphersuites()). Crit¨¨res de s¨¦lection des suites de chiffrement pour TLS 1.3

Uniquement OpenSSL 1.1.1 ou plus r¨¦cent.
TLSCipherAll OpenSSL valides pour TLS 1.2 ou GnuTLS valides. Leurs valeurs sont respectivement transmises aux fonctions SSL_CTX_set_cipher_list() ou gnutls_priority_init(). Crit¨¨res de s¨¦lection Ciphersuite pour TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)

Pour remplacer la s¨¦lection de la suite de chiffrement dans les utilitaires zabbix_get et zabbix_sender - utilisez les param¨¨tres de ligne de commande :

  • --tls-cipher13
  • --tls-cipher

Les nouveaux param¨¨tres sont facultatifs. Si un param¨¨tre n'est pas sp¨¦cifi¨¦, la valeur par d¨¦faut interne est utilis¨¦e. Si un param¨¨tre est d¨¦fini, il ne peut pas ¨ºtre vide.

Si la d¨¦finition d'une valeur TLSCipher* dans la biblioth¨¨que de chiffrement ¨¦choue, le serveur, le proxy ou l'agent ne d¨¦marre pas et une erreur est consign¨¦e.

Il est important de comprendre quand chaque param¨¨tre est applicable.

Connexions sortantes

Le cas le plus simple est celui des connexions sortantes?:

  • Pour les connexions sortantes avec certificat - utilisez TLSCipherCert13 ou TLSCipherCert
  • Pour les connexions sortantes avec PSK - utilisez TLSCipherPSK13 et TLSCipherPSK
  • Dans le cas des utilitaires zabbix_get et zabbix_sender, les param¨¨tres de ligne de commande --tls-cipher13 et --tls-cipher peuvent ¨ºtre utilis¨¦s (le chiffrement est sp¨¦cifi¨¦ sans ambigu?t¨¦ avec un param¨¨tre --tls-connect)
Connexions entrantes

C'est un peu plus compliqu¨¦ avec les connexions entrantes car les r¨¨gles sont sp¨¦cifiques aux composants et ¨¤ la configuration.

Pour l'agent Áú»¢¶Ä²© :

Configuration de la connexion de l'agent Configuration du chiffrement
TLSConnect=cert TLSCipherCert, TLSCipherCert13
TLSConnect=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert TLSCipherCert, TLSCipherCert13
TLSAccept=psk TLSCipherPSK, TLSCipherPSK13
TLSAccept=cert,psk TLSCipherAll, TLSCipherAll13

Pour le serveur et le proxy Áú»¢¶Ä²© :

Configuration de la connexion Configuration du chiffrement
Connexions sortantes utilisant PSK TLSCipherPSK, TLSCipherPSK13
Connexions entrantes utilisant des certificats TLSCipherAll, TLSCipherAll13
Connexions entrantes utilisant PSK si le serveur n'a pas de certificat TLSCipherPSK, TLSCipherPSK13
Connexions entrantes utilisant PSK si le serveur a un certificat TLSCipherAll, TLSCipherAll13

Certains mod¨¨les peuvent ¨ºtre observ¨¦s dans les deux tableaux ci-dessus :

  • TLSCipherAll et TLSCipherAll13 ne peuvent ¨ºtre sp¨¦cifi¨¦s que si une liste combin¨¦e de suites de chiffrement et bas¨¦es sur PSK est utilis¨¦e. Il existe deux cas o¨´ cela se produit : serveur (proxy) avec un certificat configur¨¦ (les suites de chiffrement PSK sont toujours configur¨¦es sur le serveur, proxy si la biblioth¨¨que de chiffrement prend en charge PSK), agent configur¨¦ pour accepter les connexions entrantes bas¨¦es sur certificat et PSK
  • dans les autres cas TLSCipherCert* et/ou TLSCipherPSK* sont suffisants

Les tableaux suivants montrent les valeurs par d¨¦faut int¨¦gr¨¦es de TLSCipher*. Ils pourraient ¨ºtre un bon point de d¨¦part pour vos propres valeurs personnalis¨¦es.

±Ê²¹°ù²¹³¾¨¨³Ù°ù±ð GnuTLS 3.6.12
TLSCipherCert NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
TLSCipherPSK NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL
TLSCipherAll NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
±Ê²¹°ù²¹³¾¨¨³Ù°ù±ð OpenSSL 1.1.1d 1
TLSCipherCert13
TLSCipherCert EECDH+aRSA+AES128:RSA+aRSA+AES128
TLSCipherPSK13 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
TLSCipherPSK kECDHEPSK+AES128:kPSK+AES128
TLSCipherAll13
TLSCipherAll EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128

1 Les valeurs par d¨¦faut sont diff¨¦rentes pour les anciennes versions d'OpenSSL (1.0.1, 1.0.2, 1.1.0), pour LibreSSL et si OpenSSL est compil¨¦ sans le support PSK.

** Exemples de suites de chiffrement configur¨¦es par l'utilisateur **

Voir ci-dessous les exemples suivants de suites de chiffrement configur¨¦es par l'utilisateur :

Tester les cha?nes de chiffrement et autoriser uniquement les suites de chiffrement PFS

Pour voir quelles suites de chiffrement ont ¨¦t¨¦ s¨¦lectionn¨¦es, vous devez d¨¦finir 'DebugLevel=4' dans le fichier de configuration, ou utiliser l'option -vv pour zabbix_sender.

Certaines exp¨¦rimentations avec les param¨¨tres TLSCipher * peuvent ¨ºtre n¨¦cessaires avant d'obtenir les suites de chiffrement souhait¨¦es. Il n'est pas pratique de red¨¦marrer plusieurs fois le serveur, le proxy ou l'agent Áú»¢¶Ä²© juste pour modifier les param¨¨tres TLSCipher *. Des options plus pratiques utilisent zabbix_sender ou la commande openssl. Montrons les deux.

1. Utilisation de zabbix_sender.

Cr¨¦ons un fichier de configuration de test, par exemple /home/zabbix/test.conf, avec la syntaxe d'un fichier zabbix_agentd.conf :

  Hostname=nonexisting
         ServerActive=nonexisting
         
         TLSConnect=cert
         TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/agent.crt
         TLSKeyFile=/home/zabbix/agent.key
         TLSPSKIdentity=nonexisting
         TLSPSKFile=/home/zabbix/agent.psk

Vous avez besoin de certificats CA et d'agent valides et de PSK pour cet exemple. Ajustez les chemins et les noms des certificats et des fichiers PSK pour votre environnement.

Si vous n'utilisez pas de certificats, mais uniquement PSK, vous pouvez cr¨¦er un fichier de test plus simple :

  Hostname=nonexisting
         ServerActive=nonexisting
         
         TLSConnect=psk
         TLSPSKIdentity=nonexisting
         TLSPSKFile=/home/zabbix/agentd.psk

Les suites de chiffrement s¨¦lectionn¨¦es peuvent ¨ºtre vues en ex¨¦cutant zabbix_sender (exemple compil¨¦ avec OpenSSL 1.1.d) :

  $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
         zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA

Ici, vous voyez les suites de chiffrement s¨¦lectionn¨¦es par d¨¦faut. Ces valeurs par d¨¦faut sont choisies pour assurer l'interop¨¦rabilit¨¦ avec les agents Áú»¢¶Ä²© ex¨¦cut¨¦s sur des syst¨¨mes avec des versions OpenSSL plus anciennes (¨¤ partir de 1.0.1).

Avec les syst¨¨mes plus r¨¦cents, vous pouvez choisir de renforcer la s¨¦curit¨¦ en n'autorisant que quelques suites de chiffrement, par exemple uniquement les suites de chiffrement avec PFS (Perfect Forward Secrecy). Essayons de n'autoriser que les suites de chiffrement avec PFS en utilisant les param¨¨tres TLSCipher*.

Le r¨¦sultat ne sera pas interop¨¦rable avec les syst¨¨mes utilisant OpenSSL 1.0.1 et 1.0.2, si PSK est utilis¨¦. Le chiffrement bas¨¦ sur des certificats devrait fonctionner.

Ajoutez deux lignes au fichier de configuration test.conf :

  TLSCipherCert=EECDH+aRSA+AES128
         TLSCipherPSK=kECDHEPSK+AES128

et testez ¨¤ nouveau :

  $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites            
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA        
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA        
         zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA        

Les listes "certificate ciphersuites" et "PSK ciphersuites" ont chang¨¦ - elles sont plus courtes qu'auparavant, ne contenant que les suites de chiffrement TLS 1.3 et les suites de chiffrement TLS 1.2 ECDHE-* comme pr¨¦vu.

2. TLSCipherAll et TLSCipherAll13 ne peuvent pas ¨ºtre test¨¦s avec zabbix_sender ; ils n'affectent pas la valeur "certificate and PSK ciphersuites" indiqu¨¦e dans l'exemple ci-dessus. Pour modifier TLSCipherAll et TLSCipherAll13, vous devez l'exp¨¦rimenter avec l'agent, le proxy ou le serveur.

Ainsi, pour autoriser uniquement les suites de chiffrement PFS, vous devrez peut-¨ºtre ajouter jusqu'¨¤ trois param¨¨tres

  TLSCipherCert=EECDH+aRSA+AES128
         TLSCipherPSK=kECDHEPSK+AES128
         TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128

dans zabbix_agentd.conf, zabbix_proxy.conf et zabbix_server.conf si chacun d'eux a un certificat configur¨¦ et que l'agent a ¨¦galement PSK.

Si votre environnement Áú»¢¶Ä²© utilise uniquement un chiffrement bas¨¦ sur PSK et aucun certificat, alors un seul :

  TLSCipherPSK=kECDHEPSK+AES128

Maintenant que vous comprenez comment cela fonctionne, vous pouvez tester la s¨¦lection de la suite de chiffrement m¨ºme en dehors de Áú»¢¶Ä²©, avec la commande openssl. Testons les trois valeurs de param¨¨tre TLSCipher* :

  $ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
         $ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
         $ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
         TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
         

Vous pouvez pr¨¦f¨¦rer openssl ciphers avec l'option -V pour une sortie plus d¨¦taill¨¦e :

  $ openssl ciphers -V EECDH+aRSA+AES128:kECDHEPSK+AES128
                   0x13,0x02 - TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
                   0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
                   0x13,0x01 - TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
                   0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
                   0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
                   0xC0,0x13 - ECDHE-RSA-AES128-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
                   0xC0,0x37 - ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA256
                   0xC0,0x35 - ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA1

De m¨ºme, vous pouvez tester les cha?nes de priorit¨¦ pour GnuTLS :

  $ gnutls-cli -l --priority=NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
         Cipher suites for NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
         TLS_ECDHE_RSA_AES_128_GCM_SHA256                        0xc0, 0x2f      TLS1.2
         TLS_ECDHE_RSA_AES_128_CBC_SHA256                        0xc0, 0x27      TLS1.2
         
         Protocols: VERS-TLS1.2
         Ciphers: AES-128-GCM, AES-128-CBC
         MACs: AEAD, SHA256
         Key Exchange Algorithms: ECDHE-RSA
         Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
         PK-signatures: SIGN-RSA-SHA256, SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-RSAE-SHA256, SIGN-ECDSA-SHA256, SIGN-ECDSA-SECP256R1-SHA256, SIGN-EdDSA-Ed25519, SIGN-RSA-SHA384, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-RSAE-SHA384, SIGN-ECDSA-SHA384, SIGN-ECDSA-SECP384R1-SHA384, SIGN-EdDSA-Ed448, SIGN-RSA-SHA512, SIGN-RSA-PSS-SHA512, SIGN-RSA-PSS-RSAE-SHA512, SIGN-ECDSA-SHA512, SIGN-ECDSA-SECP521R1-SHA512, SIGN-RSA-SHA1, SIGN-ECDSA-SHA1
Passer de AES128 ¨¤ AES256

Áú»¢¶Ä²© utilise AES128 par d¨¦faut pour les donn¨¦es. Supposons que vous utilisiez des certificats et que vous souhaitiez passer ¨¤ AES256, sur OpenSSL 1.1.1.

Ceci peut ¨ºtre r¨¦alis¨¦ en ajoutant les param¨¨tres respectifs suivants dans zabbix_server.conf :

  TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/server.crt
         TLSKeyFile=/home/zabbix/server.key
         TLSCipherCert13=TLS_AES_256_GCM_SHA384
         TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
         TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
         TLSCipherPSK=kECDHEPSK+AES256:-SHA1
         TLSCipherAll13=TLS_AES_256_GCM_SHA384
         TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384

Bien que seules les suites de chiffrement li¨¦es aux certificats soient utilis¨¦es, les param¨¨tres TLSCipherPSK* sont ¨¦galement d¨¦finis pour ¨¦viter leurs valeurs par d¨¦faut qui incluent des chiffrements moins s¨¦curis¨¦s pour une interop¨¦rabilit¨¦ plus large. Les suites de chiffrement PSK ne peuvent pas ¨ºtre compl¨¨tement d¨¦sactiv¨¦es sur le serveur/proxy.

Et dans zabbix_agentd.conf:

  TLSConnect=cert
         TLSAccept=cert
         TLSCAFile=/home/zabbix/ca.crt
         TLSCertFile=/home/zabbix/agent.crt
         TLSKeyFile=/home/zabbix/agent.key
         TLSCipherCert13=TLS_AES_256_GCM_SHA384
         TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384