[comment]: # ({822969ff-822969ff})
# 17 Шифровање

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

[comment]: # ({73039a5b-0b118c23})
#### Преглед

Zabbix подржава шифровану комуникацију између Zabbix компоненти користећи
Transport Layer Security (TLS) протокол v.1.2 и 1.3 (у зависности од
крипто библиотеке). Подржано је шифровање засновано на сертификатима и унапред дељеним кључевима.

Шифровање се може конфигурисати за везе:

-  Између Zabbix сервера, Zabbix проксија, Zabbix агента, Zabbix веб сервиса, zabbix\_sender
и zabbix\_get услужних програма
-  До Zabbix базе података [са Zabbix фронтенда и сервера/проксија](/manual/appendix/install/db_encrypt)
-  Између Zabbix кориснички интерфејс и Zabbix сервера

Шифровање је опционо и конфигурабилно за појединачне компоненте:

- Неки проксији и агенти могу бити конфигурисани да користе шифровање засновано на сертификатима са сервером, док други могу користити шифровање засновано на унапред дељеним кључевима, а трећи настављају са нешифрованом комуникацијом (као и раније).
- Сервер (прокси) може да користи различите конфигурације шифровања за различите домаћине.

Zabbix демон програми користе један порт за слушање за шифроване и нешифроване долазне везе. Додавање шифровања не захтева отварање нових портова на заштитним зидовима (фајерволима).

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

[comment]: # ({8fd79214-bdc6b202})
#### Ограничења

-  Приватни кључеви се чувају у обичном тексту у датотекама које Zabbix компоненте могу да читају током покретања
-  Унапред дељени кључеви се уносе у Zabbix кориснички интерфејс и чувају у Zabbix бази података у обичном тексту
-  Уграђена енкрипција не штити комуникацију:
-  Између веб сервера на којем се покреће Zabbix кориснички интерфејс и корисничког веб прегледача
-  Између Zabbix кориснички интерфејс и Zabbix сервера
-  Тренутно се свака шифрована веза отвара са потпуним TLS руковањем, нема кеширања сесије и тикети се не имплементирају
-  Додавање енкрипције повећава време за провере ставки и акције, у зависности од латенције мреже:
-  На пример, ако је кашњење пакета 100ms, онда отварање TCP везе и слање нешифрованог захтева траје око 200ms.
Са енкрипцијом се додаје око 1000ms за успостављање TLS везе;
-  Временска ограничења могу бити потребна за повећање, у супротном неке ставке и акције које покрећу удаљене скрипте на агентима могу радити са нешифрованим везама, али неће успети са временски ограниченим временом са шифрованим.
-  [network discovery](/manual/discovery/network_discovery) не подржава шифровање. Провере Zabbix агента које врши мрежно откривање биће нешифроване и ако је Zabbix агент конфигурисан да одбија нешифроване везе, такве провере неће бити успешне.

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

[comment]: # ({bac66f33-ba7ecc58})
#### Компилирање Zabbix-а са подршком за шифровање

Да би подржао шифровање, Zabbix мора бити компајлиран и повезан са једном од
подржаних крипто библиотека:

- GnuTLS - од верзије 3.1.18
- OpenSSL - верзије 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x
- LibreSSL - тестирано са верзијама 2.7.4, 2.8.2:
- LibreSSL 2.6.x није подржан
- LibreSSL је подржан као компатибилна замена за OpenSSL;
нове `tls_*()` LibreSSL-специфичне API функције се не користе.

Zabbix компоненте компајлиране са LibreSSL-ом неће моћи да користе PSK, могу се користити само сертификати.

:::notetip
Више о подешавању SSL-а за Zabbix кориснички интерфејс можете сазнати у овим [најбољим праксама](/manual/best_practices/security/cryptography#setting-up-ssl-for-zabbix-frontend).
:::

Библиотека се бира навођењем одговарајуће опције за
"configure" скрипту:

- `--with-gnutls[=DIR]`
- `--with-openssl[=DIR]` (also used for LibreSSL)

На пример, да бисте конфигурисали изворе за сервер и агента са
*OpenSSL* можете користити нешто попут:

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

Различите Zabbix компоненте могу бити компајлиране са различитим крипто
библиотекама (нпр. сервер са *OpenSSL*, агент са *GnuTLS*).

::: noteimportant
Ако планирате да користите унапред дељене кључеве (PSK),
размислите о коришћењу *GnuTLS* или *OpenSSL 1.1.0* (или новијих) библиотека у
Zabbix компонентама које користе PSK-ове. *GnuTLS* и *OpenSSL 1.1.0* библиотеке
подржавају PSK пакете шифровања са [Perfect Forward
Secrecy](https://en.wikipedia.org/wiki/Forward_secrecy#Perfect_forward_secrecy_.28PFS.29).
Старије верзије *OpenSSL* библиотеке (1.0.1, 1.0.2c) такође подржавају
PSK-ове, али доступни PSK пакети шифровања не пружају Perfect Forward
Secrecy.
:::

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

[comment]: # ({0f96d146-2d0e2b80})
#### Управљање шифровањем конекција

Конекције у Zabbix-у могу да користе:

- без шифровања (подразумевано)
- [RSA шифровање засновано на сертификату шифровање](/manual/encryption/using_certificates)
- [PSK шифровање засновано на сертификату](/manual/encryption/using_pre_shared_keys)

Постоје два важна параметра која се користе за одређивање шифровања између
Zabbix компоненти:

- TLSConnect - одређује које шифровање треба користити за одлазне конекције (нешифроване, PSK или сертификат)
- TLSAccept - одређује које врсте конекција су дозвољене за долазне конекције (нешифроване, PSK или сертификат). Може се навести једна или више вредности.

`TLSConnect` се користи у конфигурационим датотекама за Zabbix прокси (у
активном режиму, одређује само конекције са сервером) и Zabbix агент (за
активне провере). У Zabbix кориснички интерфејс, еквивалент TLSConnect је поље
*Везе са домаћином* у *Прикупљање података → Домаћини → <some
host> → Шифровање* и поље *Везе са проксијем* у
*Администрација → Проксији → <some proxy> → Шифровање*. Ако
конфигурисани тип шифровања за везу не успе, неће се покушати други типови шифровања.

`TLSAccept` се користи у конфигурационим датотекама за Zabbix прокси (у
пасивном режиму, наводи само везе са сервера) и Zabbix агента
(за пасивне провере). У Zabbix кориснички интерфејс, еквивалент TLSAccept је поље
*Везе са домаћином* у *Прикупљање података → Домаћини → <some
host> → Шифровање* и поље *Везе са проксија* у
*Администрација → Проксији → <some proxy> → Шифровање*.

Обично конфигуришете само један тип шифровања за долазне
везе. Али можда ћете желети да промените тип шифровања, нпр. са
нешифрованог на сертификат са минималним временом застоја и могућношћу враћања
на претходно стање. Да бисте то постигли:

- Поставите `TLSAccept=unencrypted,cert` у конфигурационој датотеци агента и поново покрените Zabbix агента
- Тестирајте везу са zabbix\_get до агента користећи сертификат. Ако ради, можете поново конфигурисати шифровање за тог агента у Zabbix кориснички интерфејс у *Прикупљање података → Домаћини → <some proxy> →
Шифровање* картицом постављањем *Везе са домаћином* на "Сертификат".
-  Када се кеш конфигурације сервера ажурира (и конфигурација проксија се ажурира ако домаћин прати прокси), онда ће везе са тим агентом бити шифроване
-  Ако све ради како се очекује, можете подесити `TLSAccept=cert` у конфигурационој датотеци агента и поново покренути Zabbix агент. Сада ће агент прихватати само шифроване везе засноване на сертификатима.
Нешифроване и PSK везе ће бити одбијене.

На сличан начин функционише на серверу и проксију. Ако је у Zabbix кориснички интерфејс у
конфигурацији домаћина *Везе са домаћином* подешено на "Сертификат", онда ће
само везе шифроване на основу сертификата бити прихваћене од
агента (активне провере) и zabbix\_sender (ставке трапера).

Највероватније ћете конфигурисати долазне и одлазне везе да користе
исти тип шифровања или никакво шифровање. Али технички је
могуће конфигурисати га асиметрично, нпр. шифровање на основу сертификата
за долазне и PSK-базирано за одлазне везе.

Конфигурација шифровања за сваки домаћин је приказана у Zabbix
кориснички интерфејс, у *Прикупљање података → Домаћини* у колони *Шифровање агента*.

На пример:

|Example|Connections to host|Allowed connections from host|Rejected connections from host|
|-------|-------------------|----------------------------|-----------------------------|
|![none\_none.png](../../assets/en/manual/encryption/none_none.png)|Нешифровано|Нешифровано|Шифровано, шифровано помоћу сертификата и PSK-а|
|![cert\_cert.png](../../assets/en/manual/encryption/cert_cert.png)|Шифровано, засновано на сертификату|Шифровано, засновано на сертификату|Нешифровано и шифровано помоћу PSK-а|
|![psk\_psk.png](../../assets/en/manual/encryption/psk_psk.png)|Шифровано, засновано на PSK-у|Шифровано, засновано на PSK-у|Нешифровано и шифровано помоћу сертификата|
|![psk\_none\_psk.png](../../assets/en/manual/encryption/psk_none_psk.png)|Шифровано, засновано на PSK-у|Нешифровано и шифровано засновано на PSK-у|Шифровано засновано на сертификату|
|![cert\_all.png](../../assets/en/manual/encryption/cert_all.png)|Шифровано, засновано на сертификату|Нешифровано, шифровано PSK-ом или засновано на сертификату|\-|

::: noteimportant
Везе су подразумевано нешифроване. Шифровање
мора бити конфигурисано за сваки домаћин и прокси појединачно.
:::

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

[comment]: # ({ad15e6ff-ad15e6ff})
#### zabbix\_get и zabbix\_sender са шифровањем

Погледајте странице упутства [zabbix\_get](/manpages/zabbix_get) и
[zabbix\_sender](/manpages/zabbix_sender) за њихово коришћење са
шифровањем.

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

[comment]: # ({aea937be-be2996e2})
#### Шифровани пакети

Шифровани пакети се подразумевано конфигуришу интерно током покретања Zabbix-а.

Такође, кориснички конфигурисани шифровани пакети су подржани за GnuTLS и OpenSSL. Корисници могу
[конфигурисати](#user-configured_ciphersuites) шифроване пакете у складу са
својим безбедносним политикама. Коришћење ове функције је опционо (уграђени
подразумевани шифровани пакети и даље раде).

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

|Library|Certificate ciphersuites|PSK ciphersuites|
|-------|-----------------------|----------------|
|*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<б r>|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-SHA2 56<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]: # ({/aea937be-be2996e2})

[comment]: # ({8731bb52-b5e04652})
#### Кориснички конфигурисани пакети шифри

Уграђени критеријуми за избор пакета шифри могу се заменити
кориснички конфигурисаним пакетима шифри.

::: noteimportant
Кориснички конфигурисани пакети шифри су функција намењена
напредним корисницима који разумеју TLS пакете шифри, њихову безбедност и
последице грешака и који су упознати са TLS решавањем проблема.
:::

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

|Override scope|Parameter|Value|Description|
|--|--|------|------|
|Ciphersuite selection for certificates|TLSCipherCert13|Важећи OpenSSL 1.1.1 [шифровани низови](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) за TLS 1.3 протокол (њихове вредности се прослеђују OpenSSL функцији `SSL_CTX_set_ciphersuites()`).|Критеријуми за избор пакета шифри засновани на сертификату за TLS 1.3<br><br>Само OpenSSL 1.1.1 или новији.|
|^|TLSCipherCert|Важећи OpenSSL [шифровани низови](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) за TLS 1.2 или важећи GnuTLS [приоритетни низови](https://gnutls.org/manual/html_node/Priority-Strings.html). Њихове вредности се прослеђују функцијама `SSL_CTX_set_cipher_list()` или `gnutls_priority_init()`, респективно.|Критеријуми за избор шифратног пакета засновани на сертификатима за TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|
|Combined ciphersuite list for certificate and PSK|TLSCipherPSK13|Важећи OpenSSL 1.1.1 [шифратне ниске](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) за TLS 1.3 протокол (њихове вредности се прослеђују OpenSSL функцији `SSL_CTX_set_ciphersuites()`).|Критеријуми за избор шифратног пакета засновани на PSK за TLS 1.3<br><br>Само OpenSSL 1.1.1 или новији.|
|^|TLSCipherPSK|Важећи OpenSSL [шифровани низови](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) за TLS 1.2 или важећи GnuTLS [приоритетни низови](https://gnutls.org/manual/html_node/Priority-Strings.html). Њихове вредности се прослеђују функцијама `SSL_CTX_set_cipher_list()` или `gnutls_priority_init()`, респективно.|Критеријуми за избор шифрованог пакета засновани на PSK-у за TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|
|Combined ciphersuite list for certificate and PSK|TLSCipherAll13|Важећи OpenSSL 1.1.1 [шифровани низови](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) за TLS 1.3 протокол (њихове вредности се прослеђују OpenSSL функцији `SSL_CTX_set_ciphersuites()`).|Критеријуми за избор шифрованог низа за TLS 1.3<br><br>Само OpenSSL 1.1.1 или новији.|
|^|TLSCipherAll|Важећи OpenSSL [шифровани низови](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) за TLS 1.2 или важећи GnuTLS [приоритетни низови](https://gnutls.org/manual/html_node/Priority-Strings.html). Њихове вредности се прослеђују функцијама `SSL_CTX_set_cipher_list()` или `gnutls_priority_init()`, респективно.|Критеријуми за избор пакета шифри за TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|

Да бисте поништили избор пакета шифри у услужним програмима
[zabbix\_get](/manpages/zabbix_get) и
[zabbix\_sender](/manpages/zabbix_sender) - користите
параметре командне линије:

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

Нови параметри су опциони. Ако параметар није наведен, користи се
интерна подразумевана вредност. Ако је параметар дефинисан, не може бити
празан.

Ако подешавање вредности TLSCipher\* у крипто библиотеци не успе, онда
сервер, прокси или агент се неће покренути и евидентираће се грешка.

Важно је разумети када је сваки параметар применљив.

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

[comment]: # ({ca5e66e4-a74c28c7})
##### Одлазне везе

Најједноставнији случај су одлазне везе:

-  За одлазне везе са сертификатом - користите TLSCipherCert13 или
    TLSCipherCert
-  За одлазне везе са PSK - користите TLSCipherPSK13 или
    TLSCipherPSK
-  У случају zabbix\_get и zabbix\_sender услужних програма командну линију
    могу се користити параметри `--tls-cipher13` или `--tls-cipher`
    (шифровање је недвосмислено наведено са `--tls-connect`
    параметар)

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

[comment]: # ({08b6eac5-3edf3b2b})
##### Долазне везе

Мало је компликованије са долазним везама јер су правила
специфична за компоненте и конфигурацију.

За Zabbix **агент**:

|Agent connection setup|Cipher configuration|
|----------------------|--------------------|
|TLSConnect=cert|TLSCipherCert, TLSCipherCert13|
|TLSConnect=psk|TLSCipherPSK, TLSCipherPSK13|
|TLSAccept=cert|TLSCipherCert, TLSCipherCert13|
|TLSAccept=psk|TLSCipherPSK, TLSCipherPSK13|
|TLSAccept=cert,psk|TLSCipherAll, TLSCipherAll13|

За Zabbix **сервер** и **прокси**:

|Connection setup|Cipher configuration|
|----------------|--------------------|
|Одлазне везе користећи PSK|TLSCipherPSK, TLSCipherPSK13|
|Долазне везе користећи сертификате|TLSCipherAll, TLSCipherAll13|
|Долазне везе користећи PSK ако сервер нема сертификат|TLSCipherPSK, TLSCipherPSK13|
|Долазне везе користећи PSK ако сервер има сертификат|TLSCipherAll, TLSCipherAll13|

Неки образац се може видети у две горње табеле:

- TLSCipherAll и TLSCipherAll13 могу се навести само ако се користи комбинована
листа шифрантних пакета заснованих на сертификатима **и** PSK. Постоје два случаја када се то дешава: сервер (прокси) са конфигурисаним сертификатом (PSK пакети шифровања су увек конфигурисани на серверу, прокси ако крипто библиотека подржава PSK), агент конфигурисан да прихвати и долазне везе засноване на сертификату и PSK-у
- у другим случајевима TLSCipherCert\* и/или TLSCipherPSK\* су довољни

Следеће табеле приказују уграђене подразумеване вредности `TLSCipher*`. Оне
могу бити добра полазна тачка за ваше сопствене прилагођене вредности.

|Parameter|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|

|Parameter|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**^ Подразумеване вредности се разликују за старије верзије OpenSSL-а (1.0.1,
1.0.2, 1.1.0), за LibreSSL и ако је OpenSSL компајлиран без PSK
подршке.

**Примери кориснички конфигурисаних пакета шифровања**

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

- [Тестирање низова шифровања и дозвољавање само PFS пакета шифровања](#testing_cipher_strings_and_allowing_only_pfs_ciphersuites)
- [Пребацивање са AES128 на AES256](#switching_from_aes128_to_aes256)

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

[comment]: # ({52b821c4-bfb4ef88})
##### Тестирање низова шифровања и дозвољавање само PFS шифрантних пакета

Да бисте видели који су пакети шифри изабрани, потребно је да подесите
'DebugLevel=4' у конфигурационом фајлу или користите опцију `-vv` за
zabbix\_sender.

Можда ће бити потребно мало експериментисања са параметрима `TLSCipher*`
пре него што добијете жељене пакете шифри. Незгодно је поново покретати
Zabbix сервер, прокси или агент више пута само да би се подесио `TLSCipher*`
параметри. Погодније опције су коришћење zabbix\_sender или
`openssl` команда. Покажимо оба.

**1.** Користите zabbix\_sender.

Направимо, на пример, тестну конфигурациону датотеку
`/home/zabbix/test.conf`, са синтаксом датотеке `zabbix_agentd.conf`:

  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

За овај пример су вам потребни важећи CA и агентски сертификати и PSK.
Прилагодите путање и имена датотека сертификата и PSK-а за своје окружење.
  
Ако не користите сертификате, већ само PSK, можете направити једноставнији
тест фајла:

  Hostname=nonexisting
  ServerActive=nonexisting

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

Изабрани пакети шифровања могу се видети покретањем команде zabbix\_sender (пример
компајлирано са 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

Овде видите пакете шифровања изабране по подразумеваним подешавањима. Ове подразумеване вредности
су изабрани да би се осигурала интероперабилност са Zabbix агентима који раде на
системи са старијим верзијама OpenSSL-а (од 1.0.1).

Са новијим системима можете појачати безбедност тако што ћете дозволити само
неколико шифратних пакета, нпр. само шифратни пакети са PFS-ом (Perfect Forward
Secrecy). Покушајмо да дозволимо само шифроване пакете са PFS-ом користећи
`TLSCipher*` параметре.

::: noteimportant
Резултат неће бити интероперабилан са системима
користећи OpenSSL 1.0.1 и 1.0.2, ако се користи PSK. Засновано на сертификату
шифровање би требало да ради.
:::

Додајте два реда у конфигурациону датотеку `test.conf`:

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

и поново тестирајте:

  $ 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" и "PSK ciphersuites" су се промениле
- краћи су него раније, садрже само TLS 1.3 шифре и
TLS 1.2 ECDHE-\* пакети шифровања као што се и очекивало.

**2.** TLSCipherAll и TLSCipherAll13 не може се тестирати са
zabbix\_sender; они не утичу "certificate and PSK ciphersuites"
вредност приказана у горњем примеру. Да бисте подесили TLSCipherAll и
TLSCipherAll13 Потребно је да експериментишете са агентом, проксијем или сервером.

Дакле, да бисте дозволили само PFS шифре, можда ћете морати да додате до три
параметара

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

to zabbix\_agentd.conf, zabbix\_proxy.conf and zabbix\_server\_conf ако
сваки од њих има конфигурисан сертификат, а агент такође има PSK.

Ако ваше Zabbix окружење користи само PSK шифровање и не
сертификати, онда само један:

  TLSCipherPSK=kECDHEPSK+AES128

Сада када разумете како функционише, можете тестирати пакет шифровања
избор чак и ван Zabbix-а, помоћу команде `openssl`. Хајде да тестирамо
све три вредности параметра `TLSCipher*`:

  $ 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


Можда бисте преферирали `openssl шифре` са опцијом `-V` за детаљнији приказ
излаз:

  $ 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_SHA256TLSv1.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

Слично томе, можете тестирати стрингове приоритета за GnuTLS:

  $ 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})
##### Прелазак са AES128 на AES256

Zabbix користи AES128 као уграђени подразумевани сертификат за податке. Претпоставимо да користите сертификате и желите да пређете на AES256, на OpenSSL 1.1.1.

Ово се може постићи додавањем одговарајућих параметара у
`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
Иако ће се користити само пакети шифровања повезани са сертификатима,
параметри `TLSCipherPSK*` су такође дефинисани како би се избегле
њихове подразумеване вредности које укључују мање безбедне шифре ради шире
интероперабилности. PSK пакети шифровања не могу се потпуно онемогућити на
серверу/проксију.
:::

И у `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})
