Abilita crittografia internode Cassandra

La crittografia tra nodi (o nodo a nodo) protegge i dati trasmessi tra i nodi in un cluster utilizzando TLS. Questa pagina spiega come abilitare la crittografia interno di Cassandra utilizzando TLS su Edge per il cloud privato. Per eseguire questi passaggi, devi conoscere i dettagli dell'anello Cassandra.

Abilita la crittografia internodo di Cassandra

Per abilitare la crittografia degli internodi di Cassandra, segui la procedura riportata di seguito su tutti i nodi nel cluster. Devi distribuire i certificati pubblici di ciascun nodo a tutti i nodi. Dopodiché, ogni nodo conterrà i certificati node0.cer, node1.cer ecc. nel proprio archivio attendibilità. Ogni nodo conterrà solo la propria chiave privata nel proprio archivio chiavi. Ad esempio, node0 conterrà solo node0.pem nel proprio archivio chiavi. Devi abilitare la crittografia su ciascun nodo, uno alla volta.

Segui questi passaggi per attivare la crittografia degli internodi di Cassandra:

  1. Genera certificati server seguendo i passaggi descritti nell'appendice per creare una chiave e un certificato autofirmati.

    I passaggi seguenti presuppongono che tu abbia creato keystore.node0 e truststore.node0, nonché le password dell'archivio chiavi e dell'archivio attendibilità, come spiegato nell'Appendice. L'archivio chiavi e l'archivio attendibilità devono essere creati come passaggi preliminari su ciascun nodo prima di procedere con i passaggi successivi.

  2. Aggiungi le seguenti proprietà al file /opt/apigee/customer/application/cassandra.properties. Se il file non esiste, crealo.
    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. Assicurati che il file cassandra.properties sia di proprietà dell'utente apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

Esegui i passaggi seguenti su ogni nodo Cassandra, uno alla volta, in modo che le modifiche abbiano effetto senza causare tempi di inattività per gli utenti:

  1. Interrompi il servizio Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. Riavvia il servizio Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. Per determinare se il servizio di crittografia TLS è stato avviato, controlla se nei log di sistema è presente il seguente messaggio:
    Starting Encrypted Messaging Service on TLS port

Esegui la rotazione dei certificati

Per ruotare i certificati, segui questi passaggi:

  1. Aggiungi il certificato per ogni coppia di chiavi univoca generata (vedi l'Appendice) all'archivio di attendibilità di un nodo Cassandra esistente, in modo che sia i certificati precedenti sia i nuovi certificati esistano nello stesso archivio di attendibilità:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    dove NEW_ALIAS è una stringa univoca per identificare la voce, CERT è il nome del file del certificato da aggiungere e EXISTING_TRUSTSTORE è il nome dell'archivio attendibilità esistente sul nodo Cassandra.

  2. Utilizza un'utilità di copia, come scp, per distribuire l'archivio attendibilità a tutti i nodi Cassandra nel cluster, sostituendo l'archivio attendibilità esistente in uso da ciascun nodo.
  3. Esegui un riavvio in sequenza del cluster per caricare il nuovo archivio di attendibilità e stabilire l'attendibilità delle nuove chiavi prima che siano disponibili:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. Su ogni nodo Cassandra nel cluster, aggiorna le proprietà mostrate di seguito con i nuovi valori dell'archivio chiavi nel file 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 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. Riavvia il servizio Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. Una volta stabilita correttamente la comunicazione tra tutti i nodi, passa al nodo Cassandra successivo. Nota: passa al nodo successivo solo se la comunicazione tra tutti i nodi viene stabilita correttamente.

Appendice

L'esempio seguente spiega come preparare i certificati server necessari per eseguire i passaggi di crittografia interni. I comandi mostrati nell'esempio utilizzano i seguenti parametri:

Parametro Descrizione
node0 Qualsiasi stringa univoca per identificare il nodo.
keystore.node0 Il nome di un archivio chiavi. I comandi presuppongono che questo file si trovi nella directory corrente.
keypass Il keypass deve essere lo stesso sia per l'archivio chiavi sia per la chiave.
dname Identifica l'indirizzo IP di node0 come 10.128.0.39.
-validity Il valore impostato su questo flag rende la coppia di chiavi generata valida per 10 anni.
  1. Vai alla directory seguente:
    cd /opt/apigee/data/apigee-cassandra
  2. Esegui questo comando per generare un file denominato keystore.node0 nella directory attuale:
    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"

    Importante: assicurati che la password della chiave corrisponda a quella dell'archivio chiavi.

  3. Esporta il certificato in un file separato:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Assicurati che il file sia leggibile solo dall'utente apigee e da nessun altro:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Importa il certificato generato node0.cer nell'archivio attendibilità del nodo:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    Il comando riportato sopra ti chiede di impostare una password. Questa è la password dell'archivio chiavi e può essere diversa da quella dell'archivio chiavi che hai impostato in precedenza. Se viene richiesto di rendere attendibile il certificato, inserisci yes.

  6. Utilizza Opensl per generare un file PEM del certificato senza chiavi. Tieni presente che cqlsh non funziona con il certificato nel formato generato.
    $ 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. Per la crittografia da nodo a nodo, copia il file node0.cer su ciascun nodo e importalo nell'archivio attendibilità di ciascun nodo.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Utilizza keytool -list per verificare la presenza di certificati nei file dell'archivio chiavi e dell'archivio attendibilità:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0