[comment]: # translation:outdated

[comment]: # ({4e1e4061-4e1e4061})
# 1 MySQL-coderingsconfiguratie
[commentaar]: # (tags: ssl)

[comment]: # ({/4e1e4061-4e1e4061})

[comment]: # ({f87c5964-f87c5964})
### Overzicht

Dit gedeelte biedt verschillende voorbeelden van coderingsconfiguraties voor:
CentOS 8.2 en MySQL 8.0.21 en kan worden gebruikt als een snelstartgids voor:
versleuteling van de verbinding met de database.

::: noteimportant
 Als
MySQL-host is ingesteld op localhost, encryptie-opties niet:
verkrijgbaar. In dit geval een verbinding tussen Zabbix frontend en de
database gebruikt een socketbestand (op Unix) of gedeeld geheugen (op Windows) en
kan niet worden versleuteld.
:::

::: noteclassic
 Lijst met codering
combinaties is niet beperkt tot degene die op deze pagina worden vermeld. Er zijn een
veel meer combinaties beschikbaar.
:::

[comment]: # ({/f87c5964-f87c5964})

[comment]: # ({30b5ee7b-30b5ee7b})
### Vereisten

Installeer MySQL-database vanaf de [officiële
repository](https://dev.mysql.com/downloads/repo/yum/).

Zie [MySQL
documentatie](https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/)
voor details over het gebruik van MySQL-repo.

MySQL-server is klaar om beveiligde verbindingen te accepteren met behulp van een zelfondertekend
certificaat.

Om te zien welke gebruikers een versleutelde verbinding gebruiken, voer je het volgende uit:
query (Prestatieschema moet AAN staan):

    mysql> SELECT sbt.variable_value AS tls_version, t2.variable_value AS-codering, processlist_user AS-gebruiker, processlist_host AS-host
            FROM performance_schema.status_by_thread AS sbt
            JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
            JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
            WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher'
            ORDER BY tls_version;

[comment]: # ({/30b5ee7b-30b5ee7b})

[comment]: # ({fda36821-fda36821})
### Vereiste modus

[comment]: # ({/fda36821-fda36821})

[comment]: # ({506c2709-9ebeae19})
#### MySQL-configuratie

Moderne versies van de database zijn standaard klaar voor de 'vereiste'
[versleutelingsmodus](/manual/appendix/install/db_encrypt#terminology). Een
server-side certificaat wordt aangemaakt na initiële installatie en start.

Maak gebruikers en rollen aan voor de belangrijkste componenten:

```sql
mysql> CREATE USER   
 'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<sterk_wachtwoord>',   
 'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<sterk_wachtwoord>'
 REQUIRE SSL   
 PASSWORD HISTORY 5; 

mysql> CREATE ROLE 'zbx_srv_role', 'zbx_web_role'; 

mysql> GRANT SELECT, UPDATE, DELETE, INSERT, CREATE, DROP, ALTER, INDEX, REFERENCES ON zabbix.* TO 'zbx_srv_role'; 
mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON zabbix.* TO 'zbx_web_role'; 

mysql> GRANT 'zbx_srv_role' TO 'zbx_srv'@'%'; 
mysql> GRANT 'zbx_web_role' TO 'zbx_web'@'%'; 

mysql> SET DEFAULT ROLE 'zbx_srv_role' TO 'zbx_srv'@'%'; 
mysql> SET DEFAULT ROLE 'zbx_web_role' TO 'zbx_web'@'%';
```

Merk op dat het X.509-protocol niet wordt gebruikt om de identiteit te controleren, maar de
gebruiker is geconfigureerd om alleen versleutelde verbindingen te gebruiken. Raadpleeg [MySQL
documentatie](https://dev.mysql.com/doc/refman/8.0/en/create-user.html#create-user-tls)
voor meer details over het configureren van gebruikers.

Voer het volgende uit om de verbinding te controleren (een socketverbinding kan niet worden gebruikt om beveiligde
verbindingen te testen):

```bash
mysql -u zbx_srv -p -h 10.211.55.9 --ssl-mode=REQUIRED
```

Controleer de huidige status en beschikbare ciphersuites:

```sql
mysql> status
--------------
mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL)

Connection id: 62
Current database:
Current user: zbx_srv@bfdb.local
SSL: Cipher in use is TLS_AES_256_GCM_SHA384


mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher_list'\G;
*************************** 1. row ***************************
Variable_name: Ssl_cipher_list
Value: TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA:CAMELLIA256-SHA:CAMELLIA128-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA
1 row in set (0.00 sec)

ERROR:
No query specified
```

[comment]: # ({/506c2709-9ebeae19})

[comment]: # ({68afdcc8-68afdcc8})
#### Frontend

Om alleen transportversleuteling in te schakelen voor verbindingen tussen Zabbix
frontend en de database:

-   Controleer *Database TLS-versleuteling*
-   Laat *Controleer databasecertificaat* niet aangevinkt

![](../../../../../assets/en/manual/appendix/install/encrypt_db_transport.png){width="600"}

[comment]: # ({/68afdcc8-68afdcc8})

[comment]: # ({99c0e65b-99c0e65b})
#### Server

Om alleen-transportversleuteling in te schakelen voor verbindingen tussen server en
de database, configureer */etc/zabbix/zabbix\_server.conf*:

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUserr=zbx_srv
    DBPassword=<strong_password>
    DBTLSConnect=required
    ...

[comment]: # ({/99c0e65b-99c0e65b})

[comment]: # ({fa9ec203-fa9ec203})
### CA-modus verifiëren

Kopieer de vereiste MySQL CA naar de Zabbix frontend-server, wijs de juiste toe
permissies om de webserver dit bestand te laten lezen.

::: noteclassic
 *Controleer of CA*-modus niet werkt op SLES 12 en RHEL 7 vanwege:
oudere MySQL-bibliotheken.
:::

[comment]: # ({/fa9ec203-fa9ec203})

[comment]: # ({f7df2e5a-9776435f})
#### Frontend

Om versleuteling met certificaatverificatie in te schakelen voor verbindingen tussen Zabbix frontend en de database:

- Vink *Database TLS-versleuteling* en *Controleer databasecertificaat* aan
- Geef het pad naar het Database TLS CA-bestand op

![](../../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png){width="600"}

Als alternatief kan dit worden ingesteld in */etc/zabbix/web/zabbix.conf.php*:

    ...
    $DB['ENCRYPTION'] = true;
    $DB['KEY_FILE'] = '';
    $DB['CERT_FILE'] = '';
    $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
    $DB['VERIFY_HOST'] = false;
    $DB['CIPHER_LIST'] = '';
    ...

Los problemen op door de gebruiker te controleren met behulp van de opdrachtregeltool om te controleren of er een verbinding mogelijk is voor de vereiste gebruiker:

    mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=REQUIRED --ssl-ca=/var/lib/mysql/ca.pem

[comment]: # ({/f7df2e5a-9776435f})

[comment]: # ({a7a54f92-a7a54f92})
#### Server

Versleuteling inschakelen met certificaatverificatie voor verbindingen
tussen Zabbix-server en de database, configure
*/etc/zabbix/zabbix\_server.conf*:

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=zbx_srv
    DBPassword=<strong_password>
    DBTLSConnect=verify_ca
    DBTLSCAFile=/etc/ssl/mysql/ca.pem
    ...

[comment]: # ({/a7a54f92-a7a54f92})

[comment]: # ({fa5d4760-fa5d4760})
### Controleer de volledige modus

[comment]: # ({/fa5d4760-fa5d4760})

[comment]: # ({abc6b361-22fb0ddd})
#### MySQL-configuratie

Stel de configuratieoptie van de MySQL CE-server (*/etc/my.cnf.d/server-tls.cnf*) in op:

    [mysqld]
    ...
    # in deze voorbeelden bevinden de sleutels zich in de MySQL CE-datadir-directory
    ssl_ca=ca.pem
    ssl_cert=server-cert.pem
    ssl_key=server-key.pem

    require_secure_transport=ON
    tls_version=TLSv1.3
    ...

Sleutels voor de MySQL CE-server en client (Zabbix frontend) moeten handmatig worden aangemaakt volgens de MySQL CE-documentatie: [SSL- en RSA-certificaten en sleutels maken met MySQL](https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-rsa-files-using-mysql.html) of [SSL-certificaten en sleutels maken met openssl](https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html)

::: noteimportant
 Het MySQL-servercertificaat moet het veld Common Name bevatten dat is ingesteld op de FQDN-naam, aangezien Zabbix frontend de DNS-naam zal gebruiken om met de database te communiceren, of het IP-adres van de databasehost.
:::

Maak een MySQL-gebruiker aan:

    mysql> CREATE USER
      'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',
      'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
      REQUIRE X509
      PASSWORD HISTORY 5;

Controleer of het mogelijk is om in te loggen met die gebruiker:

    mysql -u zbx_web -p -h 10.211.55.9 --ssl-mode=VERIFY_IDENTITY --ssl-ca=/var/lib/mysql/ca.pem --ssl-cert=/var/lib/mysql/client-cert.pem --ssl-key=/var/lib/mysql/client-key.pem

[comment]: # ({/abc6b361-22fb0ddd})

[comment]: # ({c64d3aec-2f3a5c57})
#### Frontend

Om versleuteling met volledige verificatie in te schakelen voor verbindingen tussen de Zabbix-frontend en de database:

-   Vink het vakje "Database TLS-encryptie" aan en "Verifieer databasecertificaat"
-   Geef het pad op naar het Database TLS-sleutelbestand
-   Geef het pad op naar het Database TLS CA-bestand
-   Geef het pad op naar het Database TLS-certificaatbestand

Let op, het vakje "Databasehost verifiëren" is aangevinkt en grijs - deze stap kan niet worden overgeslagen voor MySQL. 

::: notewarning
 De lijst met versleutelingsmethodes (Cipher list) moet leeg zijn, zodat de frontend en server de vereiste methode kunnen onderhandelen uit de ondersteunde methodes die door beide uiteinden worden ondersteund.
:::

![](../../../../../assets/en/manual/appendix/install/encrypt_db_verify_full1.png){width="600"}

Dit kan ook worden ingesteld in het bestand */etc/zabbix/web/zabbix.conf.php*:

    ...
    // Gebruikt voor TLS-verbinding met strikt gedefinieerde Cipher-lijst.
    $DB['ENCRYPTION'] = true;
    $DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
    $DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
    $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
    $DB['VERIFY_HOST'] = true;
    $DB['CIPHER_LIST'] = 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:TLS_AES_128_CCM_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-GC';
    ...
    // of
    ...
    // Gebruikt voor TLS-verbinding zonder gedefinieerde Cipher-lijst - geselecteerd door de MySQL-server
    $DB['ENCRYPTION'] = true;
    $DB['KEY_FILE'] = '/etc/ssl/mysql/client-key.pem';
    $DB['CERT_FILE'] = '/etc/ssl/mysql/client-cert.pem';
    $DB['CA_FILE'] = '/etc/ssl/mysql/ca.pem';
    $DB['VERIFY_HOST'] = true;
    $DB['CIPHER_LIST'] = '';
    ...

[comment]: # ({/c64d3aec-2f3a5c57})

[comment]: # ({c0090000-c0090000})
#### Server

Versleuteling inschakelen met volledige verificatie voor verbindingen tussen:
Zabbix-server en de database, configureren
*/etc/zabbix/zabbix\_server.conf*:

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBU-gebruiker=zbx_srv
    DBPassword=<strong_password>
    DBTLSConnect=verify_full
    DBTLSCAFile=/etc/ssl/mysql/ca.pem
    DBTLSCertFile=/etc/ssl/mysql/client-cert.pem
    DBTLSKeyFile=/etc/ssl/mysql/client-key.pem
    ...

[comment]: # ({/c0090000-c0090000})
