- Verschlüsselung mit vorab gemeinsam genutzten Schlüsseln
Verschlüsselung mit vorab gemeinsam genutzten Schlüsseln
Übersicht
Jeder Pre-Shared Key (PSK) in Zabbix besteht tatsächlich aus einem Paar:
- nicht geheimer PSK-Identitätszeichenfolge,
- geheimer PSK-Zeichenfolge.
Die PSK-Identitätszeichenfolge ist eine nicht leere UTF-8-Zeichenfolge. Zum Beispiel „PSK ID 001 Zabbix agentd“. Sie ist ein eindeutiger Name, unter dem dieser spezifische PSK von den Zabbix-Komponenten referenziert wird. Fügen Sie keine vertraulichen Informationen in die PSK-Identitätszeichenfolge ein – sie wird unverschlüsselt über das Netzwerk übertragen.
Der PSK-Wert ist eine schwer zu erratende Zeichenfolge aus hexadezimalen Ziffern, zum Beispiel e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9.
Verwenden Sie niemals die in der Dokumentation angegebenen Beispiel-PSK-Werte in Produktionsumgebungen. Generieren Sie stattdessen einen eindeutigen, kryptografisch sicheren PSK.
Größenbeschränkungen
Für die PSK-Identität und den PSK-Wert gibt es in Zabbix Größenbeschränkungen. In einigen Fällen kann eine Kryptobibliothek eine niedrigere Grenze haben:
| Komponente | Maximale Größe der PSK-Identität | Minimale Größe des PSK-Werts | Maximale Größe des PSK-Werts |
|---|---|---|---|
| Zabbix | 128 UTF-8-Zeichen | 128 Bit (16-Byte-PSK, eingegeben als 32 Hexadezimalziffern) | 2048 Bit (256-Byte-PSK, eingegeben als 512 Hexadezimalziffern) |
| GnuTLS | 128 Byte (kann UTF-8-Zeichen enthalten) | - | 2048 Bit (256-Byte-PSK, eingegeben als 512 Hexadezimalziffern) |
| OpenSSL 1.0.x, 1.1.0 | 127 Byte (kann UTF-8-Zeichen enthalten) | - | 2048 Bit (256-Byte-PSK, eingegeben als 512 Hexadezimalziffern) |
| OpenSSL 1.1.1 | 127 Byte (kann UTF-8-Zeichen enthalten) | - | 512 Bit (64-Byte-PSK, eingegeben als 128 Hexadezimalziffern) |
| OpenSSL 1.1.1a und höher | 127 Byte (kann UTF-8-Zeichen enthalten) | - | 2048 Bit (256-Byte-PSK, eingegeben als 512 Hexadezimalziffern) |
Das Zabbix Frontend ermöglicht unabhängig von den verwendeten Kryptobibliotheken die Konfiguration einer bis zu 128 Zeichen langen PSK-Identitätszeichenfolge und eines bis zu 2048 Bit langen PSK.
Wenn einige Zabbix-Komponenten niedrigere Grenzen unterstützen, liegt es in der Verantwortung des Benutzers, die PSK-Identität und den PSK-Wert mit einer für diese Komponenten zulässigen Länge zu konfigurieren.
Das Überschreiten der Größenbeschränkungen führt zu Kommunikationsfehlern zwischen Zabbix-Komponenten.
Bevor der Zabbix Server eine Verbindung zum Agent über PSK herstellt, sucht der Server die für diesen Agent konfigurierten PSK-Identität und den PSK-Wert in der Datenbank nach (tatsächlich im Konfigurations-Cache). Beim Empfang einer Verbindung verwendet der Agent die PSK-Identität und den PSK-Wert aus seiner Konfigurationsdatei. Wenn beide Parteien dieselbe PSK-Identitätszeichenfolge und denselben PSK-Wert haben, kann die Verbindung erfolgreich hergestellt werden.
Jede PSK darf nur mit einem Wert verknüpft sein. Es liegt in der Verantwortung des Benutzers sicherzustellen, dass es keine zwei PSKs mit derselben Identitätszeichenfolge, aber unterschiedlichen Werten gibt. Andernfalls kann es zu unvorhersehbaren Fehlern oder Unterbrechungen der Kommunikation zwischen Zabbix-Komponenten kommen, die PSKs mit dieser PSK-Identitätszeichenfolge verwenden.
PSK generieren
Beispielsweise kann eine 256-Bit-PSK (32 Byte) mit den folgenden Befehlen generiert werden:
- mit OpenSSL:
$ openssl rand -hex 32
af8ced32dfe8714e548694e2d29e1a14ba6fa13f216cb35c19d0feb1084b0429
- mit GnuTLS:
$ psktool -u psk_identity -p database.psk -s 32
Generating a random key for user 'psk_identity'
Key stored to database.psk
$ cat database.psk
psk_identity:9b8eafedfaae00cece62e85d5f4792c7d9c9bcc851b23216a1d300311cc4f7cb
Beachten Sie, dass „psktool“ oben eine Datenbankdatei mit einer PSK-Identität und der zugehörigen PSK generiert. Zabbix erwartet in der PSK-Datei nur eine PSK, daher müssen die Identitätszeichenfolge und der Doppelpunkt (':') aus der Datei entfernt werden.
Konfigurieren von PSK für die Kommunikation zwischen Server und Agent (Beispiel)
Schreiben Sie auf dem Host des Agents den oben generierten PSK-Wert in eine Datei, zum Beispiel /home/zabbix/zabbix_agentd.psk.
Die Datei muss den PSK-Wert in der ersten Zeile enthalten.
Legen Sie die Zugriffsrechte für die PSK-Datei fest – sie darf nur für den Zabbix-Benutzer lesbar sein.
Bearbeiten Sie die TLS-Parameter in der Agent-Konfigurationsdatei von Zabbix (zabbix_agentd.conf). Legen Sie zum Beispiel Folgendes fest:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
Der Agent wird eine Verbindung zum Server herstellen (aktive Prüfungen) und vom Server
sowie von zabbix_get nur Verbindungen akzeptieren, die PSK verwenden. Die PSK-Identität lautet „PSK
001“.
Starten Sie den Agent neu. Nun können Sie die Verbindung mit zabbix_get testen,
zum Beispiel:
zabbix_get -s 127.0.0.1 -k "system.cpu.load[all,avg1]" --tls-connect=psk --tls-psk-identity="PSK 001" --tls-psk-file=/home/zabbix/zabbix_agentd.psk
(Um Ausfallzeiten zu minimieren, lesen Sie nach, wie Sie den Verbindungstyp unter Verbindungsverschlüsselungsverwaltung ändern.)
Konfigurieren Sie die PSK-Verschlüsselung für diesen Agent im Zabbix Frontend:
- Gehen Sie zu: Datenerfassung > Hosts.
- Wählen Sie den Host aus und klicken Sie auf die Registerkarte Verschlüsselung.
- Konfigurieren Sie die Details der PSK-Verschlüsselung.
Beispiel:

Alle Pflichtfelder sind mit einem roten Sternchen gekennzeichnet.
Wenn der Konfigurations-Cache mit der Datenbank synchronisiert wurde, verwenden neue Verbindungen PSK. Überprüfen Sie die Logdateien von Server und Agent auf Fehlermeldungen.
PSK für die Kommunikation zwischen Server und aktivem Proxy konfigurieren (Beispiel)
Schreiben Sie auf dem Proxy den PSK-Wert in eine Datei, zum Beispiel
/home/zabbix/zabbix_proxy.psk. Die Datei muss in der ersten
Textzeile den PSK enthalten, zum Beispiel:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Legen Sie die Zugriffsrechte für die PSK-Datei fest - sie darf nur für den Zabbix-Benutzer lesbar sein.
Bearbeiten Sie die TLS-Parameter in der Proxy-Konfigurationsdatei von Zabbix (zabbix_proxy.conf). Legen Sie zum Beispiel Folgendes fest:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
Der Proxy stellt über PSK eine Verbindung zum Server her. Die PSK-Identität lautet „PSK 002“.
(Informationen zum Minimieren von Ausfallzeiten finden Sie unter Verbindungsverschlüsselung verwalten.)
Konfigurieren Sie den PSK für diesen Proxy im Zabbix Frontend. Gehen Sie zu
Administration > Proxies, wählen Sie den Proxy aus und öffnen Sie die Registerkarte
Encryption. Aktivieren Sie unter „Connections from proxy“ die Option PSK. Fügen Sie in das Feld
„PSK identity“ den Wert „PSK 002“ und in das Feld
„PSK“ den Wert
„e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9“ ein.
Klicken Sie auf „Update“.
Starten Sie den Proxy neu. Er verwendet nun verschlüsselte Verbindungen auf PSK-Basis zum Server. Überprüfen Sie die Logdateien des Servers und des Proxys auf Fehlermeldungen.
Für einen passiven Proxy ist das Verfahren sehr ähnlich.
Der einzige Unterschied besteht darin, dass Sie TLSAccept=psk in der Proxy-Konfigurationsdatei von Zabbix festlegen und im Zabbix Frontend unter Connections to proxy die Option PSK auswählen.
Fehlerbehebung bei PSK-Problemen
PSK enthält eine ungerade Anzahl von Hex-Ziffern
Proxy oder Agent startet nicht, Meldung im Proxy- oder Agent-Log:
ungültige PSK in Datei "/home/zabbix/zabbix_proxy.psk"
PSK-Identitätszeichenfolge länger als 128 Bytes wird an GnuTLS übergeben
Im TLS-Client-Log:
gnutls_handshake() failed: -110 The TLS connection was non-properly terminated.
Im TLS-Server-Log:
gnutls_handshake() failed: -90 The SRP username supplied is illegal.
Zu langer PSK-Wert mit OpenSSL 1.1.1 verwendet
Im Log der verbindenden Seite:
...OpenSSL library (version OpenSSL 1.1.1 11 Sep 2018) initialized
...
...In zbx_tls_connect(): psk_identity:"PSK 1"
...zbx_psk_client_cb() requested PSK identity "PSK 1"
...End of zbx_tls_connect():FAIL error:'SSL_connect() set result code to SSL_ERROR_SSL: file ssl\statem\extensions_clnt.c line 801: error:14212044:SSL routines:tls_construct_ctos_early_data:internal error: TLS write fatal alert "internal error"'
Im Log der akzeptierenden Seite:
...Message from 123.123.123.123 is missing header. Message ignored.
Dieses Problem tritt typischerweise auf, wenn OpenSSL von 1.0.x oder 1.1.0 auf 1.1.1 aktualisiert wird und der PSK-Wert länger als 512 Bit ist (64-Byte-PSK, eingegeben als 128 hexadezimale Ziffern).
Siehe auch: Größenlimits für Werte