[comment]: # ({22b96536-5407a56a})
# 5. Безопасные соединения с базой данных

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

[comment]: # ({b38f1bac-7cadd09e})
#### Обзор

Этот раздел описывает шаги по настройке Zabbix  и примеры конфигурации для безопасных соединений TLS между:

|База данных|Компоненты Zabbix|
|--------|-----------------|
|MySQL|Веб-интерфейс Zabbix, Zabbix сервер, Zabbix прокси|
|PostgreSQL|Веб-интерфейс Zabbix, Zabbix сервер, Zabbix прокси|

За подробностями настроек шифрования соединений в СУБД, обратитесь к официальной документации вендора (\[en\]):

-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/replication-encrypted-connections.html):
    соединения между исходным сервером базы данных и репликой.
-   [MySQL](https://dev.mysql.com/doc/refman/8.0/en/group-replication-security.html):
    групповая репликация серверов баз данных и т.п.
-   [PostgreSQL](https://www.postgresql.org/docs/current/encryption-options.html):
    опции шифрования.

Все примеры базируются на выпусках GA release MySQL CE (8.0) и PgSQL
(13), доступных через официальные репозитории, используя CentOS 8.

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

[comment]: # ({b7e9dcca-5af34b43})
##### Требования

Для настройки шифрования требуется следующее:

-   Поддерживаемая разработчиками операционная система с OpenSSL >=1.1.X или
    альтернатива.

::: noteclassic
Рекомендуется избегать ОС в статусе end-of-life,
особенно в случае новых инсталляций
:::

-   Механизм базы данных (РСУБД), установленный и поддерживаемый из официального
    репозитория, предоставленного разработчиком. Операционные системы нередко поставляются
    с устаревшими версиями программного обеспечения баз данных, в которых поддержка
    шифрования не реализована; например, системы на базе RHEL 7 и
    PostgreSQL 9.2, MariaDB 5.5 без поддержки шифрования.

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

[comment]: # ({53676bc9-9801ac5b})
##### Терминология

Выставление этой опции принуждает использовать TLS соединения к базе данных от 
Zabbix сервера/прокси и от веб-интерфейса к базе данных:

-   required — подключаться, используя TLS как транспортный режим без проверок идентичности;
-   verify\_ca — подключаться, используя TLS и проверять сертификат;
-   verify\_full — подключаться, используя TLS, проверять сертификат и проверять, что идентифкация базы данных (CN), указанная в DBHost, соответствует своему сертификату;

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

[comment]: # ({84f30836-84f30836})
#### Настройка Zabbix

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

[comment]: # ({9a1ac113-b1071a8a})
##### Веб-интерфейс к базе данных

Безопасные подключения к базе данных могут быть настроены во время установки веб-интерфейса:

-   Отметьте флажок *TLS шифрование базы данных* на шаге [Настройка соединения с базой данных](/manual/installation/frontend#настройка-соединения-с-базой-данных),
    чтобы включить шифрование на транспортном уровне.
-   Отметьте флажок *Удостоверять сертификат базы данных* (который появляется при выборе опции
    *TLS шифрование базы данных*), чтобы разрешить шифрование с сертификатом.

::: noteclassic
Для MySQL флажок *TLS шифрование базы данных* отключён, если *Хост базы данных* выставлен в localhost, так как соединение, использующее сокет-файл (на Unix) или разделяемую память (на Windows), не может быть шифрованным.<br>
Для PostgreSQL флажок *TLS шифрование базы данных* отключён, если значение поля *Хост базы данных* начинается с косой черты или же пустое.

:::

В режиме TLS шифрования с сертификатом (если оба флажка отмечены) становятся доступными следующие параметры:

|Параметр|Описание|
|--|--------|
|*Файл TLS CA базы данных*|Укажите полный путь к корректному файлу удостоверяющего центра (certificate authority, CA) TLS.|
|*Файл TLS ключа базы данных*|Укажите полный путь к корректному файлу ключа TLS.|
|*Файл TLS сертификата базы данных*|Укажите полный путь к корректному файлу сертификата TLS.|
|*Сверка хоста базы данных*|Отметьте этот флажок, чтобы активировать сверку хоста.<br>Отключено для MYSQL, поскольку библиотека PHP MySQL не разрешает пропускать шаг валидации сертификата узла.|
|*Список шифров TLS базы данных*|Укажите пользовательский список допустимых шифров. Формат списка шифров должен отвечать стандарту OpenSSL.<br>Доступно только для MySQL.|

::: noteimportant
Параметры TLS должны указывать на корректные файлы. Если они указывают на несуществующие или некорректные файлы, это приведёт к ошибке авторизации.<br>
Если файлы сертификатов доступны на запись, веб-интерфейс генерирует предупреждение в отчёте 
[Информация о системе](/manual/web_interface/frontend_sections/reports/status_of_zabbix) о том, что "TLS certificate files must be read-only" (отображается только если пользователь PHP является владельцем сертификата).

Защищённые паролем сертификаты не поддерживаются. 
:::

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

[comment]: # ({18fae872-d4fd87a2})
##### Сценарии использования

Веб-интерфейс Zabbix использует графический интерфейс, чтобы определить возможные опции: `required`,`verify_ca`, `verify_full`. Указывайте нужные опции на шаге *Настройка соединения с базой данных* помощника по установке. Эти опции соответствуют файлу конфигурации (zabbix.conf.php) следующим образом:

|Параметр интерфейса|Файл конфигурации|Описание|Результат|
|----|----|----|----|
|![](../../../../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>...|Отметьте *TLS шифрование базы данных*<br>Оставьте *Удостоверять сертификат базы данных* неотмеченным|Включает режим «required».|
|![](../../../../assets/en/manual/appendix/install/encrypt_db_verify_ca.png)|...<br>$DB\['ENCRYPTION'\] = true;\\\\ $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\. Отметьте *TLS шифрование базы данных* и *Удостоверять сертификат базы данных*<br>2. Укажите путь к *Файл TLS CA базы данных*|Включает режим «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>Или:<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\. Отметьте *TLS шифрование базы данных* и *Удостоверять сертификат базы данных*<br>2. Укажите путь к *Файл TLS ключа базы данных*<br>3. Укажите путь к *Файл TLS CA базы данных*<br>4. Укажите путь к *Файл TLS сертификата базы данных*<br>5. Укажите список шифров TLS (опционально)|Включает режим «verify\_full» для 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\. Отметьте *TLS шифрование базы данных* и *Удостоверять сертификат базы данных*<br>2. Укажите путь к *Файл TLS ключа базы данных*<br>3. Укажите путь к *Файл TLS CA базы данных*<br>4. Укажите путь к *Файл TLS сертификата базы данных*<br>5. Отметьте *Сверка хоста базы данных*|Включает режим «verify\_full» для PostgreSQL.|

**Смотрите также:** [Примеры настроек шифрования для
MySQL](/manual/appendix/install/db_encrypt/mysql), [Примеры настроек шифрования для
PostgreSQL](/manual/appendix/install/db_encrypt/postgres).

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

[comment]: # ({b0ba4d20-9cfb91d1})
#### Конфигурация сервера/прокси Zabbix

Безопасные соединения с базой данных можно настроить с помощью соответствующих
параметров в файле конфигурации Zabbix [server](/manual/concepts/server/server_params)
и/или [proxy](/manual/concepts/proxy/proxy_params).

|Configuration|Result|
|--|--|
|None|Соединение с базой данных без шифрования.|
|1\. Set `DBTLSConnect=required`|Сервер/прокси устанавливают TLS-соединение с базой данных. Незашифрованное соединение не допускается.|
|1\. Set `DBTLSConnect=verify_ca`<br>2. Set `DBTLSCAFile` - specify the TLS certificate authority file|Сервер/прокси устанавливают TLS-соединение с базой данных после проверки сертификата базы данных.|
|1\. Set `DBTLSConnect=verify_full`<br>2. Set `DBTLSCAFile` - specify TLS certificate authority file|Сервер/прокси устанавливают TLS-соединение с базой данных после проверки сертификата базы данных и идентичности узла сети базы данных.|
|1\. Set `DBTLSCAFile` - specify the TLS certificate authority file<br>2\. Set `DBTLSCertFile` - specify the client public key certificate file<br>3\. Set `DBTLSKeyFile` - specify the client private key file|Сервер/прокси предоставляют клиентский сертификат при подключении к базе данных.|
|1\. Set `DBTLSCipher` - the list of encryption ciphers that the client permits for connections using TLS protocols up to TLS 1.2<br><br>or `DBTLSCipher13` - the list of encryption ciphers that the client permits for connections using TLS 1.3 protocol|(MySQL) TLS-соединение устанавливается с использованием шифра из указанного списка.<br>(PostgreSQL) Указание этой опции будет считаться ошибкой.|

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