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:
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
etruststore.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.- 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
- 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:
- Interrompi il servizio Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Riavvia il servizio Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- 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:
- 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 eEXISTING_TRUSTSTORE
è il nome dell'archivio attendibilità esistente sul nodo Cassandra. - 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.
- 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
- 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 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
- Riavvia il servizio Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- 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. |
- Vai alla directory seguente:
cd /opt/apigee/data/apigee-cassandra
- 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.
- Esporta il certificato in un file separato:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- 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
- 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
. - 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
- 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
- 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