Zabbix peut utiliser des certificats RSA au format PEM, signés par une autorité de certification publique ou interne (CA). La vérification du certificat est effectuée sur une CA de certificat pré-configurée. Les listes de révocation de certificats (CRL) peuvent éventuellement être utilisées. Chaque composant Zabbix ne peut avoir qu'un seul certificat configuré.
Pour plus d'informations sur la configuration et l'utilisation de l'autorité de certification interne, la génération de demandes de certificats et leur signature, la révocation de certificats, vous trouverez en ligne en grand nombre de modes d'emploi, par exemple, Didacticiel OpenSSL PKI v1.1.
Examinez attentivement et testez vos extensions de certificat - voir Limitations sur les extensions de certificat X.509 v3.
Paramètre | Obligatoire | Description |
---|---|---|
TLSCAFile | oui | Chemin d'accès complet d'un fichier contenant les certificats de niveau supérieur de l'autorité de certification pour la vérification des certificats homologues. En cas de chaîne de certificats avec plusieurs membres, ils doivent être ordonnés : certificats de CA de niveau inférieur en premier, suivi par des certificats de niveau supérieur. Les certificats de plusieurs CA peuvent être inclus dans un seul fichier. |
TLSCRLFile | non | Chemin d'accès complet d'un fichier contenant des listes de révocation de certificats. Voir Listes de révocation de certificats (CRL). |
TLSCertFile | oui | Chemin d'accès complet d'un fichier contenant un certificat (chaîne de certificats). En cas de chaîne de certificats avec plusieurs membres, ils doivent être ordonnés : certificat de serveur, de proxy ou d'agent en premier, suivi des certificats de niveau inférieur puis des certificats de l'autorité de certification de niveau supérieur. |
TLSKeyFile | oui | Chemin d'accès complet d'un fichier contenant une clé privée. Définissez les droits d’accès à ce fichier - il ne doit être lisible que par l’utilisateur de Zabbix. |
TLSServerCertIssuer | non | Émetteur de certificat de serveur autorisé. |
TLSServerCertSubject | non | Détenteur du certificat de serveur autorisé. |
After setting up the necessary certificates, configure Zabbix components to use certificate-based encryption.
Below are detailed steps for configuring:
1. Afin de vérifier les certificats homologues, le serveur Zabbix doit avoir accès aux fichiers avec leurs certificats d'autorité de certification racine auto-signés de niveau supérieur. Par exemple, si nous souhaitons des certificats de deux autorités de certification racine indépendantes, nous pouvons placer leurs certificats dans un fichier /home/zabbix/zabbix_ca_file
ainsi :
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
...
-----BEGIN CERTIFICATE-----
MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
....
9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
....
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE
....
-----BEGIN CERTIFICATE-----
MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
...
vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
-----END CERTIFICATE-----
2. Placer la chaîne de certificats du serveur Zabbix dans un fichier, par exemple, /home/zabbix/zabbix_server.crt
:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment
X509v3 Basic Constraints:
CA:FALSE
...
-----BEGIN CERTIFICATE-----
MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
...
h02u1GHiy46GI+xfR3LsPwFKlkTaaLaL/6aaoQ==
-----END CERTIFICATE-----
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 2 (0x2)
Signature Algorithm: sha1WithRSAEncryption
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
...
X509v3 extensions:
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
...
-----BEGIN CERTIFICATE-----
MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB+MRMwEQYKCZImiZPyLGQB
...
dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
-----END CERTIFICATE-----
Ici, le premier est le certificat du serveur Zabbix, suivi du certificat intermédiaire de l'autorité de certification.
3. Placer la clé privée du serveur Zabbix dans un fichier, par exemple, /home/zabbix/zabbix_server.key
:
-----BEGIN PRIVATE KEY-----
MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
...
IJLkhbybBYEf47MLhffWa7XvZTY=
-----END PRIVATE KEY-----
4. Modifier les paramètres TLS dans le fichier de configuration du serveur Zabbix comme suit :
TLSCAFile=/home/zabbix/zabbix_ca_file
TLSCertFile=/home/zabbix/zabbix_server.crt
TLSKeyFile=/home/zabbix/zabbix_server.key
1. Préparez les fichiers avec les certificats de l'autorité de certification de niveau supérieur, le certificat proxy (chaîne) et la clé privée, comme décrit dans Configuration du certificat sur le serveur Zabbix. Modifiez les paramètres TLSCAFile
, TLSCertFile
, TLSKeyFile
dans la configuration du proxy en conséquence.
2. Pour un proxy actif modifier le paramètre TLSConnect
:
Pour un proxy passif modifier le paramètre TLSAccept
:
3. Vous disposez maintenant d'une configuration de proxy minimale basée sur un certificat. Vous pouvez si vous le souhaitez améliorer la sécurité du proxy en définissant les paramètres TLSServerCertIssuer
et TLSServerCertSubject
(voir Restriction de l'émetteur et du détenteur autorisés).
4. Dans le fichier final de configuration du proxy, les paramètres TLS peuvent ressembler à ceci :
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_proxy.crt
TLSKeyFile=/home/zabbix/zabbix_proxy.key
5. Configurer le chiffrement pour ce proxy dans l'interface Zabbix :
Dans les exemples ci-dessous, les champs Délivré par et Sujet sont remplis - voir dans Restriction de l'émetteur et du sujet autorisés pourquoi et comment utiliser ces champs.
Pour un proxy actif
Pour un proxy passif
1. Préparer les fichiers avec les certificats de l'autorité de certification de niveau supérieur, le certificat agent (chaîne) et la clé privée, comme décrit dans Configuration du certificat sur le serveur Zabbix. Modifiez les paramètres TLSCAFile
, TLSCertFile
, TLSKeyFile
dans la configuration de l'agent en conséquence.
2. Pour les surveillances actives, modifier le paramètre TLSConnect
:
Pour les surveillances passives, modifier le paramètreTLSAccept
:
3. Vous disposez maintenant d'une configuration minimale agent basée sur certificat. Vous pouvez si vous le souhaitez améliorer la sécurité des agents en définissant les paramètres TLSServerCertIssuer
et TLSServerCertSubject
. (voir Restriction de l'émetteur et du sujet autorisés).
4. Dans le fichier final de configuration de l'agent, les paramètres TLS peuvent ressembler à ceci :
TLSConnect=cert
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSCertFile=/home/zabbix/zabbix_agentd.crt
TLSKeyFile=/home/zabbix/zabbix_agentd.key
(L'exemple suppose que l'hôte est surveillé via un proxy, d'où le CN "subject" du certificat positionné sur Zabbix proxy.)
5. Configurer le chiffrement pour cet agent dans l'interface Zabbix :
Dans l'exemple ci-dessous, les champs Délivré par et Sujet sont remplis - voir dans Restriction de l'émetteur et du sujet autorisés pourquoi et comment utiliser ces champs.
1. Prepare files with the top-level CA certificates, the Zabbix web service certificate/certificate chain, and the private key as described in the Zabbix server section. Then, edit the TLSCAFile
, TLSCertFile
, and TLSKeyFile
parameters in the Zabbix web service configuration file accordingly.
2. Edit an additional TLS parameter in the Zabbix web service configuration file: TLSAccept=cert
TLS parameters in the final web service configuration file may look as follows:
TLSAccept=cert
TLSCAFile=/home/zabbix/zabbix_ca_file
TLSCertFile=/home/zabbix/zabbix_web_service.crt
TLSKeyFile=/home/zabbix/zabbix_web_service.key
3. Configure Zabbix server to connect to the TLS-configured Zabbix web service by editing the WebServiceURL
parameter in the Zabbix server configuration file:
Lorsque deux composants (par exemple serveur Zabbix et agent) établissent une connexion TLS, ils vérifient chacun les certificats de l'autre. Si un certificat homologue signé par une autorité de certification de confiance (avec un certificat de niveau supérieur préconfiguré dans «TLSCAFile»), est valide, n'a pas expiré et passe d'autres vérifications, alors la communication peut continuer. L'émetteur et le sujet du certificat ne sont pas vérifiés dans ce cas le plus simple.
Il existe un risque : toute personne possédant un certificat valide peut usurper l'identité de quelqu'un d'autre (par exemple, un certificat d'hôte peut être utilisé pour emprunter l'identité d'un serveur). Cela peut être acceptable dans les petits environnements où les certificats sont signés par une autorité de certification interne dédiée et où le risque de personnification est faible.
Si votre autorité de certification de niveau supérieur est utilisée pour émettre d'autres certificats qui ne doivent pas être acceptés par Zabbix ou si vous souhaitez réduire le risque d'usurpation d'identité, vous pouvez restreindre les certificats autorisés en spécifiant leurs chaînes d'émetteur et de sujet.
Par exemple, vous pouvez écrire dans le fichier de configuration du proxy Zabbix :
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
Avec ces paramètres, un proxy actif ne communiquera pas avec le serveur Zabbix avec une chaîne émettrice ou une chaîne sujet différente dans le certificat, un proxy passif n'acceptera pas les demandes de ce serveur.
Quelques notes sur la correspondance de chaîne émetteur ou sujet :
L'ordre des champs dans les chaînes Délivrer par et Sujet et le formatage sont importants ! Zabbix suit les recommandations de la RFC 4514 et utilise l'ordre "inverse" des champs.
L'ordre inverse peut être illustré par l'exemple suivant :
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
Notez qu'il commence par le niveau bas (CN), passe au niveau intermédiaire (OU, O) et termine par les champs de niveau supérieur (DC).
OpenSSL affiche par défaut les champs Issuer et Subject du certificat dans l'ordre "normal", en fonction des options supplémentaires utilisées :
$ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Signing CA
subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy
$ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
Certificate:
...
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy
Ici, les chaînes Issuer et Subject commencent par le niveau supérieur (DC) et se terminent par un champ de bas niveau (CN), les espaces et les séparateurs de champs dépendent des options utilisées. Aucune de ces valeurs ne correspondra dans les champs Délivré et Sujet de Zabbix !
Pour obtenir des chaînes Issuer et Subject correctes utilisables dans Zabbix, exécutez OpenSSL avec les options spéciales
-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname
:
$ openssl x509 -noout -issuer -subject \
-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname \
-in /home/zabbix/zabbix_proxy.crt
issuer= CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
subject= CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
Maintenant, les champs de chaînes sont dans l'ordre inverse, les champs sont séparés par des virgules, peuvent être utilisés dans les fichiers de configuration et l'interface Zabbix.
Issuer
and Subject
stringsThe rules for matching Issuer
and Subject
strings are as follows:
Issuer
and Subject
strings are checked independently. Both are optional.*
) or regular expressions are not supported.\
' backslash, U+005C):
"
' (U+0022), '+
' (U+002B), ',
' (U+002C), ';
' (U+003B), '<
' (U+003C), '>
' (U+003E), '\\
' (U+005C);#
', U+0023);For example, if Issuer
and Subject
organization (O
) strings contain trailing spaces and the Subject
organizational unit (OU
) string contains double quotes, these characters must be escaped:
TLSServerCertIssuer=CN=Signing CA,OU=Development head,O=\ Example SIA\ ,DC=example,DC=com
TLSServerCertSubject=CN=Zabbix server,OU=Development group \"5\",O=\ Example SIA\ ,DC=example,DC=com
Zabbix follows the recommendations of RFC 4514, which specifies a "reverse" order for these fields, starting with the lowest-level fields (CN
), proceeding to the mid-level fields (OU
, O
), and concluding with the highest-level fields (DC
).
TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
In contrast, OpenSSL by default displays the Issuer
and Subject
strings in top-level to low-level order. In the following example, Issuer
and Subject
fields start with the top-level (DC
) and end with the low-level (CN
) field. The formatting with spaces and field separators also varies based on the options used, and thus will not match the format required by Zabbix.
$ openssl x509 -noout -in /home/zabbix/zabbix_proxy.crt -issuer -subject
issuer= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Signing CA
subject= /DC=com/DC=zabbix/O=Zabbix SIA/OU=Development group/CN=Zabbix proxy
$ openssl x509 -noout -text -in /home/zabbix/zabbix_proxy.crt
Certificate:
...
Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
...
Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix proxy
To format Issuer and Subject strings correctly for Zabbix, invoke OpenSSL with the following options:
$ openssl x509 -noout -issuer -subject \
-nameopt esc_2253,esc_ctrl,utf8,dump_nostr,dump_unknown,dump_der,sep_comma_plus,dn_rev,sname\
-in /home/zabbix/zabbix_proxy.crt
The output will then be in reverse order, comma-separated, and usable in Zabbix configuration files and frontend:
issuer= CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
subject= CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
Si un certificat est compromis, l'autorité de certification peut la révoquer en l'incluant dans la liste de révocation de certificats. Les listes de révocation de certificats peuvent être configurées dans le fichier de configuration du serveur, du proxy et de l'agent à l'aide du paramètre TLSCRLFile
. Par exemple :
où zabbix_crl_file
peut contenir des listes de révocation de certificats de plusieurs autorités de certification et ressembler à :
-----BEGIN X509 CRL-----
MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
...
treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
-----END X509 CRL-----
-----BEGIN X509 CRL-----
MIIB+TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
...
CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
-----END X509 CRL-----
Le fichier CRL est chargé uniquement au démarrage de Zabbix. La mise à jour de la liste de révocation de certificats nécessite un redémarrage.
Si le composant Zabbix est compilé avec OpenSSL et que des listes de révocation de certificats sont utilisées, chaque autorité de certification de niveau supérieur et intermédiaire des chaînes de certificats doit avoir une liste de révocation de certificats (elle peut être vide) dans TLSCRLFile
.