Die Interknoten-Verschlüsselung (oder Knoten-zu-Knoten-Verschlüsselung) schützt Daten, die zwischen Knoten in einem Cluster übertragen werden, mithilfe von TLS. Auf dieser Seite wird erläutert, wie Sie die Cassandra-Interknotenverschlüsselung mit TLS on Edge für Private Cloud aktivieren. Für diese Schritte müssen Sie mit den Details Ihres Cassandra-Ringes vertraut sein.
Cassandra-Interknotenverschlüsselung aktivieren
Führen Sie die folgenden Schritte auf allen Knoten im Cluster aus, um die Interknoten-Verschlüsselung von Cassandra zu aktivieren. Sie müssen öffentliche Zertifikate von jedem Knoten an alle Knoten verteilen.
Danach enthält jeder Knoten die Zertifikate node0.cer
, node1.cer
usw. im Truststore. Jeder Knoten enthält nur seinen eigenen privaten Schlüssel im Schlüsselspeicher. Beispielsweise enthält node0
nur node0.pem
im Schlüsselspeicher. Sie müssen die Verschlüsselung auf jedem Knoten einzeln aktivieren.
Führen Sie die folgenden Schritte aus, um die Cassandra-Interknotenverschlüsselung zu aktivieren:
Generieren Sie Serverzertifikate anhand der Schritte im Anhang, um einen selbst signierten Schlüssel und ein selbst signiertes Zertifikat zu erstellen.
Bei den folgenden Schritten wird davon ausgegangen, dass Sie
keystore.node0
undtruststore.node0
sowie die Schlüsselspeicher- und Truststore-Passwörter erstellt haben, wie im Anhang erläutert. Der Schlüsselspeicher und Truststore sollten auf jedem Knoten als vorbereitende Schritte erstellt werden, bevor Sie mit den nächsten Schritten fortfahren.- Fügen Sie der Datei
/opt/apigee/customer/application/cassandra.properties
die folgenden Attribute hinzu. Wenn die Datei nicht vorhanden ist, erstellen Sie sie.conf_cassandra_internode_encryption=all conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0 conf_cassandra_keystore_password=keypass conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0 conf_cassandra_truststore_password=trustpass # Optionally set the following to enable 2-way TLS or mutual TLS # conf_cassandra_require_client_auth=true
- Achten Sie darauf, dass die Datei
cassandra.properties
dem Apigee-Nutzer gehört:chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
Führen Sie die folgenden Schritte einzeln auf jedem Cassandra-Knoten aus, damit die Änderungen wirksam werden, ohne dass es zu Ausfallzeiten für Nutzer kommt:
- Beenden Sie den Cassandra-Dienst:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Starten Sie den Cassandra-Dienst neu:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Wenn Sie herausfinden möchten, ob der TLS-Verschlüsselungsdienst gestartet wurde, suchen Sie in den Systemlogs nach der folgenden Nachricht:
Starting Encrypted Messaging Service on TLS port
Zertifikatsrotation ausführen
So rotieren Sie Zertifikate:
- Fügen Sie das Zertifikat für jedes eindeutige generierte Schlüsselpaar (siehe Anhang) dem Truststore eines vorhandenen Cassandra-Knotens hinzu, sodass sowohl die alten als auch die neuen Zertifikate im selben Truststore vorhanden sind:
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
Dabei ist
NEW_ALIAS
ein eindeutiger String zur Identifizierung des Eintrags,CERT
der Name der hinzuzufügenden Zertifikatsdatei undEXISTING_TRUSTSTORE
der Name des vorhandenen Truststores auf dem Cassandra-Knoten. - Verwenden Sie ein Kopierdienstprogramm wie scp, um den Truststore auf alle Cassandra-Knoten im Cluster zu verteilen. Ersetzen Sie dabei den vorhandenen Truststore, der von jedem Knoten verwendet wird.
- Führen Sie einen rollierenden Neustart des Clusters aus, um den neuen Truststore zu laden und eine Vertrauensstellung für die neuen Schlüssel einzurichten, bevor sie vorhanden sind:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- Aktualisieren Sie auf jedem Cassandra-Knoten im Cluster die unten gezeigten Attribute auf die neuen Schlüsselspeicherwerte in der Datei cassandra.properties:
conf_cassandra_keystore=NEW_KEYSTORE_PATH conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
where
NEW_KEYSTORE_PATH
is the path to the directory where the keystore file is located andNEW_KEYSTORE_PASSWORD
is the keystore password set when the certificates were created, as explained in the Appendix. - Stop the Cassandra service:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Starten Sie den Cassandra-Dienst neu:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Wenn die Kommunikation zwischen allen Knoten erfolgreich hergestellt wurde, fahren Sie mit dem nächsten Cassandra-Knoten fort. Hinweis: Fahren Sie nur mit dem nächsten Knoten fort, wenn die Kommunikation zwischen allen Knoten erfolgreich hergestellt wurde.
Anhang
Im folgenden Beispiel wird erläutert, wie Serverzertifikate vorbereitet werden, die für die Interknotenverschlüsselung erforderlich sind. Die im Beispiel gezeigten Befehle verwenden die folgenden Parameter:
Parameter | Beschreibung |
---|---|
node0 |
Beliebiger eindeutiger String zur Identifizierung des Knotens. |
keystore.node0 |
Ein Schlüsselspeichername. Bei den Befehlen wird davon ausgegangen, dass sich diese Datei im aktuellen Verzeichnis befindet. |
keypass |
Der Keypass muss für den Schlüsselspeicher und den Schlüssel gleich sein. |
dname |
Gibt die IP-Adresse von node0 als 10.128.0.39 an. |
-validity |
Der für diese Markierung festgelegte Wert macht das generierte Schlüsselpaar 10 Jahre gültig. |
- Wechseln Sie zu folgendem Verzeichnis:
cd /opt/apigee/data/apigee-cassandra
- Führen Sie den folgenden Befehl aus, um im aktuellen Verzeichnis eine Datei mit dem Namen
keystore.node0
zu generieren:keytool -genkey -keyalg RSA -alias node0 -validity 3650 \ -keystore keystore.node0 -storepass keypass \ -keypass keypass -dname "CN=10.128.0.39, OU=None, \ O=None, L=None, C=None"
Wichtig:Achten Sie darauf, dass das Schlüsselpasswort mit dem Schlüsselspeicher-Passwort identisch ist.
- Exportieren Sie das Zertifikat in eine separate Datei:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- Achten Sie darauf, dass die Datei nur für den Apigee-Nutzer und sonst nicht gelesen werden kann:
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- Importieren Sie das generierte Zertifikat
node0.cer
in den Truststore des Knotens:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
Mit dem obigen Befehl werden Sie aufgefordert, ein Passwort festzulegen. Dies ist das Truststore-Passwort und kann sich von dem zuvor festgelegten Keystore-Passwort unterscheiden. Wenn Sie aufgefordert werden, dem Zertifikat zu vertrauen, geben Sie
yes
ein. - Generieren Sie mit „openssl“ eine PEM-Datei des Zertifikats ohne Schlüssel. Beachten Sie, dass
cqlsh
nicht mit dem Zertifikat in dem generierten Format funktioniert.$ keytool -importkeystore -srckeystore keystore.node0 \ -destkeystore node0.p12 -deststoretype PKCS12 -srcstorepass \ keypass -deststorepass keypass $ openssl pkcs12 -in node0.p12 -nokeys -out node0.cer.pem \ -passin pass:keypass $ openssl pkcs12 -in node0.p12 -nodes -nocerts -out node0.key.pem -passin pass:keypass
- Kopieren Sie für die Knoten-zu-Knoten-Verschlüsselung die Datei
node0.cer
auf jeden Knoten und importieren Sie sie in den Truststore jedes Knotens.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- Mit
keytool -list
können Sie nach Zertifikaten im Schlüsselspeicher und im Truststore suchen:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0