[comment]: # ({22b96536-5407a56a})
# 5 Connexion sécurisée à la base de données

[comment]: # ({/22b96536-5407a56a})

[comment]: # ({b38f1bac-7cadd09e})
#### Aperçu

Cette section fournit les étapes de configuration de Zabbix et des exemples de configuration pour
des connexions TLS sécurisées entre :

|Base de données|Composants Zabbix|
|--------|-----------------|
|MySQL|Zabbix frontend, Zabbix server, Zabbix proxy|
|PostgreSQL|Zabbix frontend, Zabbix server, Zabbix proxy|

Pour configurer le chiffrement des connexions au sein du SGBD, consultez la
documentation officielle du fournisseur pour plus de détails :

-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/replication-encrypted-connections.html) :
    serveurs de base de données de réplication source et réplique.
-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/group-replication-security.html) :
    serveurs de base de données de réplication de groupe, etc.
-   [PostgreSQL](https://www.postgresql.org/docs/current/encryption-options.html)
    options de chiffrement.

Tous les exemples sont basés sur les versions GA de MySQL CE (8.0) et de PgSQL
(13) disponibles dans les dépôts officiels utilisant CentOS 8.

[comment]: # ({/b38f1bac-7cadd09e})

[comment]: # ({b7e9dcca-5af34b43})
##### Exigences

Les éléments suivants sont requis pour configurer le chiffrement :

-   Système d'exploitation pris en charge par le développeur avec OpenSSL >=1.1.X ou
    une alternative.

::: noteclassic
 Il est recommandé d'éviter les systèmes d'exploitation en fin de vie,
en particulier dans le cas de nouvelles installations 
:::

-   Moteur de base de données (SGBDR) installé et maintenu à partir du dépôt officiel
    fourni par le développeur. Les systèmes d'exploitation sont souvent livrés
    avec des versions obsolètes des logiciels de base de données pour lesquelles la prise en charge
    du chiffrement n'est pas implémentée, par exemple les systèmes basés sur RHEL 7 et
    PostgreSQL 9.2, MariaDB 5.5 sans prise en charge du chiffrement.

[comment]: # ({/b7e9dcca-5af34b43})

[comment]: # ({53676bc9-9801ac5b})
##### Terminologie

La définition de cette option impose l’utilisation d’une connexion TLS à la base de données depuis
le serveur/proxy Zabbix et le frontend vers la base de données :

-   `required` - se connecter en utilisant TLS comme mode de transport sans
    vérification d’identité
-   `verify_ca` - se connecter en utilisant TLS et vérifier le certificat
-   `verify_full` - se connecter en utilisant TLS, vérifier le certificat et vérifier que
    l’identité de la base de données (CN) spécifiée par DBHost correspond à son certificat

[comment]: # ({/53676bc9-9801ac5b})

[comment]: # ({84f30836-84f30836})
#### Configuration de Zabbix

[comment]: # ({/84f30836-84f30836})

[comment]: # ({9a1ac113-b1071a8a})
##### Interface vers la base de données

Une connexion sécurisée à la base de données peut être configurée pendant l'installation de l'interface :

-   Cochez la case *Database TLS encryption* à l'étape [Configure DB
    connection](/manual/installation/frontend#configure-db-connection)
    pour activer le chiffrement du transport.
-   Cochez la case *Verify database certificate* qui apparaît lorsque le champ
    *TLS encryption* est coché pour activer le chiffrement avec
    certificats.

::: noteclassic
 Pour MySQL, la case *Database TLS encryption* est désactivée si *Database host* est défini sur localhost, car une connexion utilisant un fichier socket (sous Unix) ou la mémoire partagée (sous Windows) ne peut pas être chiffrée.<br>
Pour PostgreSQL, la case *TLS encryption* est désactivée si la valeur
du champ *Database host* commence par une barre oblique ou si le champ est vide.

:::

Les paramètres suivants deviennent disponibles en mode de chiffrement TLS avec
certificats (si les deux cases sont cochées) :

|Paramètre|Description|
|--|--------|
|*Database TLS CA file*|Indiquez le chemin complet vers un fichier d'autorité de certification (CA) TLS valide.|
|*Database TLS key file*|Indiquez le chemin complet vers un fichier de clé TLS valide.|
|*Database TLS certificate file*|Indiquez le chemin complet vers un fichier de certificat TLS valide.|
|*Database host verification*|Cochez cette case pour activer la vérification de l'hôte.<br>Désactivé pour MySQL, car la bibliothèque PHP MySQL ne permet pas d'ignorer l'étape de validation du certificat du pair.|
|*Database TLS cipher list*|Indiquez une liste personnalisée de suites de chiffrement valides. Le format de la liste des suites de chiffrement doit être conforme à la norme OpenSSL.<br>Disponible uniquement pour MySQL.|

::: noteimportant
Les paramètres TLS doivent pointer vers des fichiers valides. S'ils pointent vers des fichiers inexistants ou non valides, cela entraînera une erreur d'autorisation.<br>
Si les fichiers de certificat sont accessibles en écriture, l'interface génère un avertissement dans le rapport [System information](/manual/web_interface/frontend_sections/reports/status_of_zabbix) indiquant que "TLS certificate files must be read-only." (affiché uniquement si l'utilisateur PHP est le propriétaire du certificat).

Les certificats protégés par mot de passe ne sont pas pris en charge. 
:::

[comment]: # ({/9a1ac113-b1071a8a})

[comment]: # ({18fae872-d4fd87a2})
##### Cas d'utilisation

Le frontend Zabbix utilise l'interface graphique (GUI) pour définir les options possibles : `required`,
`verify_ca`, `verify_full`. Spécifiez les options requises à l'étape
*Configure DB connections* de l'assistant d'installation. Ces options sont mappées vers le
fichier de configuration (zabbix.conf.php) de la manière suivante :

|Paramètres GUI|Fichier de configuration|Description|Résultat|
|----|----|----|----|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_transport.png)|...<br>// Used for TLS connection.<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$DB\['CA\_FILE'\] = '';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|Cochez *Database TLS encryption*<br>Laissez *Verify database certificate* décoché|Active le mode `required`.|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png)|...<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '';<br>$DB\['CERT\_FILE'\] = '';<br>$DB\['CA\_FILE'\] = '/etc/ssl/mysql/ca.pem';<br>$DB\['VERIFY\_HOST'\] = false;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|1\. Cochez *Database TLS encryption* et *Verify database certificate*<br>2. Indiquez le chemin vers *Database TLS CA file*|Active le mode `verify_ca`.|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png)|...<br>// Used for TLS connection with strictly defined Cipher list.<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '<cipher\_list>';<br>...<br><br>Or:<br><br>...<br>// Used for TLS connection without Cipher list defined - selected by MySQL server<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = '';<br>...|1\. Cochez *Database TLS encryption* et *Verify database certificate*<br>2. Indiquez le chemin vers *Database TLS key file*<br>3. Indiquez le chemin vers *Database TLS CA file*<br>4. Indiquez le chemin vers *Database TLS certificate file*<br>5. Indiquez *Database TLS cipher list* (facultatif)|Active le mode `verify_full` pour MySQL.|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_full2.png)|...<br>$DB\['ENCRYPTION'\] = true;<br>$DB\['KEY\_FILE'\] = '<key\_file\_path>';<br>$DB\['CERT\_FILE'\] = '<key\_file\_path>';<br>$DB\['CA\_FILE'\] = '<key\_file\_path>';<br>$DB\['VERIFY\_HOST'\] = true;<br>$DB\['CIPHER\_LIST'\] = ' ';<br>...<br>|1\. Cochez *Database TLS encryption* et *Verify database certificate*<br>2. Indiquez le chemin vers *Database TLS key file*<br>3. Indiquez le chemin vers *Database TLS CA file*<br>4. Indiquez le chemin vers *Database TLS certificate file*<br>5. Cochez *Database host verification*|Active le mode `verify_full` pour PostgreSQL.|

**Voir aussi :** [Exemples de configuration du chiffrement pour
MySQL](/manual/appendix/install/db_encrypt/mysql), [Exemples de configuration du chiffrement pour
PostgreSQL](/manual/appendix/install/db_encrypt/postgres).

[comment]: # ({/18fae872-d4fd87a2})

[comment]: # ({b504a368-9cfb91d1})
#### Configuration du serveur/proxy Zabbix

Les connexions sécurisées à la base de données peuvent être configurées avec les paramètres correspondants dans le fichier de configuration du [server](/manual/appendix/config/zabbix_server) Zabbix et/ou du [proxy](/manual/appendix/config/zabbix_proxy).

|Configuration|Résultat|
|--|--|
|Aucune|Connexion à la base de données sans chiffrement.|
|1\. Définir `DBTLSConnect=required`|Le serveur/proxy établit une connexion TLS à la base de données. Une connexion non chiffrée n'est pas autorisée.|
|1\. Définir `DBTLSConnect=verify_ca`<br>2. Définir `DBTLSCAFile` - spécifier le fichier de l'autorité de certification TLS|Le serveur/proxy établit une connexion TLS à la base de données après avoir vérifié le certificat de la base de données.|
|1\. Définir `DBTLSConnect=verify_full`<br>2. Définir `DBTLSCAFile` - spécifier le fichier de l'autorité de certification TLS|Le serveur/proxy établit une connexion TLS à la base de données après avoir vérifié le certificat de la base de données et l'identité de l'hôte de la base de données.|
|1\. Définir `DBTLSCAFile` - spécifier le fichier de l'autorité de certification TLS<br>2. Définir `DBTLSCertFile` - spécifier le fichier du certificat de clé publique du client<br>3. Définir `DBTLSKeyFile` - spécifier le fichier de clé privée du client|Le serveur/proxy fournit un certificat client lors de la connexion à la base de données.|
|1\. Définir `DBTLSCipher` - la liste des suites de chiffrement que le client autorise pour les connexions utilisant des protocoles TLS jusqu'à TLS 1.2<br><br>ou `DBTLSCipher13` - la liste des suites de chiffrement que le client autorise pour les connexions utilisant le protocole TLS 1.3|(MySQL) La connexion TLS est établie à l'aide d'une suite de chiffrement de la liste fournie.<br>(PostgreSQL) La définition de cette option sera considérée comme une erreur.|

[comment]: # ({/b504a368-9cfb91d1})
