La crittografia tra nodi (o nodo a nodo) protegge i dati che viaggiano tra i nodi di un cluster tramite TLS. Questa pagina spiega come attivare la crittografia internodi di Cassandra utilizzando TLS su Edge per Private Cloud. Per eseguire questi passaggi, devi conoscere i dettagli del tuo anello Cassandra.
Attivare la crittografia internodo di Cassandra
Per attivare la crittografia internodi di Cassandra:
Genera certificati server seguendo i passaggi nell'appendice per creare una chiave e un certificato autofirmati.
Se utilizzi Edge per il cloud privato su un sistema operativo abilitato per FIPS, utilizza un archivio chiavi FIPS BouncyCastle (BCFKS). Consulta l'Appendice di seguito per suggerimenti su come utilizzare il keystore di tipo BCFKS.
I passaggi seguenti presuppongono che tu abbia creato
keystore.node0
etruststore.node0
, nonché le password dell'archivio chiavi e dell'archivio chiavi, come spiegato nell'appendice. Il keystore e il truststore devono essere creati come passaggi preliminari su ogni 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, creane uno.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
- Assicurati che il file
cassandra.properties
sia di proprietà dell'utente apigee:chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
Esegui i seguenti passaggi 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 i log di sistema per verificare la presenza del seguente messaggio:
Internode messaging enabled TLS protocols Internode messaging enabled cipher suites
Esegui la rotazione dei certificati
Per ruotare i certificati:
- Aggiungi il certificato per ogni coppia di chiavi univoca generata (vedi Appendice) al truststore di un nodo Cassandra esistente, in modo che sia i vecchi certificati che i nuovi certificati esistano nello stesso truststore:
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 del truststore esistente sul nodo Cassandra. - Utilizza un'utilità di copia, come scp, per distribuire il truststore a tutti i nodi Cassandra del cluster, sostituendo il truststore esistente in uso da ciascun nodo.
- Esegui un riavvio graduale del cluster per caricare il nuovo truststore e stabilire la fiducia per le nuove chiavi prima che vengano applicate:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- Su ogni nodo Cassandra del cluster, aggiorna le proprietà mostrate di seguito con i nuovi valori del keystore nel file cassandra.properties:
conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
dove
NEW_KEYSTORE_PATH
è il percorso della directory in cui si trova il file dell'archivio chiavi eNEW_KEYSTORE_PASSWORD
è la password dell'archivio chiavi impostata durante la creazione dei certificati, come spiegato nell'Appendice. - 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
- Quando la comunicazione è stata stabilita correttamente tra tutti i nodi, vai 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 del server necessari per eseguire i passaggi di crittografia internodi. 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 |
La password deve essere la stessa 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 seguente directory:
cd /opt/apigee/data/apigee-cassandra
- Esegui il seguente comando per generare un file denominato
keystore.node0
nella directory corrente: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 del keystore.
- 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
nel truststore del nodo:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
Il comando precedente richiede di impostare una password. Si tratta della password del truststore e può essere diversa dalla password del keystore impostata in precedenza. Se ti viene chiesto di considerare attendibile il certificato, inserisci
yes
. - Utilizza openssl 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 ogni nodo e importalo nel truststore di ogni nodo.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- Utilizza
keytool -list
per controllare la presenza di certificati nei file keystore e truststore:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0
Utilizzo dei magazzini chiavi BCFKS per i sistemi operativi conformi a FIPS
Quando utilizzi sistemi operativi con FIPS abilitato, utilizza i depositi chiavi BouncyCastle FIPS (BCFKS). La sezione seguente descrive come utilizzare i file di archivio chiavi di tipo BCFKS. Gli altri passaggi per lavorare con i keystore (come la proprietà dei file, la posizione dei file e altri) rimangono invariati come indicato in questa Appendice.
Per generare un keystore di tipo BCFKS, utilizza il comando seguente:
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
Nota:la password dell'archivio chiavi e quella della chiave devono essere uguali.
Nota:puoi utilizzare il file jar bc-fips
fornito da Apigee oppure scaricare lo stesso file jar dai repository di BouncyCastle. Per ulteriori dettagli su come generare un archivio chiavi BCFKS, consulta la documentazione di BouncyCastle.
Esporta il certificato in un file separato:
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
Importa il certificato generato node0.cer
nel truststore del nodo:
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