[comment]: # (tags: ssl)

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

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

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

Šī sadaļa sniedz vairākus šifrēšanas konfigurācijas piemērus
CentOS 8.2 un MySQL 8.0.30, un to var izmantot kā ātrās darba sākšanas
ceļvedi savienojuma ar datubāzi šifrēšanai.

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

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

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

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

Instalējiet MySQL datubāzi no [oficiālās
krātuves](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 informāciju par MySQL repozitorija lietoš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ēgtam):

    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_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]: # ({7b44fd81-fda36821})
### Tikai transporta šifrēšana

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

[comment]: # ({e7c676d6-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`.
:::

```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 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. Skatiet [MySQL
dokumentāciju](https://dev.mysql.com/doc/refman/8.0/en/create-user.html#create-user-tls)
papildu informācijai par lietotāju konfigurēšanu.

Palaidiet, lai pārbaudītu savienojumu (socket savienojumu nevar izmantot drošu
savienojumu testēšanai):

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

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

    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]: # ({/e7c676d6-9ebeae19})

[comment]: # ({68afdcc8-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*
-   Neatzīmējiet *Verify database certificate*

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

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

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

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

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

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

[comment]: # ({baccf022-82e1ed59})
### Šifrēšana ar sertifikātu iestādes verifikāciju

Kopē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 SLES 12 un RHEL 7 dēļ
vecākām MySQL bibliotēkām.
:::

[comment]: # ({/baccf022-82e1ed59})

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

Lai iespējotu šifrēšanu ar sertifikāta 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 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*:

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

Lai novērstu problēmas, izmantojiet komandrindas rīku, lai pārbaudītu, vai savienojums
ir iespējams norādītajam lietotājam:

    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})
#### 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*:

    ...
    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]: # ({edf12bed-fa5d4760})
### Šifrēšana ar pilnu verifikāciju

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

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

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

    [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/5.7/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
host IP adresi.
:::

Izveidojiet MySQL lietotāju:

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

```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 X509
  PASSWORD HISTORY 5;
```

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

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

[comment]: # ({86a97b70-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 nevar izlaist.

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

    ...
    // 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]: # ({/86a97b70-2f3a5c57})

[comment]: # ({c0090000-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*:

    ...
    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]: # ({/c0090000-c0090000})
