[comment]: # ({822969ff-822969ff})
# 17 Verschlüsselung

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

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

Zabbix unterstützt verschlüsselte Kommunikation zwischen Zabbix-Komponenten unter Verwendung des Transport Layer Security (TLS)-Protokolls v.1.2 und 1.3 (abhängig von der Kryptobibliothek). Zertifikatsbasierte und auf vorinstallierten Schlüsseln basierende Verschlüsselung werden unterstützt.

Verschlüsselung kann für Verbindungen konfiguriert werden:

-   Zwischen Zabbix Server, Zabbix Proxy, Zabbix Agent, Zabbix-Webservice sowie den Dienstprogrammen zabbix\_sender und zabbix\_get
-   Zur Zabbix-Datenbank [vom Zabbix Frontend und Server/Proxy](/manual/appendix/install/db_encrypt)
-   Zwischen Zabbix Frontend und Zabbix Server

Die Verschlüsselung ist optional und für einzelne Komponenten konfigurierbar:

-   Einige Proxys und Agents können so konfiguriert werden, dass sie zertifikatsbasierte Verschlüsselung mit dem Server verwenden, während andere auf vorinstallierten Schlüsseln basierende Verschlüsselung nutzen und wieder andere weiterhin unverschlüsselte Kommunikation verwenden (wie bisher).
-   Server (Proxy) kann unterschiedliche Verschlüsselungskonfigurationen für verschiedene Hosts verwenden.

Zabbix-Daemon-Programme verwenden einen Listening-Port sowohl für verschlüsselte als auch für unverschlüsselte eingehende Verbindungen. Das Hinzufügen von Verschlüsselung erfordert nicht das Öffnen neuer Ports in Firewalls.

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

[comment]: # ({8fd79214-bdc6b202})
#### Einschränkungen

-   Private Schlüssel werden im Klartext in Dateien gespeichert, die beim Start von Zabbix-Komponenten lesbar sind.
-   Pre-shared Keys werden im Zabbix Frontend eingegeben und im Klartext in der Zabbix-Datenbank gespeichert.
-   Die integrierte Verschlüsselung schützt die Kommunikation zwischen dem Webserver, auf dem das Zabbix Frontend läuft, und dem Webbrowser des Benutzers nicht.
-   Derzeit wird jede verschlüsselte Verbindung mit einem vollständigen TLS-Handshake aufgebaut; Session-Caching und Tickets sind nicht implementiert.
-   Das Hinzufügen von Verschlüsselung erhöht abhängig von der Netzwerklatenz die Zeit für Datenpunkt-Prüfungen und Aktionen:
    -   Wenn die Paketverzögerung beispielsweise 100 ms beträgt, dauert das Öffnen einer TCP-Verbindung und das Senden einer unverschlüsselten Anfrage etwa 200 ms.
        Mit Verschlüsselung kommen für den Aufbau der TLS-Verbindung etwa 1000 ms hinzu.
    -   Möglicherweise müssen Timeouts erhöht werden, andernfalls können einige Datenpunkte und Aktionen, die entfernte Skripte auf Agents ausführen, mit unverschlüsselten Verbindungen funktionieren, mit verschlüsselten jedoch wegen eines Timeouts fehlschlagen.
-   Verschlüsselung wird von der [Netzwerkerkennung](/manual/discovery/network_discovery) nicht unterstützt. Von der Netzwerkerkennung durchgeführte Zabbix-Agent-Prüfungen sind unverschlüsselt, und wenn der Zabbix-Agent so konfiguriert ist, dass er unverschlüsselte Verbindungen ablehnt, werden solche Prüfungen nicht erfolgreich sein.

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

[comment]: # ({bac66f33-ba7ecc58})
#### Kompilieren von Zabbix mit Verschlüsselungsunterstützung

Um Verschlüsselung zu unterstützen, muss Zabbix mit einer der
unterstützten Kryptobibliotheken kompiliert und gelinkt werden:

-   GnuTLS - ab Version 3.1.18
-   OpenSSL - Versionen 1.0.1, 1.0.2, 1.1.0, 1.1.1, 3.0.x
-   LibreSSL - getestet mit den Versionen 2.7.4, 2.8.2:
    -   LibreSSL 2.6.x wird nicht unterstützt
    -   LibreSSL wird als kompatibler Ersatz für OpenSSL unterstützt;
        die neuen LibreSSL-spezifischen API-Funktionen `tls_*()` werden nicht verwendet.
        Mit LibreSSL kompilierte Zabbix-Komponenten können PSK nicht verwenden,
        es können nur Zertifikate genutzt werden.

:::notetip
Weitere Informationen zur Einrichtung von SSL für das Zabbix Frontend finden Sie in diesen [Best Practices](/manual/best_practices/security/cryptography#setting-up-ssl-for-zabbix-frontend).
:::

Die Bibliothek wird ausgewählt, indem die entsprechende Option für das
Skript "configure" angegeben wird:

-   `--with-gnutls[=DIR]`
-   `--with-openssl[=DIR]` (wird auch für LibreSSL verwendet)

Um beispielsweise die Quellen für Server und Agent mit
*OpenSSL* zu konfigurieren, können Sie etwa Folgendes verwenden:

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

Verschiedene Zabbix-Komponenten können mit unterschiedlichen
Kryptobibliotheken kompiliert werden (z. B. ein Server mit *OpenSSL*, ein Agent mit *GnuTLS*).

::: noteimportant
 Wenn Sie die Verwendung von Pre-Shared Keys (PSK) planen,
sollten Sie in Zabbix-Komponenten, die PSKs verwenden, *GnuTLS* oder *OpenSSL 1.1.0* (oder neuer) einsetzen. Die Bibliotheken *GnuTLS* und *OpenSSL 1.1.0*
unterstützen PSK-Chiffriersuiten mit [Perfect Forward
Secrecy](https://en.wikipedia.org/wiki/Forward_secrecy#Perfect_forward_secrecy_.28PFS.29).
Ältere Versionen der *OpenSSL*-Bibliothek (1.0.1, 1.0.2c) unterstützen
ebenfalls PSKs, aber die verfügbaren PSK-Chiffriersuiten bieten keine Perfect Forward
Secrecy. 
:::

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

[comment]: # ({0f96d146-2d0e2b80})
#### Verwaltung der Verbindungsverschlüsselung

Verbindungen in Zabbix können Folgendes verwenden:

-   keine Verschlüsselung (Standard)
-   [RSA-zertifikatbasierte
    Verschlüsselung](/manual/encryption/using_certificates)
-   [PSK-basierte Verschlüsselung](/manual/encryption/using_pre_shared_keys)

Es gibt zwei wichtige Parameter, mit denen die Verschlüsselung zwischen
Zabbix-Komponenten festgelegt wird:

-   TLSConnect - gibt an, welche Verschlüsselung für ausgehende
    Verbindungen verwendet werden soll (unverschlüsselt, PSK oder Zertifikat)
-   TLSAccept - gibt an, welche Verbindungstypen für eingehende
    Verbindungen erlaubt sind (unverschlüsselt, PSK oder Zertifikat). Es
    können ein oder mehrere Werte angegeben werden.

`TLSConnect` wird in den Konfigurationsdateien für Zabbix Proxy (im
aktiven Modus gibt dies nur Verbindungen zum Server an) und Zabbix Agent
(für aktive Prüfungen) verwendet. Im Zabbix Frontend ist das
Äquivalent zu TLSConnect das Feld *Verbindungen zum Host* im Reiter
*Datenerfassung → Hosts → <ein Host> → Verschlüsselung* sowie das Feld
*Verbindungen zum Proxy* im Reiter *Administration → Proxys → <ein
Proxy> → Verschlüsselung*. Wenn der konfigurierte Verschlüsselungstyp
für die Verbindung fehlschlägt, werden keine anderen
Verschlüsselungstypen ausprobiert.

`TLSAccept` wird in den Konfigurationsdateien für Zabbix Proxy (im
passiven Modus gibt dies nur Verbindungen vom Server an) und Zabbix
Agent (für passive Prüfungen) verwendet. Im Zabbix Frontend ist das
Äquivalent zu TLSAccept das Feld *Verbindungen vom Host* im Reiter
*Datenerfassung → Hosts → <ein Host> → Verschlüsselung* sowie das Feld
*Verbindungen vom Proxy* im Reiter *Administration → Proxys → <ein
Proxy> → Verschlüsselung*.

Normalerweise konfigurieren Sie nur einen Verschlüsselungstyp für
eingehende Verbindungen. Möglicherweise möchten Sie den
Verschlüsselungstyp jedoch wechseln, z. B. von unverschlüsselt zu
zertifikatbasiert, mit minimaler Ausfallzeit und der Möglichkeit zum
Rollback. Gehen Sie dazu wie folgt vor:

-   Setzen Sie `TLSAccept=unencrypted,cert` in der Konfigurationsdatei
    des Agent und starten Sie den Zabbix Agent neu.
-   Testen Sie die Verbindung zum Agent mit zabbix\_get unter Verwendung
    eines Zertifikats. Wenn dies funktioniert, können Sie die
    Verschlüsselung für diesen Agent im Zabbix Frontend im Reiter
    *Datenerfassung → Hosts → <ein Host> → Verschlüsselung* neu
    konfigurieren, indem Sie *Verbindungen zum Host* auf „Zertifikat“
    setzen.
-   Wenn der Konfigurations-Cache des Server aktualisiert wird (und die
    Proxy-Konfiguration aktualisiert wird, falls der Host von einem
    Proxy überwacht wird), werden die Verbindungen zu diesem Agent
    verschlüsselt.
-   Wenn alles wie erwartet funktioniert, können Sie
    `TLSAccept=cert` in der Konfigurationsdatei des Agent setzen und den
    Zabbix Agent neu starten. Der Agent akzeptiert dann nur noch
    verschlüsselte zertifikatbasierte Verbindungen. Unverschlüsselte und
    PSK-basierte Verbindungen werden abgelehnt.

Auf ähnliche Weise funktioniert dies bei Server und Proxy. Wenn im
Zabbix Frontend in der Host-Konfiguration *Verbindungen vom Host* auf
„Zertifikat“ gesetzt ist, werden vom Agent (aktive Prüfungen) und von
zabbix\_sender (Trapper-Datenpunkte) nur zertifikatbasiert
verschlüsselte Verbindungen akzeptiert.

Sehr wahrscheinlich werden Sie eingehende und ausgehende Verbindungen so
konfigurieren, dass derselbe Verschlüsselungstyp verwendet wird oder
überhaupt keine Verschlüsselung. Technisch ist jedoch auch eine
asymmetrische Konfiguration möglich, z. B. zertifikatbasierte
Verschlüsselung für eingehende und PSK-basierte für ausgehende
Verbindungen.

Die Verschlüsselungskonfiguration für jeden Host wird im Zabbix
Frontend unter *Datenerfassung → Hosts* in der Spalte
*Agent-Verschlüsselung* angezeigt. Zum Beispiel:

|Beispiel|Verbindungen zum Host|Erlaubte Verbindungen vom Host|Abgelehnte Verbindungen vom Host|
|-------|-------------------|-----------------------------|------------------------------|
|![none\_none.png](../../assets/en/manual/encryption/none_none.png)|Unverschlüsselt|Unverschlüsselt|Verschlüsselt, zertifikatbasiert und PSK-basiert verschlüsselt|
|![cert\_cert.png](../../assets/en/manual/encryption/cert_cert.png)|Verschlüsselt, zertifikatbasiert|Verschlüsselt, zertifikatbasiert|Unverschlüsselt und PSK-basiert verschlüsselt|
|![psk\_psk.png](../../assets/en/manual/encryption/psk_psk.png)|Verschlüsselt, PSK-basiert|Verschlüsselt, PSK-basiert|Unverschlüsselt und zertifikatbasiert verschlüsselt|
|![psk\_none\_psk.png](../../assets/en/manual/encryption/psk_none_psk.png)|Verschlüsselt, PSK-basiert|Unverschlüsselt und PSK-basiert verschlüsselt|Zertifikatbasiert verschlüsselt|
|![cert\_all.png](../../assets/en/manual/encryption/cert_all.png)|Verschlüsselt, zertifikatbasiert|Unverschlüsselt, PSK- oder zertifikatbasiert verschlüsselt|\-|

::: noteimportant
Verbindungen sind standardmäßig unverschlüsselt. Die Verschlüsselung
muss für jeden Host und Proxy einzeln konfiguriert werden.
:::

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

[comment]: # ({ad15e6ff-ad15e6ff})
#### zabbix\_get und zabbix\_sender mit Verschlüsselung

Siehe die Manpages zu [zabbix\_get](/manpages/zabbix_get) und
[zabbix\_sender](/manpages/zabbix_sender) für Informationen zur Verwendung mit
Verschlüsselung.

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

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

Cipher-Suites werden standardmäßig intern während des Zabbix-Starts konfiguriert.

Auch benutzerkonfigurierte Cipher-Suites werden für GnuTLS und OpenSSL unterstützt. Benutzer können
Cipher-Suites entsprechend ihren Sicherheitsrichtlinien
[konfigurieren](#userconfigured-ciphersuites). Die Verwendung dieser Funktion ist optional (die integrierten
Standard-Cipher-Suites funktionieren weiterhin).

Bei Kryptobibliotheken, die mit Standardeinstellungen kompiliert wurden, führen die integrierten
Zabbix-Regeln typischerweise zu den folgenden Cipher-Suites (in der Reihenfolge von
höherer zu niedrigerer Priorität):

|Bibliothek|Zertifikat-Cipher-Suites|PSK-Cipher-Suites|
|-------|------------------------|----------------|
|*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})
#### Benutzerdefinierte Ciphersuites

Die integrierten Auswahlkriterien für Ciphersuites können durch
benutzerdefinierte Ciphersuites überschrieben werden.

::: noteimportant
Benutzerdefinierte Ciphersuites sind eine Funktion für
fortgeschrittene Benutzer, die TLS-Ciphersuites, deren Sicherheit und
die Folgen von Fehlern verstehen und mit der Fehlerbehebung bei TLS
vertraut sind.
:::

Die integrierten Auswahlkriterien für Ciphersuites können mit den
folgenden Parametern überschrieben werden:

|Überschreibungsbereich|Parameter|Wert|Beschreibung|
|--|--|------|------|
|Ciphersuite-Auswahl für Zertifikate|TLSCipherCert13|Gültige OpenSSL 1.1.1-[cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) für das TLS-1.3-Protokoll (ihre Werte werden an die OpenSSL-Funktion `SSL_CTX_set_ciphersuites()` übergeben).|Auswahlkriterien für zertifikatbasierte Ciphersuites für TLS 1.3<br><br>Nur OpenSSL 1.1.1 oder neuer.|
|^|TLSCipherCert|Gültige OpenSSL-[cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) für TLS 1.2 oder gültige GnuTLS-[priority strings](https://gnutls.org/manual/html_node/Priority-Strings.html). Ihre Werte werden jeweils an die Funktionen `SSL_CTX_set_cipher_list()` oder `gnutls_priority_init()` übergeben.|Auswahlkriterien für zertifikatbasierte Ciphersuites für TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|
|Ciphersuite-Auswahl für PSK|TLSCipherPSK13|Gültige OpenSSL 1.1.1-[cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) für das TLS-1.3-Protokoll (ihre Werte werden an die OpenSSL-Funktion `SSL_CTX_set_ciphersuites()` übergeben).|Auswahlkriterien für PSK-basierte Ciphersuites für TLS 1.3<br><br>Nur OpenSSL 1.1.1 oder neuer.|
|^|TLSCipherPSK|Gültige OpenSSL-[cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) für TLS 1.2 oder gültige GnuTLS-[priority strings](https://gnutls.org/manual/html_node/Priority-Strings.html). Ihre Werte werden jeweils an die Funktionen `SSL_CTX_set_cipher_list()` oder `gnutls_priority_init()` übergeben.|Auswahlkriterien für PSK-basierte Ciphersuites für TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|
|Kombinierte Ciphersuite-Liste für Zertifikat und PSK|TLSCipherAll13|Gültige OpenSSL 1.1.1-[cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) für das TLS-1.3-Protokoll (ihre Werte werden an die OpenSSL-Funktion `SSL_CTX_set_ciphersuites()` übergeben).|Auswahlkriterien für Ciphersuites für TLS 1.3<br><br>Nur OpenSSL 1.1.1 oder neuer.|
|^|TLSCipherAll|Gültige OpenSSL-[cipher strings](https://www.openssl.org/docs/man1.1.1/man1/ciphers.html) für TLS 1.2 oder gültige GnuTLS-[priority strings](https://gnutls.org/manual/html_node/Priority-Strings.html). Ihre Werte werden jeweils an die Funktionen `SSL_CTX_set_cipher_list()` oder `gnutls_priority_init()` übergeben.|Auswahlkriterien für Ciphersuites für TLS 1.2/1.3 (GnuTLS), TLS 1.2 (OpenSSL)|

Um die Ciphersuite-Auswahl in den Dienstprogrammen
[zabbix\_get](/manpages/zabbix_get) und
[zabbix\_sender](/manpages/zabbix_sender) zu überschreiben, verwenden Sie die
Befehlszeilenparameter:

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

Die neuen Parameter sind optional. Wenn ein Parameter nicht angegeben
wird, wird der interne Standardwert verwendet. Wenn ein Parameter
definiert ist, darf er nicht leer sein.

Wenn das Setzen eines TLSCipher\*-Werts in der Kryptobibliothek
fehlschlägt, werden Server, Proxy oder Agent nicht gestartet und ein
Fehler wird protokolliert.

Es ist wichtig zu verstehen, wann jeder Parameter anwendbar ist.

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

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

Der einfachste Fall sind ausgehende Verbindungen:

-   Für ausgehende Verbindungen mit Zertifikat verwenden Sie TLSCipherCert13 oder
    TLSCipherCert
-   Für ausgehende Verbindungen mit PSK verwenden Sie TLSCipherPSK13 oder
    TLSCipherPSK
-   Bei den Dienstprogrammen zabbix\_get und zabbix\_sender können die
    Befehlszeilenparameter `--tls-cipher13` oder `--tls-cipher` verwendet werden
    (die Verschlüsselung wird eindeutig mit dem Parameter `--tls-connect`
    angegeben)

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

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

Bei eingehenden Verbindungen ist es etwas komplizierter, da die Regeln
für Komponenten und Konfiguration spezifisch sind.

Für Zabbix **Agent**:

|Agent-Verbindungseinrichtung|Chiffrenkonfiguration|
|----------------------------|---------------------|
|TLSConnect=cert|TLSCipherCert, TLSCipherCert13|
|TLSConnect=psk|TLSCipherPSK, TLSCipherPSK13|
|TLSAccept=cert|TLSCipherCert, TLSCipherCert13|
|TLSAccept=psk|TLSCipherPSK, TLSCipherPSK13|
|TLSAccept=cert,psk|TLSCipherAll, TLSCipherAll13|

Für Zabbix **Server** und **Proxy**:

|Verbindungseinrichtung|Chiffrenkonfiguration|
|----------------------|---------------------|
|Ausgehende Verbindungen mit PSK|TLSCipherPSK, TLSCipherPSK13|
|Eingehende Verbindungen mit Zertifikaten|TLSCipherAll, TLSCipherAll13|
|Eingehende Verbindungen mit PSK, wenn der Server kein Zertifikat hat|TLSCipherPSK, TLSCipherPSK13|
|Eingehende Verbindungen mit PSK, wenn der Server ein Zertifikat hat|TLSCipherAll, TLSCipherAll13|

In den beiden obigen Tabellen ist ein bestimmtes Muster zu erkennen:

-   TLSCipherAll und TLSCipherAll13 können nur angegeben werden, wenn eine kombinierte
    Liste von Chiffrensammlungen auf Zertifikats- **und** PSK-Basis verwendet wird. Es
    gibt zwei Fälle, in denen dies zutrifft: Server (Proxy) mit einem konfigurierten
    Zertifikat (PSK-Chiffrensammlungen werden auf Server und Proxy immer konfiguriert,
    wenn die Kryptobibliothek PSK unterstützt), Agent so konfiguriert, dass sowohl
    eingehende Verbindungen auf Zertifikats- als auch auf PSK-Basis akzeptiert werden
-   in anderen Fällen sind TLSCipherCert\* und/oder TLSCipherPSK\* ausreichend

Die folgenden Tabellen zeigen die integrierten Standardwerte von `TLSCipher*`. Sie
können ein guter Ausgangspunkt für Ihre eigenen benutzerdefinierten Werte sein.

|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**^ Die Standardwerte unterscheiden sich bei älteren OpenSSL-Versionen (1.0.1,
1.0.2, 1.1.0), bei LibreSSL und wenn OpenSSL ohne PSK-Unterstützung kompiliert wurde.

**Beispiele für benutzerkonfigurierte Chiffrensammlungen**

Nachfolgend finden Sie Beispiele für benutzerkonfigurierte Chiffrensammlungen:

-   [Testen von Cipher-Strings und Zulassen nur von PFS-Chiffrensammlungen](#testing-cipher-strings-and-allowing-only-pfs-ciphersuites)
-   [Wechsel von AES128 zu AES256](#switching-from-aes128-to-aes256)

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

[comment]: # ({52b821c4-bfb4ef88})
##### Testen von Cipher-Strings und Zulassen nur von PFS-Cipher-Suites

Um zu sehen, welche Cipher-Suites ausgewählt wurden, müssen Sie
`DebugLevel=4` in der Konfigurationsdatei setzen oder die Option `-vv`
für zabbix\_sender verwenden.

Möglicherweise ist etwas Experimentieren mit den Parametern
`TLSCipher*` erforderlich, bevor Sie die gewünschten Cipher-Suites
erhalten. Es ist unpraktisch, den Zabbix Server, Proxy oder Agent
mehrfach neu zu starten, nur um die Parameter `TLSCipher*` anzupassen.
Bequemer ist die Verwendung von zabbix\_sender oder des Befehls
`openssl`. Sehen wir uns beides an.

**1.** Verwendung von zabbix\_sender.

Erstellen wir eine Test-Konfigurationsdatei, zum Beispiel
`/home/zabbix/test.conf`, mit der Syntax einer
`zabbix_agentd.conf`-Datei:

      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

Für dieses Beispiel benötigen Sie gültige CA- und Agent-Zertifikate
sowie einen PSK. Passen Sie Zertifikats- und PSK-Dateipfade und -namen
an Ihre Umgebung an.

Wenn Sie keine Zertifikate, sondern nur PSK verwenden, können Sie eine
einfachere Testdatei erstellen:

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

Die ausgewählten Cipher-Suites können durch Ausführen von
zabbix\_sender angezeigt werden (Beispiel kompiliert mit 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

Hier sehen Sie die standardmäßig ausgewählten Cipher-Suites. Diese
Standardwerte wurden so gewählt, dass die Interoperabilität mit Zabbix
Agents auf Systemen mit älteren OpenSSL-Versionen (ab 1.0.1)
gewährleistet ist.

Auf neueren Systemen können Sie die Sicherheit erhöhen, indem Sie nur
wenige Cipher-Suites zulassen, z. B. nur Cipher-Suites mit PFS (Perfect
Forward Secrecy). Versuchen wir, mit den Parametern `TLSCipher*` nur
Cipher-Suites mit PFS zuzulassen.

::: noteimportant
Das Ergebnis ist nicht interoperabel mit Systemen,
die OpenSSL 1.0.1 und 1.0.2 verwenden, wenn PSK verwendet wird.
Zertifikatbasierte Verschlüsselung sollte funktionieren.
:::

Fügen Sie der Konfigurationsdatei `test.conf` zwei Zeilen hinzu:

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

und testen Sie erneut:

      $ 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        

Die Listen „certificate ciphersuites“ und „PSK ciphersuites“ haben sich
geändert – sie sind kürzer als zuvor und enthalten wie erwartet nur TLS
1.3-Cipher-Suites und TLS 1.2 ECDHE-\*-Cipher-Suites.

**2.** TLSCipherAll und TLSCipherAll13 können nicht mit
zabbix\_sender getestet werden; sie beeinflussen nicht den Wert
„certificate and PSK ciphersuites“, der im obigen Beispiel angezeigt
wird. Um TLSCipherAll und TLSCipherAll13 anzupassen, müssen Sie mit dem
Agent, Proxy oder Server experimentieren.

Um also nur PFS-Cipher-Suites zuzulassen, müssen Sie möglicherweise bis
zu drei Parameter

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

zu zabbix\_agentd.conf, zabbix\_proxy.conf und zabbix\_server\_conf
hinzufügen, wenn für jeden von ihnen ein Zertifikat konfiguriert ist
und der Agent zusätzlich PSK verwendet.

Wenn Ihre Zabbix-Umgebung nur PSK-basierte Verschlüsselung und keine
Zertifikate verwendet, dann nur diesen einen:

      TLSCipherPSK=kECDHEPSK+AES128

Nachdem Sie nun verstanden haben, wie es funktioniert, können Sie die
Auswahl der Cipher-Suites sogar außerhalb von Zabbix mit dem Befehl
`openssl` testen. Testen wir alle drei Werte der Parameter
`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
      

Möglicherweise bevorzugen Sie `openssl ciphers` mit der Option `-V` für
eine ausführlichere Ausgabe:

      $ 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

Ebenso können Sie die Prioritäts-Strings für GnuTLS testen:

      $ 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})
##### Wechsel von AES128 zu AES256

Zabbix verwendet AES128 als integrierten Standard für Daten. Nehmen wir an, Sie
verwenden Zertifikate und möchten unter OpenSSL 1.1.1 auf AES256 umstellen.

Dies kann durch Hinzufügen der entsprechenden Parameter in
`zabbix_server.conf` erreicht werden:

      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
Obwohl nur zertifikatsbezogene Cipher Suites
verwendet werden, sind auch die Parameter `TLSCipherPSK*` definiert, um
deren Standardwerte zu vermeiden, die für eine breitere
Interoperabilität weniger sichere Chiffren enthalten. PSK-Cipher-Suites können auf
Server/Proxy nicht vollständig deaktiviert werden.
:::

Und in `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})
