[comment]: # ({822969ff-822969ff})
# 17 Šifrēšana

[comment]: # ({/822969ff-822969ff})

[comment]: # ({73039a5b-0b118c23})
#### Pārskats

Zabbix atbalsta šifrētu saziņu starp Zabbix komponentiem, izmantojot
Transport Layer Security (TLS) protokolu v.1.2 un 1.3 (atkarībā no
kriptogrāfijas bibliotēkas). Tiek atbalstīta šifrēšana, kas balstīta uz
sertifikātiem un iepriekš koplietotām atslēgām.

Šifrēšanu var konfigurēt savienojumiem:

-   Starp Zabbix serveri, Zabbix starpniekserveri, Zabbix aģentu, Zabbix tīmekļa pakalpojumu, zabbix\_sender
    un zabbix\_get utilītām
-   Uz Zabbix datubāzi [no Zabbix lietotāja saskarnes un
    servera/starpniekservera](/manual/appendix/install/db_encrypt)
-   Starp Zabbix lietotāja saskarni un Zabbix serveri

Šifrēšana ir izvēles iespēja, un to var konfigurēt atsevišķiem komponentiem:

-   Dažus starpniekserverus un aģentus var konfigurēt tā, lai tie izmantotu uz sertifikātiem
    balstītu šifrēšanu ar serveri, savukārt citi var izmantot uz iepriekš koplietotām
    atslēgām balstītu šifrēšanu, bet vēl citi var turpināt izmantot nešifrētu
    saziņu (kā iepriekš).
-   Serveris (starpniekserveris) var izmantot atšķirīgas šifrēšanas konfigurācijas
    dažādiem hostiem.

Zabbix dēmonu programmas izmanto vienu klausīšanās portu šifrētiem un
nešifrētiem ienākošajiem savienojumiem. Šifrēšanas pievienošanai nav
nepieciešams atvērt jaunus portus ugunsmūros.

[comment]: # ({/73039a5b-0b118c23})

[comment]: # ({8fd79214-bdc6b202})
#### Ierobežojumi

-   Privātās atslēgas tiek glabātas vienkāršā tekstā failos, kurus Zabbix
    komponenti var nolasīt palaišanas laikā.
-   Iepriekš koplietotās atslēgas tiek ievadītas Zabbix lietotāja saskarne
    un glabātas Zabbix datubāzē vienkāršā tekstā.
-   Iebūvētā šifrēšana neaizsargā saziņu starp tīmekļa serveri, kurā darbojas Zabbix lietotāja saskarne, un lietotāja tīmekļa pārlūku.
-   Pašlaik katrs šifrētais savienojums tiek atvērts ar pilnu TLS rokasspiedienu;
    sesiju kešošana un biļetes netiek izmantotas.
-   Šifrēšanas pievienošana palielina laiku, kas nepieciešams vienumu pārbaudēm un darbībām,
    atkarībā no tīkla latentuma:
    -   Piemēram, ja pakešu aizture ir 100 ms, tad TCP
        savienojuma atvēršana un nešifrēta pieprasījuma nosūtīšana aizņem apmēram 200 ms.
        Izmantojot šifrēšanu, TLS savienojuma izveidei tiek pievienotas apmēram 1000 ms.
    -   Var būt nepieciešams palielināt noildzes vērtības, pretējā gadījumā daži vienumi un
        darbības, kas izpilda attālinātus skriptus uz aģentiem, var darboties ar
        nešifrētiem savienojumiem, bet neizdoties noildzes dēļ ar šifrētiem.
-   Šifrēšanu neatbalsta [tīkla
    atklāšana](/manual/discovery/network_discovery). Zabbix aģenta pārbaudes,
    ko veic tīkla atklāšana, būs nešifrētas, un, ja Zabbix aģents ir konfigurēts noraidīt nešifrētus savienojumus, šādas pārbaudes nebūs veiksmīgas.

[comment]: # ({/8fd79214-bdc6b202})

[comment]: # ({bac66f33-ba7ecc58})
#### Zabbix kompilēšana ar šifrēšanas atbalstu

Lai atbalstītu šifrēšanu, Zabbix ir jākompilē un jāsasaista ar vienu no
atbalstītajām kriptogrāfijas bibliotēkām:

-   GnuTLS - начиная ar versiju 3.1.18
-   OpenSSL - versijas 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x
-   LibreSSL - testēts ar versijām 2.7.4, 2.8.2:
    -   LibreSSL 2.6.x netiek atbalstīts
    -   LibreSSL tiek atbalstīts kā ar OpenSSL saderīgs aizstājējs;
        jaunās `tls_*()` LibreSSL specifiskās API funkcijas netiek izmantotas.
        Zabbix komponenti, kas kompilēti ar LibreSSL, nevarēs izmantot
        PSK, varēs izmantot tikai sertifikātus.

:::notetip
Plašāku informāciju par SSL iestatīšanu Zabbix lietotāja saskarnei var atrast šajā [labākajā praksē](/manual/best_practices/security/cryptography#setting-up-ssl-for-zabbix-frontend).
:::

Bibliotēka tiek izvēlēta, norādot attiecīgo opciju
skriptam "configure":

-   `--with-gnutls[=DIR]`
-   `--with-openssl[=DIR]` (izmanto arī LibreSSL)

Piemēram, lai konfigurētu pirmkodu serverim un aģentam ar
*OpenSSL*, var izmantot kaut ko līdzīgu šim:

    ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openssl

Dažādi Zabbix komponenti var tikt kompilēti ar dažādām kriptogrāfijas
bibliotēkām (piemēram, serveris ar *OpenSSL*, aģents ar *GnuTLS*).

::: noteimportant
 Ja plānojat izmantot iepriekš koplietotas atslēgas (PSK),
apsveriet iespēju izmantot *GnuTLS* vai *OpenSSL 1.1.0* (vai jaunākas) bibliotēkas
tajos Zabbix komponentos, kas izmanto PSK. *GnuTLS* un *OpenSSL 1.1.0* bibliotēkas
atbalsta PSK šifru kopas ar [Perfect Forward
Secrecy](https://en.wikipedia.org/wiki/Forward_secrecy#Perfect_forward_secrecy_.28PFS.29).
Arī vecākas *OpenSSL* bibliotēkas versijas (1.0.1, 1.0.2c) atbalsta
PSK, taču pieejamās PSK šifru kopas nenodrošina Perfect Forward
Secrecy. 
:::

[comment]: # ({/bac66f33-ba7ecc58})

[comment]: # ({0f96d146-2d0e2b80})
#### Savienojumu šifrēšanas pārvaldība

Savienojumi Zabbix var izmantot:

-   bez šifrēšanas (noklusējums)
-   [uz RSA sertifikātiem balstītu
    šifrēšanu](/manual/encryption/using_certificates)
-   [uz PSK balstītu šifrēšanu](/manual/encryption/using_pre_shared_keys)

Ir divi svarīgi parametri, ko izmanto, lai norādītu šifrēšanu starp
Zabbix komponentiem:

-   TLSConnect - norāda, kādu šifrēšanu izmantot izejošajiem
    savienojumiem (bez šifrēšanas, PSK vai sertifikāts)
-   TLSAccept - norāda, kādi savienojumu tipi ir atļauti ienākošajiem
    savienojumiem (bez šifrēšanas, PSK vai sertifikāts). Var norādīt
    vienu vai vairākas vērtības.

`TLSConnect` tiek izmantots Zabbix starpniekserveris konfigurācijas failos (aktīvajā režīmā norāda tikai savienojumus ar serveris) un Zabbix aģents konfigurācijas failos (aktīvajām pārbaudēm). Zabbix lietotāja saskarne parametrs, kas atbilst TLSConnect, ir lauks *Connections to host* cilnē *Data collection → Hosts → <some
host> → Encryption* un lauks *Connections to proxy* cilnē
*Administration → Proxies → <some proxy> → Encryption*. Ja konfigurētais
savienojuma šifrēšanas tips neizdodas, citi šifrēšanas tipi netiks
mēģināti.

`TLSAccept` tiek izmantots Zabbix starpniekserveris konfigurācijas failos (pasīvajā režīmā norāda tikai savienojumus no serveris) un Zabbix aģents konfigurācijas failos (pasīvajām pārbaudēm). Zabbix lietotāja saskarne parametrs, kas atbilst TLSAccept, ir lauks *Connections from host* cilnē *Data collection → Hosts → <some
host> → Encryption* un lauks *Connections from proxy* cilnē
*Administration → Proxies → <some proxy> → Encryption*.

Parasti ienākošajiem savienojumiem konfigurē tikai vienu šifrēšanas
tipu. Taču, iespējams, vēlēsieties pārslēgt šifrēšanas tipu, piemēram,
no nešifrēta uz uz sertifikātiem balstītu, ar minimālu dīkstāvi un
iespēju atgriezties pie iepriekšējās konfigurācijas. Lai to panāktu:

-   Iestatiet `TLSAccept=unencrypted,cert` aģents konfigurācijas failā un
    restartējiet Zabbix aģents
-   Pārbaudiet savienojumu ar aģents, izmantojot zabbix\_get ar
    sertifikātu. Ja tas darbojas, varat pārkonfigurēt šifrēšanu šim
    aģents Zabbix lietotāja saskarne cilnē *Data collection → Hosts → <some
    host> → Encryption*, iestatot *Connections to host* uz
    "Certificate".
-   Kad serveris konfigurācijas kešatmiņa tiks atjaunināta (un
    starpniekserveris konfigurācija tiks atjaunināta, ja hosts tiek
    uzraudzīts ar starpniekserveris), savienojumi ar šo aģents tiks
    šifrēti
-   Ja viss darbojas, kā paredzēts, varat iestatīt `TLSAccept=cert`
    aģents konfigurācijas failā un restartēt Zabbix aģents. Tagad
    aģents pieņems tikai šifrētus, uz sertifikātiem balstītus
    savienojumus. Nešifrēti un uz PSK balstīti savienojumi tiks
    noraidīti.

Līdzīgā veidā tas darbojas serveris un starpniekserveris. Ja Zabbix lietotāja saskarne
hosts konfigurācijā lauks *Connections from host* ir iestatīts uz
"Certificate", tad no aģents tiks pieņemti tikai uz sertifikātiem
balstīti šifrēti savienojumi (aktīvās pārbaudes) un zabbix\_sender
(trapper vienumi).

Visticamāk, jūs konfigurēsiet ienākošos un izejošos savienojumus tā, lai
tie izmantotu vienu un to pašu šifrēšanas tipu vai vispār neizmantotu
šifrēšanu. Taču tehniski ir iespējams to konfigurēt asimetriski,
piemēram, uz sertifikātiem balstītu šifrēšanu ienākošajiem
savienojumiem un uz PSK balstītu šifrēšanu izejošajiem savienojumiem.

Katra hosts šifrēšanas konfigurācija tiek parādīta Zabbix
lietotāja saskarne sadaļā *Data collection → Hosts* kolonnā *Agent encryption*.
Piemēram:

|Piemērs|Savienojumi ar hostu|Atļautie savienojumi no hosta|Noraidītie savienojumi no hosta|
|-------|-------------------|-----------------------------|------------------------------|
|![none\_none.png](../../assets/en/manual/encryption/none_none.png)|Nešifrēti|Nešifrēti|Šifrēti, uz sertifikātiem balstīti un uz PSK balstīti šifrēti|
|![cert\_cert.png](../../assets/en/manual/encryption/cert_cert.png)|Šifrēti, uz sertifikātiem balstīti|Šifrēti, uz sertifikātiem balstīti|Nešifrēti un uz PSK balstīti šifrēti|
|![psk\_psk.png](../../assets/en/manual/encryption/psk_psk.png)|Šifrēti, uz PSK balstīti|Šifrēti, uz PSK balstīti|Nešifrēti un uz sertifikātiem balstīti šifrēti|
|![psk\_none\_psk.png](../../assets/en/manual/encryption/psk_none_psk.png)|Šifrēti, uz PSK balstīti|Nešifrēti un uz PSK balstīti šifrēti|Uz sertifikātiem balstīti šifrēti|
|![cert\_all.png](../../assets/en/manual/encryption/cert_all.png)|Šifrēti, uz sertifikātiem balstīti|Nešifrēti, uz PSK balstīti vai uz sertifikātiem balstīti šifrēti|\-|

::: noteimportant
Savienojumi pēc noklusējuma nav šifrēti. Šifrēšana
jākonfigurē katram hostam un starpniekserverim atsevišķi.
:::

[comment]: # ({/0f96d146-2d0e2b80})

[comment]: # ({ad15e6ff-ad15e6ff})
#### zabbix\_get un zabbix\_sender ar šifrēšanu

Skatiet [zabbix\_get](/manpages/zabbix_get) un
[zabbix\_sender](/manpages/zabbix_sender) rokasgrāmatas lapas, lai uzzinātu, kā tās izmantot ar
šifrēšanu.

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

[comment]: # ({6f67a86b-be2996e2})
#### Šifru komplekti

Pēc noklusējuma šifru komplekti tiek konfigurēti iekšēji Zabbix palaišanas laikā.

Tiek atbalstīti arī lietotāja konfigurēti šifru komplekti GnuTLS un OpenSSL bibliotēkām. Lietotāji var
[konfigurēt](#userconfigured-ciphersuites) šifru komplektus atbilstoši
savām drošības politikām. Šīs iespējas izmantošana nav obligāta (iebūvētie
noklusējuma šifru komplekti joprojām darbojas).

Kriptogrāfiskajām bibliotēkām, kas kompilētas ar noklusējuma iestatījumiem, Zabbix iebūvētie
noteikumi parasti nodrošina šādus šifru komplektus (secībā no
augstākas uz zemāku prioritāti):

|Bibliotēka|Sertifikātu šifru komplekti|PSK šifru komplekti|
|-------|------------------------|----------------|
|*GnuTLS 3.1.18*|TLS\_ECDHE\_RSA\_AES\_128\_GCM\_SHA256<br>TLS\_ECDHE\_RSA\_AES\_128\_CBC\_SHA256<br>TLS\_ECDHE\_RSA\_AES\_128\_CBC\_SHA1<br>TLS\_RSA\_AES\_128\_GCM\_SHA256<br>TLS\_RSA\_AES\_128\_CBC\_SHA256<br>TLS\_RSA\_AES\_128\_CBC\_SHA1|TLS\_ECDHE\_PSK\_AES\_128\_CBC\_SHA256<br>TLS\_ECDHE\_PSK\_AES\_128\_CBC\_SHA1<br>TLS\_PSK\_AES\_128\_GCM\_SHA256<br>TLS\_PSK\_AES\_128\_CBC\_SHA256<br>TLS\_PSK\_AES\_128\_CBC\_SHA1|
|*OpenSSL 1.0.2c*|ECDHE-RSA-AES128-GCM-SHA256<br>ECDHE-RSA-AES128-SHA256<br>ECDHE-RSA-AES128-SHA<br>AES128-GCM-SHA256<br>AES128-SHA256<br>AES128-SHA|PSK-AES128-CBC-SHA|
|*OpenSSL 1.1.0*|ECDHE-RSA-AES128-GCM-SHA256<br>ECDHE-RSA-AES128-SHA256<br>ECDHE-RSA-AES128-SHA<br>AES128-GCM-SHA256<br>AES128-CCM8<br>AES128-CCM<br>AES128-SHA256<br>AES128-SHA<br>|ECDHE-PSK-AES128-CBC-SHA256<br>ECDHE-PSK-AES128-CBC-SHA<br>PSK-AES128-GCM-SHA256<br>PSK-AES128-CCM8<br>PSK-AES128-CCM<br>PSK-AES128-CBC-SHA256<br>PSK-AES128-CBC-SHA|
|*OpenSSL 1.1.1d*|TLS\_AES\_256\_GCM\_SHA384<br>TLS\_CHACHA20\_POLY1305\_SHA256<br>TLS\_AES\_128\_GCM\_SHA256<br>ECDHE-RSA-AES128-GCM-SHA256<br>ECDHE-RSA-AES128-SHA256<br>ECDHE-RSA-AES128-SHA<br>AES128-GCM-SHA256<br>AES128-CCM8<br>AES128-CCM<br>AES128-SHA256<br>AES128-SHA|TLS\_CHACHA20\_POLY1305\_SHA256<br>TLS\_AES\_128\_GCM\_SHA256<br>ECDHE-PSK-AES128-CBC-SHA256<br>ECDHE-PSK-AES128-CBC-SHA<br>PSK-AES128-GCM-SHA256<br>PSK-AES128-CCM8<br>PSK-AES128-CCM<br>PSK-AES128-CBC-SHA256<br>PSK-AES128-CBC-SHA|

[comment]: # ({/6f67a86b-be2996e2})

[comment]: # ({8731bb52-b5e04652})
#### Lietotāja konfigurēti šifru komplekti

Iebūvētos šifru komplektu atlases kritērijus var pārrakstīt ar
lietotāja konfigurētiem šifru komplektiem.

::: noteimportant
Lietotāja konfigurēti šifru komplekti ir funkcija, kas paredzēta
pieredzējušiem lietotājiem, kuri izprot TLS šifru komplektus, to drošību
un kļūdu sekas, kā arī pārzina TLS problēmu novēršanu.
:::

Iebūvētos šifru komplektu atlases kritērijus var pārrakstīt, izmantojot
šādus parametrus:

|Pārrakstīšanas tvērums|Parametrs|Vērtība|Apraksts|
|--|--|------|------|
|Šifru komplektu atlase sertifikātiem|TLSCipherCert13|Derīgas OpenSSL 1.1.1 [cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) TLS 1.3 protokolam (to vērtības tiek nodotas OpenSSL funkcijai `SSL_CTX_set_ciphersuites()`).|Uz sertifikātiem balstīti šifru komplektu atlases kritēriji TLS 1.3<br><br>Tikai OpenSSL 1.1.1 vai jaunāka versija.|
|^|TLSCipherCert|Derīgas OpenSSL [cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) TLS 1.2 vai derīgas GnuTLS [priority strings](https://gnutls.org/manual/html_node/Priority-Strings.html). To vērtības tiek nodotas attiecīgi funkcijām `SSL_CTX_set_cipher_list()` vai `gnutls_priority_init()`.|Uz sertifikātiem balstīti šifru komplektu atlases kritēriji TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|
|Šifru komplektu atlase PSK|TLSCipherPSK13|Derīgas OpenSSL 1.1.1 [cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) TLS 1.3 protokolam (to vērtības tiek nodotas OpenSSL funkcijai `SSL_CTX_set_ciphersuites()`).|Uz PSK balstīti šifru komplektu atlases kritēriji TLS 1.3<br><br>Tikai OpenSSL 1.1.1 vai jaunāka versija.|
|^|TLSCipherPSK|Derīgas OpenSSL [cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) TLS 1.2 vai derīgas GnuTLS [priority strings](https://gnutls.org/manual/html_node/Priority-Strings.html). To vērtības tiek nodotas attiecīgi funkcijām `SSL_CTX_set_cipher_list()` vai `gnutls_priority_init()`.|Uz PSK balstīti šifru komplektu atlases kritēriji TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|
|Apvienots šifru komplektu saraksts sertifikātam un PSK|TLSCipherAll13|Derīgas OpenSSL 1.1.1 [cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) TLS 1.3 protokolam (to vērtības tiek nodotas OpenSSL funkcijai `SSL_CTX_set_ciphersuites()`).|Šifru komplektu atlases kritēriji TLS 1.3<br><br>Tikai OpenSSL 1.1.1 vai jaunāka versija.|
|^|TLSCipherAll|Derīgas OpenSSL [cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) TLS 1.2 vai derīgas GnuTLS [priority strings](https://gnutls.org/manual/html_node/Priority-Strings.html). To vērtības tiek nodotas attiecīgi funkcijām `SSL_CTX_set_cipher_list()` vai `gnutls_priority_init()`.|Šifru komplektu atlases kritēriji TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|

Lai pārrakstītu šifru komplektu atlasi
[zabbix\_get](/manpages/zabbix_get) un
[zabbix\_sender](/manpages/zabbix_sender) utilītās, izmantojiet
komandrindas parametrus:

-   `--tls-cipher13`
-   `--tls-cipher`

Jaunie parametri nav obligāti. Ja parametrs nav norādīts, tiek
izmantota iekšējā noklusējuma vērtība. Ja parametrs ir definēts, tas
nedrīkst būt tukšs.

Ja TLSCipher\* vērtības iestatīšana kriptogrāfijas bibliotēkā neizdodas,
serveris, starpniekserveris vai aģents netiks palaists un tiks reģistrēta kļūda.

Ir svarīgi saprast, kad katrs parametrs ir piemērojams.

[comment]: # ({/8731bb52-b5e04652})

[comment]: # ({ca5e66e4-a74c28c7})
##### Izejošie savienojumi

Vienkāršākais gadījums ir izejošie savienojumi:

-   Izejošajiem savienojumiem ar sertifikātu izmantojiet TLSCipherCert13 vai
    TLSCipherCert
-   Izejošajiem savienojumiem ar PSK izmantojiet TLSCipherPSK13 vai
    TLSCipherPSK
-   zabbix\_get un zabbix\_sender utilītu gadījumā var izmantot komandrindas
    parametrus `--tls-cipher13` vai `--tls-cipher`
    (šifrēšana ir nepārprotami norādīta ar parametru `--tls-connect`)

[comment]: # ({/ca5e66e4-a74c28c7})

[comment]: # ({29364114-3edf3b2b})
##### Ienākošie savienojumi

Ar ienākošajiem savienojumiem tas ir nedaudz sarežģītāk, jo noteikumi ir
atkarīgi no komponentiem un konfigurācijas.

Zabbix **aģentam**:

|Aģenta savienojuma iestatīšana|Šifru konfigurācija|
|------------------------------|-------------------|
|TLSConnect=cert|TLSCipherCert, TLSCipherCert13|
|TLSConnect=psk|TLSCipherPSK, TLSCipherPSK13|
|TLSAccept=cert|TLSCipherCert, TLSCipherCert13|
|TLSAccept=psk|TLSCipherPSK, TLSCipherPSK13|
|TLSAccept=cert,psk|TLSCipherAll, TLSCipherAll13|

Zabbix **serverim** un **starpniekserverim**:

|Savienojuma iestatīšana|Šifru konfigurācija|
|-----------------------|-------------------|
|Izejošie savienojumi, izmantojot PSK|TLSCipherPSK, TLSCipherPSK13|
|Ienākošie savienojumi, izmantojot sertifikātus|TLSCipherAll, TLSCipherAll13|
|Ienākošie savienojumi, izmantojot PSK, ja serverim nav sertifikāta|TLSCipherPSK, TLSCipherPSK13|
|Ienākošie savienojumi, izmantojot PSK, ja serverim ir sertifikāts|TLSCipherAll, TLSCipherAll13|

Abās iepriekš redzamajās tabulās var saskatīt noteiktu likumsakarību:

-   TLSCipherAll un TLSCipherAll13 var norādīt tikai tad, ja tiek izmantots
    apvienots uz sertifikātiem **un** PSK balstītu šifru kopu saraksts. Tas
    notiek divos gadījumos: serveris (starpniekserveris) ar konfigurētu
    sertifikātu (PSK šifru kopas serverī un starpniekserverī vienmēr ir
    konfigurētas, ja kriptogrāfijas bibliotēka atbalsta PSK), aģents ir
    konfigurēts pieņemt gan uz sertifikātiem, gan uz PSK balstītus
    ienākošos savienojumus
-   citos gadījumos pietiek ar TLSCipherCert\* un/vai TLSCipherPSK\*

Tālāk redzamajās tabulās ir parādītas iebūvētās `TLSCipher*` noklusējuma
vērtības. Tās var būt labs sākumpunkts jūsu pašu pielāgotajām vērtībām.

|Parametrs|GnuTLS 3.6.12|
|--|--------|
|TLSCipherCert|NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509|
|TLSCipherPSK|NONE:+VERS-TLS1.2:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL|
|TLSCipherAll|NONE:+VERS-TLS1.2:+ECDHE-RSA:+RSA:+ECDHE-PSK:+PSK:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+SHA1:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509|

|Parametrs|OpenSSL 1.1.1d ^**1**^|
|--|--------|
|TLSCipherCert13|<|
|TLSCipherCert|EECDH+aRSA+AES128:RSA+aRSA+AES128|
|TLSCipherPSK13|TLS\_CHACHA20\_POLY1305\_SHA256:TLS\_AES\_128\_GCM\_SHA256|
|TLSCipherPSK|kECDHEPSK+AES128:kPSK+AES128|
|TLSCipherAll13|<|
|TLSCipherAll|EECDH+aRSA+AES128:RSA+aRSA+AES128:kECDHEPSK+AES128:kPSK+AES128|

^**1**^ Noklusējuma vērtības atšķiras vecākām OpenSSL versijām (1.0.1,
1.0.2, 1.1.0), LibreSSL un gadījumos, ja OpenSSL ir kompilēts bez PSK
atbalsta.

**Lietotāja konfigurētu šifru kopu piemēri**

Tālāk skatiet šādus lietotāja konfigurētu šifru kopu piemērus:

-   [Šifru virkņu testēšana un tikai PFS šifru kopu
    atļaušana](#testing-cipher-strings-and-allowing-only-pfs-ciphersuites)
-   [Pārslēgšanās no AES128 uz AES256](#switching-from-aes128-to-aes256)

[comment]: # ({/29364114-3edf3b2b})

[comment]: # ({52b821c4-bfb4ef88})
##### Šifru komplektu virkņu testēšana un tikai PFS šifru komplektu atļaušana

Lai redzētu, kuri šifru komplekti ir atlasīti, konfigurācijas failā ir jāiestata
'DebugLevel=4' vai jāizmanto `-vv` opcija
zabbix\_sender.

Pirms iegūstat vajadzīgos šifru komplektus, var būt nepieciešama
neliela eksperimentēšana ar `TLSCipher*` parametriem. Nav ērti
vairākkārt restartēt Zabbix serveri, starpniekserveri vai aģentu tikai tādēļ, lai pielāgotu `TLSCipher*`
parametrus. Ērtākas iespējas ir izmantot zabbix\_sender vai
`openssl` komandu. Parādīsim abus variantus.

**1.** Izmantojot zabbix\_sender.

Izveidosim testa konfigurācijas failu, piemēram,
`/home/zabbix/test.conf`, ar `zabbix_agentd.conf` faila sintaksi:

      Hostname=nonexisting
      ServerActive=nonexisting
      
      TLSConnect=cert
      TLSCAFile=/home/zabbix/ca.crt
      TLSCertFile=/home/zabbix/agent.crt
      TLSKeyFile=/home/zabbix/agent.key
      TLSPSKIdentity=nonexisting
      TLSPSKFile=/home/zabbix/agent.psk

Šim piemēram ir nepieciešami derīgi CA un aģenta sertifikāti, kā arī PSK.
Pielāgojiet sertifikātu un PSK failu ceļus un nosaukumus savai videi.

Ja neizmantojat sertifikātus, bet tikai PSK, varat izveidot vienkāršāku
testa failu:

      Hostname=nonexisting
      ServerActive=nonexisting
      
      TLSConnect=psk
      TLSPSKIdentity=nonexisting
      TLSPSKFile=/home/zabbix/agentd.psk

Atlasītos šifru komplektus var redzēt, palaižot zabbix\_sender (piemērs
kompilēts ar OpenSSL 1.1.d):

      $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites
      zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA
      zabbix_sender [41271]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA
      zabbix_sender [41271]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA

Šeit redzat pēc noklusējuma atlasītos šifru komplektus. Šīs noklusējuma vērtības
ir izvēlētas, lai nodrošinātu savietojamību ar Zabbix aģentiem, kas darbojas
sistēmās ar vecākām OpenSSL versijām (sākot no 1.0.1).

Jaunākās sistēmās varat izvēlēties pastiprināt drošību, atļaujot tikai
dažus šifru komplektus, piemēram, tikai šifru komplektus ar PFS (Perfect Forward
Secrecy). Mēģināsim atļaut tikai šifru komplektus ar PFS, izmantojot
`TLSCipher*` parametrus.

::: noteimportant
Rezultāts nebūs savietojams ar sistēmām,
kas izmanto OpenSSL 1.0.1 un 1.0.2, ja tiek izmantots PSK. Uz sertifikātiem balstīta
šifrēšana būtu jādarbojas.
:::

Pievienojiet `test.conf` konfigurācijas failam divas rindas:

      TLSCipherCert=EECDH+aRSA+AES128
      TLSCipherPSK=kECDHEPSK+AES128

un testējiet vēlreiz:

      $ zabbix_sender -vv -c /home/zabbix/test.conf -k nonexisting_item -o 1 2>&1 | grep ciphersuites            
      zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA        
      zabbix_sender [42892]: DEBUG: zbx_tls_init_child() PSK ciphersuites: TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA        
      zabbix_sender [42892]: DEBUG: zbx_tls_init_child() certificate and PSK ciphersuites: TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA AES128-GCM-SHA256 AES128-CCM8 AES128-CCM AES128-SHA256 AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA PSK-AES128-GCM-SHA256 PSK-AES128-CCM8 PSK-AES128-CCM PSK-AES128-CBC-SHA256 PSK-AES128-CBC-SHA        

"certificate ciphersuites" un "PSK ciphersuites" saraksti ir mainījušies
— tie ir īsāki nekā iepriekš un satur tikai TLS 1.3 šifru komplektus un
TLS 1.2 ECDHE-\* šifru komplektus, kā bija sagaidāms.

**2.** TLSCipherAll un TLSCipherAll13 nevar testēt ar
zabbix\_sender; tie neietekmē iepriekšējā piemērā parādīto
"certificate and PSK ciphersuites" vērtību. Lai pielāgotu TLSCipherAll un
TLSCipherAll13, jums jāeksperimentē ar aģentu, starpniekserveri vai serveri.

Tātad, lai atļautu tikai PFS šifru komplektus, var būt nepieciešams pievienot līdz trim
parametriem

      TLSCipherCert=EECDH+aRSA+AES128
      TLSCipherPSK=kECDHEPSK+AES128
      TLSCipherAll=EECDH+aRSA+AES128:kECDHEPSK+AES128

failiem zabbix\_agentd.conf, zabbix\_proxy.conf un zabbix\_server\_conf, ja
katram no tiem ir konfigurēts sertifikāts un aģentam ir arī PSK.

Ja jūsu Zabbix vide izmanto tikai uz PSK balstītu šifrēšanu un neizmanto
sertifikātus, tad nepieciešams tikai viens:

      TLSCipherPSK=kECDHEPSK+AES128

Tagad, kad saprotat, kā tas darbojas, varat testēt šifru komplektu
atlasi pat ārpus Zabbix, izmantojot `openssl` komandu. Pārbaudīsim
visas trīs `TLSCipher*` parametru vērtības:

      $ openssl ciphers EECDH+aRSA+AES128 | sed 's/:/ /g'
      TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA
      $ openssl ciphers kECDHEPSK+AES128 | sed 's/:/ /g'
      TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
      $ openssl ciphers EECDH+aRSA+AES128:kECDHEPSK+AES128 | sed 's/:/ /g'
      TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES128-SHA ECDHE-PSK-AES128-CBC-SHA256 ECDHE-PSK-AES128-CBC-SHA
      

Iespējams, jūs dosiet priekšroku `openssl ciphers` ar `-V` opciju, lai iegūtu detalizētāku
izvadi:

      $ openssl ciphers -V EECDH+aRSA+AES128:kECDHEPSK+AES128
                0x13,0x02 - TLS_AES_256_GCM_SHA384  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(256) Mac=AEAD
                0x13,0x03 - TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any      Au=any  Enc=CHACHA20/POLY1305(256) Mac=AEAD
                0x13,0x01 - TLS_AES_128_GCM_SHA256  TLSv1.3 Kx=any      Au=any  Enc=AESGCM(128) Mac=AEAD
                0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
                0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
                0xC0,0x13 - ECDHE-RSA-AES128-SHA    TLSv1 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
                0xC0,0x37 - ECDHE-PSK-AES128-CBC-SHA256 TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA256
                0xC0,0x35 - ECDHE-PSK-AES128-CBC-SHA TLSv1 Kx=ECDHEPSK Au=PSK  Enc=AES(128)  Mac=SHA1

Līdzīgi varat testēt GnuTLS prioritāšu virknes:

      $ gnutls-cli -l --priority=NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
      Cipher suites for NONE:+VERS-TLS1.2:+ECDHE-RSA:+AES-128-GCM:+AES-128-CBC:+AEAD:+SHA256:+CURVE-ALL:+COMP-NULL:+SIGN-ALL:+CTYPE-X.509
      TLS_ECDHE_RSA_AES_128_GCM_SHA256                        0xc0, 0x2f      TLS1.2
      TLS_ECDHE_RSA_AES_128_CBC_SHA256                        0xc0, 0x27      TLS1.2
      
      Protocols: VERS-TLS1.2
      Ciphers: AES-128-GCM, AES-128-CBC
      MACs: AEAD, SHA256
      Key Exchange Algorithms: ECDHE-RSA
      Groups: GROUP-SECP256R1, GROUP-SECP384R1, GROUP-SECP521R1, GROUP-X25519, GROUP-X448, GROUP-FFDHE2048, GROUP-FFDHE3072, GROUP-FFDHE4096, GROUP-FFDHE6144, GROUP-FFDHE8192
      PK-signatures: SIGN-RSA-SHA256, SIGN-RSA-PSS-SHA256, SIGN-RSA-PSS-RSAE-SHA256, SIGN-ECDSA-SHA256, SIGN-ECDSA-SECP256R1-SHA256, SIGN-EdDSA-Ed25519, SIGN-RSA-SHA384, SIGN-RSA-PSS-SHA384, SIGN-RSA-PSS-RSAE-SHA384, SIGN-ECDSA-SHA384, SIGN-ECDSA-SECP384R1-SHA384, SIGN-EdDSA-Ed448, SIGN-RSA-SHA512, SIGN-RSA-PSS-SHA512, SIGN-RSA-PSS-RSAE-SHA512, SIGN-ECDSA-SHA512, SIGN-ECDSA-SECP521R1-SHA512, SIGN-RSA-SHA1, SIGN-ECDSA-SHA1

[comment]: # ({/52b821c4-bfb4ef88})

[comment]: # ({a549cda7-a549cda7})
##### Pārslēgšanās no AES128 uz AES256

Zabbix datiem kā iebūvēto noklusējuma algoritmu izmanto AES128. Pieņemsim, ka jūs
izmantojat sertifikātus un vēlaties pārslēgties uz AES256, izmantojot OpenSSL 1.1.1.

To var panākt, pievienojot attiecīgos parametrus
`zabbix_server.conf`:

      TLSCAFile=/home/zabbix/ca.crt
      TLSCertFile=/home/zabbix/server.crt
      TLSKeyFile=/home/zabbix/server.key
      TLSCipherCert13=TLS_AES_256_GCM_SHA384
      TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384
      TLSCipherPSK13=TLS_CHACHA20_POLY1305_SHA256
      TLSCipherPSK=kECDHEPSK+AES256:-SHA1
      TLSCipherAll13=TLS_AES_256_GCM_SHA384
      TLSCipherAll=EECDH+aRSA+AES256:-SHA1:-SHA384

::: noteimportant
Lai gan tiks izmantoti tikai ar sertifikātiem saistītie šifru komplekti,
ir definēti arī `TLSCipherPSK*` parametri, lai izvairītos no
to noklusējuma vērtībām, kas plašākas savietojamības dēļ ietver mazāk
drošus šifrus. PSK šifru komplektus nevar pilnībā atspējot
serverī/starpniekserverī.
:::

Un `zabbix_agentd.conf`:

      TLSConnect=cert
      TLSAccept=cert
      TLSCAFile=/home/zabbix/ca.crt
      TLSCertFile=/home/zabbix/agent.crt
      TLSKeyFile=/home/zabbix/agent.key
      TLSCipherCert13=TLS_AES_256_GCM_SHA384
      TLSCipherCert=EECDH+aRSA+AES256:-SHA1:-SHA384

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