Cassandra-Interknotenverschlüsselung aktivieren

Die Verschlüsselung zwischen Knoten (oder von Knoten zu Knoten) schützt Daten, die zwischen Knoten in einem Cluster übertragen werden, mithilfe von TLS. Auf dieser Seite wird erläutert, wie Sie die Cassandra-Verschlüsselung zwischen Knoten mit TLS in Edge for Private Cloud aktivieren. Um diese Schritte auszuführen, müssen Sie mit den Details Ihres Cassandra-Rings vertraut sein.

Verschlüsselung zwischen Cassandra-Knoten aktivieren

Führen Sie das folgende Verfahren auf allen Knoten im Cluster aus, um die Cassandra-Verschlüsselung zwischen Knoten zu aktivieren. Sie müssen die öffentlichen Zertifikate jedes Knotens an alle Knoten verteilen. Danach enthält jeder Knoten die Zertifikate node0.cer, node1.cer usw. in seinem Truststore. Jeder Knoten enthält nur seinen eigenen privaten Schlüssel im Schlüsselspeicher. Beispiel: node0 enthält nur node0.pem im Schlüsselspeicher. Sie müssen die Verschlüsselung auf jedem Knoten einzeln aktivieren.

So aktivieren Sie die Cassandra-Internode-Verschlüsselung:

  1. Generieren Sie Serverzertifikate, indem Sie die Schritte im Anhang ausführen, um einen selbst signierten Schlüssel und ein Zertifikat zu erstellen.

    In den folgenden Schritten wird davon ausgegangen, dass Sie keystore.node0 und truststore.node0 sowie die Passwörter für den Schlüsselspeicher und den Truststore erstellt haben, wie im Anhang erläutert. Der Schlüsselspeicher und der Truststore sollten als vorbereitende Schritte auf jedem Knoten erstellt werden, bevor Sie mit den nächsten Schritten fortfahren.

  2. 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
  3. 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 nacheinander auf jedem Cassandra-Knoten aus, damit die Änderungen wirksam werden, ohne dass es zu Ausfallzeiten für Nutzer kommt:

  1. Beenden Sie den Cassandra-Dienst:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. Starten Sie den Cassandra-Dienst neu:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. Prüfen Sie in den Systemprotokollen, ob die folgende Meldung angezeigt wird, um festzustellen, ob der TLS-Verschlüsselungsdienst gestartet wurde:
    Starting Encrypted Messaging Service on TLS port

Zertifikatsrotation durchführen

So rotieren Sie Zertifikate:

  1. 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 und EXISTING_TRUSTSTORE der Name des vorhandenen Truststores auf dem Cassandra-Knoten.

  2. Verwenden Sie ein Kopierdienstprogramm 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.
  3. Führen Sie einen rollierenden Neustart des Clusters durch, um den neuen Truststore zu laden und Vertrauen für die neuen Schlüssel herzustellen, bevor sie vorhanden sind:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. Aktualisieren Sie auf jedem Cassandra-Knoten im Cluster die unten aufgeführten Attribute in der Datei „cassandra.properties“ auf die neuen Schlüsselspeicherwerte:
    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 and NEW_KEYSTORE_PASSWORD is the keystore password set when the certificates were created, as explained in the Appendix.

  5. Stop the Cassandra service:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  6. Starten Sie den Cassandra-Dienst neu:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. 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 Schritte zur Verschlüsselung zwischen Knoten erforderlich sind. Die im Beispiel gezeigten Befehle verwenden die folgenden Parameter:

Parameter Beschreibung
node0 Ein 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 Das Schlüsselpasswort muss für den Schlüsselspeicher und den Schlüssel identisch sein.
dname Identifiziert die IP-Adresse von node0 als 10.128.0.39.
-validity Der für dieses Flag festgelegte Wert sorgt dafür, dass das generierte Schlüsselpaar 10 Jahre lang gültig ist.
  1. Wechseln Sie zum folgenden Verzeichnis:
    cd /opt/apigee/data/apigee-cassandra
  2. 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 Keystore-Passwort übereinstimmen.

  3. Exportieren Sie das Zertifikat in eine separate Datei:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. 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
  5. 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.

  6. Verwenden Sie openssl, um eine PEM-Datei des Zertifikats ohne Schlüssel zu generieren. Beachten Sie, dass cqlsh nicht mit dem Zertifikat im 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
  7. Kopieren Sie für die Verschlüsselung von Knoten zu Knoten 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
  8. Verwenden Sie keytool -list, um nach Zertifikaten in den Keystore- und Truststore-Dateien zu suchen:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0