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

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

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

Zabbix unterstützt verschlüsselte Kommunikation zwischen Zabbix-Komponenten mithilfe des Transport Layer Security (TLS)-Protokolls v.1.2 und 1.3 (je nach Kryptobibliothek). Unterstützt werden sowohl zertifikatsbasierte als auch auf vorab gemeinsam genutzten Schlüsseln basierende Verschlüsselung.

Die Verschlüsselung kann für Verbindungen konfiguriert werden:

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

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

-   Einige Proxys und Agents können so konfiguriert werden, dass sie mit dem Server eine zertifikatsbasierte Verschlüsselung verwenden, während andere eine auf vorab gemeinsam genutzten Schlüsseln basierende Verschlüsselung nutzen und wieder andere weiterhin unverschlüsselt kommunizieren (wie zuvor)
-   Der Server (Proxy) kann für verschiedene Hosts unterschiedliche Verschlüsselungskonfigurationen verwenden

Zabbix-Daemonprogramme verwenden einen einzigen Listening-Port für verschlüsselte und unverschlüsselte eingehende Verbindungen. Das Hinzufügen von Verschlüsselung erfordert keine neuen Ports in Firewalls.

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

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

-   Private Schlüssel werden in Dateien im Klartext gespeichert, die von Zabbix-Komponenten während des Starts gelesen werden können
-   Vorab gemeinsam genutzte Schlüssel werden im Zabbix-Frontend eingegeben und in der Zabbix-Datenbank im Klartext gespeichert
-   Die integrierte Verschlüsselung schützt keine Kommunikation:
    -   Zwischen dem Webserver, auf dem das Zabbix-Frontend ausgeführt wird, und dem Webbrowser des Benutzers
    -   Zwischen dem Zabbix-Frontend und dem Zabbix-Server
-   Derzeit wird jede verschlüsselte Verbindung mit einem vollständigen TLS-Handshake geöffnet; Session-Caching und Tickets sind nicht implementiert
-   Das Hinzufügen von Verschlüsselung erhöht die Zeit für Datenpunkt-Prüfungen und Aktionen, abhängig von der Netzwerklatenz:
    -   Wenn beispielsweise die Paketverzögerung 100 ms beträgt, dauert das Öffnen einer TCP-Verbindung und das Senden einer unverschlüsselten Anfrage etwa 200 ms. Mit Verschlüsselung werden etwa 1000 ms für den Aufbau der TLS-Verbindung hinzugefügt;
    -   Möglicherweise müssen Timeouts erhöht werden, andernfalls können einige Datenpunkte und Aktionen, die Remote-Skripte auf Agenten ausführen, mit unverschlüsselten Verbindungen funktionieren, bei verschlüsselten Verbindungen jedoch aufgrund 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]: # ({/bdc6b202-bdc6b202})

[comment]: # ({bac66f33-ba7ecc58})
#### Kompilieren von Zabbix mit Unterstützung für Verschlüsselung

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 verwendet werden.

:::notetip
Weitere Informationen zum Einrichten 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 durch Angabe der entsprechenden Option für das
"configure"-Skript ausgewählt:

-   `--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 etwas wie 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 vorab gemeinsam genutzte Schlüssel (PSK) verwenden möchten,
sollten Sie in Zabbix-Komponenten, die PSKs verwenden, *GnuTLS* oder *OpenSSL 1.1.0* (oder neuer) in Betracht ziehen. Die Bibliotheken *GnuTLS* und *OpenSSL 1.1.0* unterstützen PSK-Cipher-Suites 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-Cipher-Suites 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})
