- Verschlüsselung mit vorab gemeinsam genutzten Schlüsseln
Verschlüsselung mit vorab gemeinsam genutzten Schlüsseln
Übersicht
Jeder Pre-Shared Key (PSK) in Zabbix ist tatsächlich ein Paar aus:
- nicht geheimem PSK-Identitätsstring,
- geheimem PSK-Stringwert.
Der PSK-Identitätsstring ist ein nicht leerer UTF-8-String. Zum Beispiel: "PSK ID 001 Zabbix agentd". Es ist ein eindeutiger Name, mit dem dieser spezifische PSK von Zabbix-Komponenten referenziert wird. Geben Sie im PSK-Identitätsstring keine sensiblen Informationen an - er wird unverschlüsselt über das Netzwerk übertragen.
Der PSK-Wert ist ein schwer zu erratender String aus hexadezimalen Ziffern, zum Beispiel "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9".
Größenbeschränkungen
Für die PSK-Identität und den PSK-Wert in Zabbix gelten Größenbeschränkungen; in einigen Fällen kann eine Kryptobibliothek niedrigere Grenzwerte haben:
| Component | PSK identity max size | PSK value min size | PSK value max size |
|---|---|---|---|
| Zabbix | 128 UTF-8-Zeichen | 128 Bit (16-Byte-PSK, eingegeben als 32 hexadezimale Ziffern) | 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern) |
| GnuTLS | 128 Bytes (kann UTF-8-Zeichen enthalten) | - | 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern) |
| OpenSSL 1.0.x, 1.1.0 | 127 Bytes (kann UTF-8-Zeichen enthalten) | - | 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern) |
| OpenSSL 1.1.1 | 127 Bytes (kann UTF-8-Zeichen enthalten) | - | 512 Bit (64-Byte-PSK, eingegeben als 128 hexadezimale Ziffern) |
| OpenSSL 1.1.1a and later | 127 Bytes (kann UTF-8-Zeichen enthalten) | - | 2048 Bit (256-Byte-PSK, eingegeben als 512 hexadezimale Ziffern) |
Das Zabbix-Frontend ermöglicht die Konfiguration einer bis zu 128 Zeichen langen PSK-Identitätszeichenfolge und eines 2048 Bit langen PSK, unabhängig von den verwendeten Kryptobibliotheken.
Wenn einige Zabbix-Komponenten niedrigere Grenzwerte unterstützen, liegt es in der Verantwortung des Benutzers, PSK-Identität und PSK-Wert mit der für diese Komponenten zulässigen Länge zu konfigurieren.
Das Überschreiten der Längenbeschränkungen führt zu Kommunikationsfehlern zwischen Zabbix
Komponenten.
Bevor sich der Zabbix-Server über PSK mit dem Agent verbindet, sucht der Server die für diesen Agent in der Datenbank konfigurierte PSK-Identität und den PSK-Wert nach (tatsächlich im Konfigurationscache). Nach dem Empfang einer Verbindung verwendet der Agent die PSK-Identität und den PSK-Wert aus seiner Konfigurationsdatei. Wenn beide Seiten dieselbe PSK-Identitätszeichenfolge und denselben PSK-Wert haben, kann die Verbindung erfolgreich hergestellt werden.
Jede PSK-Identität darf nur mit einem Wert verknüpft sein. Es liegt in der Verantwortung des Benutzers sicherzustellen, dass es nicht zwei PSKs mit derselben Identitätszeichenfolge, aber unterschiedlichen Werten gibt. Andernfalls kann dies zu unvorhersehbaren Fehlern oder Unterbrechungen der Kommunikation zwischen Zabbix Komponenten führen, die PSKs mit dieser PSK-Identitätszeichenfolge verwenden.
Generieren von PSK
Zum Beispiel kann ein 256-Bit-PSK (32 Bytes) 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 erzeugt. Zabbix erwartet in der PSK-Datei jedoch nur eine PSK, daher sollten die Identitätszeichenfolge und der Doppelpunkt (':') aus der Datei entfernt werden.
PSK für die Kommunikation zwischen Server und Agent konfigurieren (Beispiel)
Schreiben Sie auf dem Agent-Host den PSK-Wert in eine Datei, zum Beispiel
/home/zabbix/zabbix_agentd.psk. Die Datei muss den PSK als ersten
Textstring enthalten, zum Beispiel:
1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
Setzen Sie die Zugriffsrechte für die PSK-Datei - sie darf nur für den Zabbix-Benutzer lesbar sein.
Bearbeiten Sie die TLS-Parameter in der Konfigurationsdatei des Zabbix Agent (zabbix_agentd.conf). Setzen Sie zum Beispiel:
TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/home/zabbix/zabbix_agentd.psk
TLSPSKIdentity=PSK 001
Der Agent verbindet sich mit dem Server (aktive Prüfungen) und akzeptiert vom Server
und von zabbix_get nur Verbindungen, die PSK verwenden. Die PSK-Identität lautet "PSK
001".
Starten Sie den Agent neu. Jetzt 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, sehen Sie unter Verwaltung der Verbindungsverschlüsselung, wie der Verbindungstyp geändert wird.)
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.
Beispiel:

Alle Pflichtfelder sind mit einem roten Sternchen markiert.
Wenn der Konfigurations-Cache mit der Datenbank synchronisiert ist, verwenden die neuen Verbindungen PSK. Prüfen Sie die Protokolldateien 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 den PSK in der ersten
Textzeichenfolge enthalten, zum Beispiel:
e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9
Setzen Sie die Zugriffsrechte für die PSK-Datei - sie darf nur für den Benutzer Zabbix lesbar sein.
Bearbeiten Sie die TLS-Parameter in der Konfigurationsdatei des Zabbix Proxy (zabbix_proxy.conf). Setzen Sie zum Beispiel:
TLSConnect=psk
TLSPSKFile=/home/zabbix/zabbix_proxy.psk
TLSPSKIdentity=PSK 002
Der Proxy verbindet sich dann mithilfe von PSK mit dem Server. Die PSK-Identität lautet "PSK 002".
(Um Ausfallzeiten zu minimieren, sehen Sie unter Verwaltung der Verbindungsverschlüsselung nach, wie der Verbindungstyp geändert wird.)
Konfigurieren Sie PSK für diesen Proxy im Zabbix Frontend. Gehen Sie zu
Administration > Proxies, wählen Sie den Proxy aus und öffnen Sie die Registerkarte Verschlüsselung. Markieren Sie unter "Verbindungen vom Proxy" die Option PSK. Fügen Sie in das Feld "PSK identity" "PSK 002" und in das Feld "PSK" "e560cb0d918d26d31b4f642181f5f570ad89a390931102e5391d08327ba434e9" ein. Klicken Sie auf "Update".
Starten Sie den Proxy neu. Er verwendet dann PSK-basierte verschlüsselte Verbindungen zum Server. Prüfen Sie die Protokolldateien von Server und Proxy auf Fehlermeldungen.
Für einen passiven Proxy ist das Verfahren sehr ähnlich.
Der einzige Unterschied: Setzen Sie TLSAccept=psk in der Konfigurationsdatei des Zabbix Proxy und setzen Sie im Zabbix Frontend Verbindungen zum Proxy auf PSK.
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