Abilita crittografia internode Cassandra

La crittografia internodi (o da nodo a nodo) protegge i dati che passano tra i nodi di un cluster utilizzando TLS. Questa pagina spiega come abilitare la crittografia internodi Cassandra utilizzando TLS su Edge per è un cloud privato. 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:

  1. Genera i certificati del server seguendo i passaggi descritti 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 lavorare con l'archivio chiavi di tipo BCFKS.

    I passaggi che seguono presuppongono che tu abbia creato keystore.node0 e truststore.node0, nonché le password del keystore e del truststore, 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.

  2. Aggiungi le seguenti proprietà al file /opt/apigee/customer/application/cassandra.properties. Se il file non esiste, crealo.
    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
      
  3. 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:

  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:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

Eseguire la rotazione dei certificati

Per ruotare i certificati:

  1. Aggiungi il certificato per ogni coppia di chiavi unica generata (vedi Appendice) all'archivio di attendibilità di un nodo Cassandra esistente, in modo che i certificati vecchi e quelli nuovi 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 di attendibilità esistente sul nodo Cassandra.

  2. Usa un'utilità di copia, come scp, per distribuire il truststore a tutti i nodi Cassandra nel cluster, sostituendo il truststore 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à per le nuove chiavi prima che siano attive:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
    
  4. 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 e NEW_KEYSTORE_PASSWORD è la password dell'archivio chiavi impostata durante la creazione dei certificati, come spiegato nell'Appendice.

  5. Interrompi il servizio Cassandra:
    /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. Quando la comunicazione è stata stabilita correttamente tra tutti i nodi, vai al nodo Cassandra successivo. Nota: vai al nodo successivo solo se la comunicazione viene stabilita correttamente tra tutti i nodi.

Appendice

L'esempio seguente spiega come preparare i certificati del server necessari per eseguire le i passaggi della crittografia internodo. 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 passchiave deve essere uguale sia per il keystore che 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 seguente directory:
    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 del keystore.

  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 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 viene richiesto di considerare attendibile il certificato, inserisci yes.

  6. 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
  7. 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
  8. Utilizza keytool -list per controllare i certificati nei file dell'archivio chiavi e dell'archivio chiavi:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

Utilizzo degli archivi chiavi BCFKS per i sistemi operativi abilitati per FIPS

Quando lavori con sistemi operativi abilitati per FIPS, utilizza gli archivi chiavi FIPS (BCFKS) BouncyCastle. La sezione seguente descrive come utilizzare gli archivi 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 archivio chiavi 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, fai riferimento alla 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