Abilita crittografia internode Cassandra

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:

  1. 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 e truststore.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.

  2. 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
      
  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 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:

  1. 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 e EXISTING_TRUSTSTORE è il nome del truststore esistente sul nodo Cassandra.

  2. 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.
  3. 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
    
  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: 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.
  1. Vai alla seguente directory:
    cd /opt/apigee/data/apigee-cassandra
  2. 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.

  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 ti viene chiesto 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 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