[comment]: # (tags: ssl)

[comment]: # ({f745f323-f745f323})
# 1 MySQL šifrēšanas konfigurācija

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

[comment]: # ({5393a9b0-f87c5964})
### Pārskats

Šajā sadaļā ir sniegti vairāki šifrēšanas konfigurācijas piemēri CentOS 8.2 un MySQL 8.0.30, un tos var izmantot kā ātro darba sākšanas rokasgrāmatu savienojuma ar datubāzi šifrēšanai.

::: noteimportant
Ja MySQL hosts ir iestatīts uz localhost, šifrēšanas opcijas nebūs pieejamas.
Šādā gadījumā savienojums starp Zabbix lietotāja saskarni un datubāzi izmanto socket failu (Unix vidē) vai koplietojamo atmiņu (Windows vidē), un to nevar šifrēt.
::: 

::: noteclassic
Šifrēšanas kombināciju saraksts neaprobežojas tikai ar šajā lapā norādītajām.
Ir pieejams daudz vairāk kombināciju.
:::

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

[comment]: # ({8cb2ef57-30b5ee7b})
### Priekšnosacījumi

Instalējiet MySQL datubāzi no [oficiālās repozitorija](https://dev.mysql.com/downloads/repo/yum/).

Skatiet [MySQL dokumentāciju](https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/), lai iegūtu detalizētu informāciju par MySQL repozitorija izmantošanu.

MySQL serveris ir gatavs pieņemt drošus savienojumus, izmantojot pašparakstītu sertifikātu.

Lai redzētu, kuri lietotāji izmanto šifrētu savienojumu, izpildiet šādu vaicājumu (Performance Schema jābūt ieslēgtai):

```sqlmysql
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_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]: # ({/8cb2ef57-30b5ee7b})

[comment]: # ({7b44fd81-fda36821})
### Tikai transporta šifrēšana

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

[comment]: # ({535bee49-9ebeae19})
#### MySQL konfigurācija

Mūsdienu datubāzes versijas ir gatavas lietošanai uzreiz ar `required` [šifrēšanas režīmu](/manual/appendix/install/db_encrypt#terminology).
Pēc sākotnējās iestatīšanas un palaišanas tiks izveidots servera puses sertifikāts.

Izveidojiet lietotājus un lomas galvenajiem komponentiem:

::: noteimportant
MySQL versijām 8.4+ `mysql_native_password` vietā jāizmanto `caching_sha2_password`.
:::

```sqlmysql
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'@'%';
```

Ņemiet vērā, ka X.509 protokols netiek izmantots identitātes pārbaudei, bet lietotājs ir konfigurēts tā, lai izmantotu tikai šifrētus savienojumus.
Plašāku informāciju par lietotāju konfigurēšanu skatiet [MySQL dokumentācijā](https://dev.mysql.com/doc/refman/8.0/en/create-user.html#create-user-tls).

Palaidiet, lai pārbaudītu savienojumu (ligzdas savienojumu nevar izmantot droša savienojuma testēšanai):

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

Pārbaudiet pašreizējo statusu un pieejamos šifru komplektus:

```sqlmysql
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]: # ({/535bee49-9ebeae19})

[comment]: # ({f58390e3-68afdcc8})
#### Lietotāja saskarne

Lai iespējotu tikai transporta šifrēšanu savienojumiem starp Zabbix lietotāja saskarni un datubāzi:

-   Atzīmējiet *Database TLS encryption*
-   Atstājiet *Verify database certificate* neatzīmētu

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

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

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

Lai iespējotu tikai transporta šifrēšanu savienojumiem starp serveri un datubāzi, konfigurējiet */etc/zabbix/zabbix\_server.conf*:

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

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

[comment]: # ({627a05e9-fa9ec203})
### Šifrēšana ar sertifikācijas iestādes verifikāciju

Nokopējiet nepieciešamo MySQL CA uz Zabbix lietotāja saskarnes serveri un piešķiriet atbilstošas atļaujas, lai tīmekļa serveris varētu nolasīt šo failu.

::: noteclassic
Šis režīms nedarbojas uz RHEL 7 vecāku MySQL bibliotēku dēļ.
:::

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

[comment]: # ({4cb2ce06-9776435f})
#### Lietotāja saskarne

Lai iespējotu šifrēšanu ar sertifikāta pārbaudi savienojumiem starp Zabbix lietotāja saskarni un datubāzi:

-   Atzīmējiet *Database TLS encryption* un *Verify database certificate*
-   Norādiet ceļu uz Database TLS CA failu

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

Alternatīvi, to var iestatīt failā */etc/zabbix/web/zabbix.conf.php*:

```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'] = '';
...
```

Problēmu novēršanai lietotājs var izmantot komandrindas rīku, lai pārbaudītu, vai savienojums ir iespējams nepieciešamajam lietotājam:

```bash
    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})
#### Serveris

Lai iespējotu šifrēšanu ar sertifikāta verifikāciju savienojumiem starp Zabbix serveri un datubāzi, konfigurējiet */etc/zabbix/zabbix\_server.conf*:

```ini
...
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})
### Šifrēšana ar pilnu verifikāciju

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

[comment]: # ({f5733df1-22fb0ddd})
#### MySQL konfigurācija

Iestatiet MySQL CE servera konfigurācijas opciju (*/etc/my.cnf.d/server-tls.cnf*) uz:

```ini
[mysqld]
...
# šajā piemērā atslēgas atrodas MySQL CE datadir direktorijā
ssl_ca=ca.pem
ssl_cert=server-cert.pem
ssl_key=server-key.pem

require_secure_transport=ON
tls_version=TLSv1.3
...
```

MySQL CE servera un klienta (Zabbix lietotāja saskarne) atslēgas ir jāizveido manuāli saskaņā ar MySQL CE dokumentāciju: [Creating SSL and RSA certificates and keys using MySQL](https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-rsa-files-using-mysql.html) vai [Creating SSL certificates and keys using openssl](https://dev.mysql.com/doc/refman/8.0/en/creating-ssl-files-using-openssl.html)

::: noteimportant
MySQL servera sertifikātā laukam Common Name jābūt iestatītam uz FQDN nosaukumu, jo Zabbix lietotāja saskarne izmantos DNS nosaukumu, lai sazinātos ar datubāzi, vai datubāzes hosta IP adresi.
:::

Izveidojiet MySQL lietotāju:

::: noteimportant
MySQL versijām 8.4+ `caching_sha2_password` jāizmanto `mysql_native_password` vietā.
:::

```sqlmysql
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;
```

Pārbaudiet, vai ir iespējams pieteikties ar šo lietotāju:

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

[comment]: # ({48dcfadd-2f3a5c57})
#### Lietotāja saskarne

Lai iespējotu šifrēšanu ar pilnu verifikāciju savienojumiem starp Zabbix lietotāja saskarni un datubāzi:

-   Atzīmējiet *Database TLS encryption* un *Verify database certificate*
-   Norādiet ceļu uz *Database TLS key file*
-   Norādiet ceļu uz *Database TLS CA file*
-   Norādiet ceļu uz *Database TLS certificate file*

Ņemiet vērā, ka *Database host verification* ir atzīmēts un pelēkots - šo soli MySQL gadījumā nevar izlaist.

::: notewarning
Ja lauks *Database TLS cipher list* ir atstāts tukšs, tiks iespējoti kopīgie šifri, ko atbalsta gan lietotāja saskarne (klients), gan serveris.
Alternatīvi šifrus var iestatīt tieši, ievērojot [cipher configuration requirements](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}

Alternatīvi to var iestatīt failā */etc/zabbix/web/zabbix.conf.php*:

```php
...
// Used for TLS connection with strictly defined Cipher list.
$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';
...
// or
...
// Used for TLS connection without Cipher list defined - selected by 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]: # ({/48dcfadd-2f3a5c57})

[comment]: # ({e32ce094-c0090000})
#### Serveris

Lai iespējotu šifrēšanu ar pilnu verifikāciju savienojumiem starp Zabbix serveri un datubāzi, konfigurējiet */etc/zabbix/zabbix\_server.conf*:

```ini
...
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})
