[comment]: # (tags: ssl)

[comment]: # ({f745f323-f745f323})
# 1 Конфигурација MySQL шифровања

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

[comment]: # ({c449b8f9-f87c5964})
### Преглед

Ова секција пружа неколико примера конфигурације шифровања за
CentOS 8.2 и MySQL 8.0.21 и може се користити као водич за брзи почетак за
шифровање везе са базом података.  

::: noteimportant
 Ако је
MySQL домаћин постављен на localhost, опције шифровања неће бити
доступне. У овом случају веза између Zabbix корисничког интерфејса и
база података користи socket датотеку (на Unix-у) или заједничку меморију (на Windows-у) и
не може да се шифрује.
::: 

::: noteclassic
 Листа шифровања
комбинације није ограничена на оне наведене на овој страници. Постоји
доступно много више комбинација. 
:::

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

[comment]: # ({8cb2ef57-30b5ee7b})
### Предуслови

Инсталирајте MySQL базу података из [званичног репозиторијума](https://dev.mysql.com/downloads/repo/yum/).

Погледајте [MySQL
документацију](https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/)
за детаље о коришћењу MySQL репозиторијума.

MySQL сервер је спреман да прихвати безбедне везе користећи самопотписани сертификат.

Да бисте видели који корисници користе шифровану везу, покрените следећи упит (Performance Schema треба да буде укључена):

   mysql> SELECT sbt.variable_value AS tls_version, t2.variable_value AS cipher, processlist_user AS user, processlist_host AS host
   FROM performance_schema.status_by_threadAS sbt
   JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
   JOIN performance_schema.status_by_thread AS t2 УКЉУЧЕНО t2.thread_id = t.thread_id
   WHERE sbt.variable_name = 'Ssl_version' и t2.variable_name = 'Ssl_cipher'
   ORDER BY tls_version;

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

[comment]: # ({7b44fd81-fda36821})
### Шифровање само за транспорт

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

[comment]: # ({536c8728-9ebeae19})
#### Конфигурација MySQL-а

Модерне верзије базе података су спремне одмах по подешавању за `required`[режим шифровања](/manual/appendix/install/db_encrypt#terminology). Сертификат на страни сервера ће бити креиран након почетног подешавања и покретања.

Креирајте кориснике и улоге за главне компоненте:

   mysql> CREATE USER
   'zbx_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',
   'zbx_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
   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'@'%';

Имајте на уму да се X.509 протокол не користи за проверу идентитета, већ је корисник конфигурисан да користи само шифроване везе. Погледајте [MySQL документацију](https://dev.mysql.com/doc/refman/8.0/en/create-user.html#create-user-tls) за више детаља о конфигурисању корисника.

Покрени да провериш везу (сокет веза се не може користити за тестирање безбедних веза):

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

Проверите тренутни статус и доступне пакете шифровања:

   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)

   ГРЕШКА:
   Није наведен упит

[comment]: # ({/536c8728-9ebeae19})

[comment]: # ({f58390e3-68afdcc8})
#### Кориснички интерфејс

Да бисте омогућили шифровање само за транспорт за везе између Zabbix
корисничког интерфејса и база података:

-  Проверите * Шифровање TLS базе података*
-  Оставите *Провери сертификат базе података* неозначеним

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

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

[comment]: # ({28b4b1c0-99c0e65b})
#### Сервер

Да бисте омогућили шифровање само за транспорт за везе између сервера и
базе података, конфигуришите */etc/zabbix/zabbix\_server.conf*:

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

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

[comment]: # ({627a05e9-fa9ec203})
### Шифровање са верификацијом ауторитета сертификата

Копирајте потребан MySQL CA на Zabbix фронтенд сервер, доделите одговарајуће дозволе да бисте омогућили веб серверу да чита ову датотеку.

:::noteclassic
Овај режим не ради на RHEL 7 због MySQL библиотека алата.
:::

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

[comment]: # ({4cb2ce06-9776435f})
#### Кориснички интерфејс

Да бисте омогућили шифровање са верификацијом сертификата за везе
између Zabbix корисничког интерфејса и базе података:

-  Проверите * TLS шифровање базе података* и *Верификовање сертификата базе података*
-  Наведите путању до датотеке TLS CA базе података

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

Алтернативно, ово се може подесити у */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'] = '';
    ...

Решите проблеме корисника помоћу алата командне линије да бисте проверили да ли је веза успостављена
за потребе корисника:

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

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

[comment]: # ({cfd9329e-a7a54f92})
#### Сервер

Да бисте омогућили шифровање са верификацијом сертификата за везе
између Zabbix сервера и базе података, конфигуришите
*/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]: # ({/cfd9329e-a7a54f92})

[comment]: # ({edf12bed-fa5d4760})
### Шифровање са потпуном верификацијом

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

[comment]: # ({f526f703-22fb0ddd})
#### Конфигурација MySQL-а

Подесите опцију конфигурације MySQL CE сервера (*/etc/my.cnf.d/server-tls.cnf*) на:

   [mysqld]
   ...
   # у овом примеру кључеви се налазе у директоријумима MySQL CE datadir
   ssl_ca=ca.pem
   ssl_cert=server-cert.pem
   ssl_key=server-key.pem

   require_secure_transport=ON
   tls_version=TLSv1.3
   ...

Кључеви за MySQL CE сервер и клијент (Zabbix кориснички интерфејс) треба да се креирају ручно према документацији за MySQL CE: [Креирање SSL и RSA сертификата и кључева помоћу MySQL-а](https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-rsa-files-using-mysql.html) или [Креирање SSL сертификата и кључева коришћењемopenssl](https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-files-using-openssl.html)

::: noteimportant
Сертификат MySQL сервера треба да садржи поље Заједничко име подешено на FQDN име јер ће Zabbix фронтенд користити DNS име за комуникацију са базом података или IP адресу хоста базе података.
:::

Креирај MySQL корисника:

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

Проверите да ли је могуће пријавити се са тим корисником:

   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]: # ({/f526f703-22fb0ddd})

[comment]: # ({48dcfadd-2f3a5c57})
#### Кориснички интерфејс

Да бисте омогућили шифровање са потпуном верификацијом за везе између Zabbix корисничког интерфејса и базе података:

-   Означите *Database TLS шифровање* и *Верификујте сертификат базе података*
-   Наведите путању до *Database TLS датотеке кључа*
-   Наведите путању до *Database TLS CA датотеке*
-   Наведите путању до *Database TLS датотеке сертификата*

Имајте на уму да је *Database host verification* означено и сиво - овај корак се не може прескочити за MySQL.

::: notewarning
Ако је поље *Database TLS листа шифара* остављено празно, биће омогућене уобичајене шифре које дозвољавају и кориснички интерфејс (клијент) и сервер.
Алтернативно, шифре се могу експлицитно подесити, у складу са [захтевима за конфигурацију шифре](https://dev.mysql.com/doc/refman/8.0/en/encrypted-connection-protocols-ciphers.html#encrypted-connection-cipher-configuration).
:::

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

Алтернативно, ово се може подесити у */etc/zabbix/web/zabbix.conf.php*:

   ...
   // Користи се за TLS везу са строго дефинисаном листом шифара.
   $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'] = тачно;
   $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';
   ...
   // или
   ...
   // Користи се за TLS везу без дефинисане листе шифара - изабрано од стране MySQL сервера
   $DB['ENCRYPTION'] = тачно;
   $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'] = тачно;$DB['CIPHER_LIST'] = '';
   ...

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

[comment]: # ({e32ce094-c0090000})
#### Сервер

Да бисте омогућили шифровање са потпуном верификацијом за везе између
Zabbix сервера и базе података, конфигуришите
*/etc/zabbix/zabbix\_server.conf*:

    ...
    DBHost=10.211.55.9
    DBName=zabbix
    DBUser=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]: # ({/e32ce094-c0090000})
