Die Internode-Verschlüsselung (Knoten-zu-Knoten-Verschlüsselung) schützt Daten, die zwischen Knoten in einem Cluster mit TLS übertragen werden. Auf dieser Seite wird beschrieben, wie Sie die Internode-Verschlüsselung von Cassandra mit TLS am Edge für die Private Cloud aktivieren. Sie müssen mit den Details Ihres Cassandra-Rings vertraut sein, um diese Schritte ausführen zu können.
Cassandra-Knotenverschlüsselung aktivieren
So aktivieren Sie die Internode-Verschlüsselung in Cassandra:
Generieren Sie Serverzertifikate. Folgen Sie dazu der Anleitung im Anhang, um einen selbst signierten Schlüssel und ein selbst signiertes Zertifikat zu erstellen.
Wenn Sie Edge for Private Cloud auf einem FIPS-kompatiblen Betriebssystem verwenden, verwenden Sie einen BouncyCastle FIPS-Schlüsselspeicher (BCFKS). Tipps zur Arbeit mit dem Schlüsselspeicher des Typs BCFKS finden Sie unten im Anhang.
Bei den folgenden Schritten wird davon ausgegangen, dass Sie
keystore.node0
undtruststore.node0
sowie die Keystore- und Truststore-Passwörter erstellt haben, wie im Anhang erläutert. Der Schlüsselspeicher und der Vertrauensspeicher sollten als vorbereitende Schritte auf jedem Knoten erstellt werden, bevor Sie mit den nächsten Schritten fortfahren.- Fügen Sie der Datei
/opt/apigee/customer/application/cassandra.properties
die folgenden Eigenschaften hinzu. Wenn die Datei nicht vorhanden ist, erstellen Sie sie.conf_cassandra_server_encryption_internode_encryption=all conf_cassandra_server_encryption_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0 conf_cassandra_server_encryption_keystore_password=keypass conf_cassandra_server_encryption_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0 conf_cassandra_server_encryption_truststore_password=trustpass # Optionally set the following to enable 2-way TLS or mutual TLS conf_cassandra_server_encryption_require_client_auth=true # Set the following in FIPS enabled operating systems # With FIPS, older TLS protocols are disabled, so set to TLSv1.2 conf_cassandra_server_encryption_protocol=TLSv1.2 # With FIPS, use BCFKS keystores conf_cassandra_server_encryption_store_type=BCFKS
- 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 auf jedem Cassandra-Knoten einzeln aus, damit die Änderungen wirksam werden, ohne dass es zu einer Ausfallzeit für die 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
- Ob der TLS-Verschlüsselungsservice gestartet wurde, sehen Sie in den Systemprotokollen anhand der folgenden Meldung:
Internode messaging enabled TLS protocols Internode messaging enabled cipher suites
Zertifikatsrotation ausführen
So rotieren Sie Zertifikate:
- Fügen Sie das Zertifikat für jedes eindeutig 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 Zertifikatdatei undEXISTING_TRUSTSTORE
der Name des vorhandenen Truststores auf dem Cassandra-Knoten. - Verwenden Sie ein Kopierprogramm wie scp, um den Truststore auf alle Cassandra-Knoten im Cluster zu verteilen und den vorhandenen Truststore zu ersetzen, der von jedem Knoten verwendet wird.
- Führen Sie einen schrittweisen Neustart des Clusters aus, um den neuen Truststore zu laden und Vertrauen für die neuen Schlüssel aufzubauen, bevor sie verfügbar sind:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- Aktualisieren Sie auf jedem Cassandra-Knoten im Cluster die unten aufgeführten Eigenschaften in der Datei „cassandra.properties“ mit den neuen Schlüsselspeicherwerten:
conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
Dabei ist
NEW_KEYSTORE_PATH
der Pfad zum Verzeichnis, in dem sich die Schlüsselspeicherdatei befindet, undNEW_KEYSTORE_PASSWORD
das Schlüsselspeicherpasswort, das beim Erstellen der Zertifikate festgelegt wurde, wie im Anhang erläutert. - 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 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 Sie Serverzertifikate vorbereiten, die für die Durchführung der Schritte zur Internode-Verschlüsselung erforderlich sind. In den Beispielbefehlen werden die folgenden Parameter verwendet:
Parameter | Beschreibung |
---|---|
node0 |
Ein beliebiger eindeutiger String zur Identifizierung des Knotens. |
keystore.node0 |
Ein Keystore-Name. Bei den Befehlen wird davon ausgegangen, dass sich diese Datei im aktuellen Verzeichnis befindet. |
keypass |
Der Keypass muss sowohl für den Schlüsselspeicher als auch für den Schlüssel identisch sein. |
dname |
Gibt die IP-Adresse von node0 als 10.128.0.39 an. |
-validity |
Durch den für dieses Flag festgelegten Wert ist das generierte Schlüsselpaar 10 Jahre lang gültig. |
- Rufen Sie das folgende Verzeichnis auf:
cd /opt/apigee/data/apigee-cassandra
- Führen Sie den folgenden Befehl aus, um eine Datei mit dem Namen
keystore.node0
im aktuellen Verzeichnis 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:Das Schlüsselpasswort muss mit dem Passwort für den Schlüsselspeicher übereinstimmen.
- 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 vom Apigee-Nutzer und von niemandem sonst 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 Befehl oben werden Sie aufgefordert, ein Passwort festzulegen. Dies ist das Passwort für den Truststore und kann sich vom zuvor festgelegten Keystore-Passwort unterscheiden. Wenn Sie aufgefordert werden, dem Zertifikat zu vertrauen, geben Sie
yes
ein. - Verwenden Sie openssl, um eine PEM-Datei des Zertifikats ohne Schlüssel zu generieren. Hinweis:
cqlsh
funktioniert nicht mit dem Zertifikat im generierten Format.$ 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
- Für die Knoten-zu-Knoten-Verschlüsselung kopieren Sie 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
- Verwenden Sie
keytool -list
, um in den Schlüsselspeicher- und Truststore-Dateien nach Zertifikaten zu suchen:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0
Mit BCFKS-Schlüsselspeichern für FIPS-kompatible Betriebssysteme arbeiten
Wenn Sie mit FIPS-fähigen Betriebssystemen arbeiten, verwenden Sie BouncyCastle FIPS Keystores (BCFKS). Im folgenden Abschnitt wird beschrieben, wie Sie mit Schlüsselspeichern vom Typ BCFKS arbeiten. Die anderen Schritte zur Arbeit mit Schlüsselspeichern (z. B. Dateieigentümer, Dateispeicherort usw.) bleiben unverändert, wie in diesem Anhang erwähnt.
Verwenden Sie den folgenden Befehl, um einen Schlüsselspeicher vom Typ BCFKS zu generieren:
keytool -genkeypair -keyalg RSA -alias node0 -validity 365 -keystore keystore.node0 \ -storepass keypass -keypass keypass -v \ -dname "EMAILADDRESS=youremail@domain.com, CN=yourcn, OU=yourou, O=youro, L=yourl, C=yourc" \ -storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \ -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS
Hinweis:Das Passwort für den Schlüsselspeicher und das Passwort für den Schlüssel müssen identisch sein.
Hinweis:Sie können das von Apigee bereitgestellte JAR-File bc-fips
verwenden oder dasselbe JAR-File aus den Repositories von BouncyCastle herunterladen. Weitere Informationen zum Generieren eines BCFKS-Schlüsselspeichers finden Sie in der BouncyCastle-Dokumentation.
Exportieren Sie das Zertifikat in eine separate Datei:
keytool -export -v -alias node0 -file node0.cer -keystore keystore.node0 -storepass keypass \ -storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \ -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS
Importieren Sie das generierte Zertifikat node0.cer
in den Truststore des Knotens:
keytool -import -v -alias node0 -file node0.cer -keystore truststore.node0 -storepass storepass \ -storetype BCFKS -providerpath /opt/apigee/edge-gateway/lib/thirdparty/bc-fips-1.0.2.4.jar \ -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providername BCFIPS