Abilita crittografia internode Cassandra

La crittografia internodo (o da nodo a nodo) protegge i dati che viaggiano tra i nodi di un cluster utilizzando TLS. Questa pagina spiega come abilitare la crittografia internodo di Cassandra utilizzando TLS su Edge per il Private Cloud. Per eseguire questi passaggi, devi conoscere i dettagli del ring di Cassandra.

Abilitare la crittografia internodo di Cassandra

Svolgi i seguenti passaggi per abilitare la crittografia internodo di Cassandra:

  1. Genera i certificati del server seguendo i passaggi riportati 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 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
      
  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 diventino effettive senza causare tempi di inattività per gli utenti:

  1. Arresta 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 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 univoca generata (vedi Appendice) all'archivio attendibilità di un nodo Cassandra esistente, in modo che sia i vecchi certificati sia i nuovi certificati esistano nello stesso archivio 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, ad esempio scp, per distribuire l'archivio attendibilità a tutti i nodi Cassandra nel cluster, sostituendo l'archivio attendibilità esistente in uso da ogni nodo.
  3. Esegui un riavvio graduale del cluster per caricare il nuovo archivio attendibilità e stabilire l'attendibilità delle nuove chiavi prima che vengano implementate:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
    
  4. Su ogni nodo Cassandra nel cluster, aggiorna le proprietà mostrate di seguito ai nuovi valori dell'archivio chiavi 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. Arresta 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 viene stabilita correttamente tra tutti i nodi, passa al nodo Cassandra successivo. Nota: passa 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 i passaggi di crittografia internodo. I comandi mostrati nell'esempio utilizzano i seguenti parametri:

Parametro Descrizione
node0 Qualsiasi stringa univoca per identificare il nodo.
keystore.node0 Un nome dell'archivio chiavi. I comandi presuppongono che questo file si trovi nella directory corrente.
keypass La password della chiave 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 valida la coppia di chiavi generata per 10 anni.
  1. Vai alla seguente directory:
    cd /opt/apigee/data/apigee-cassandra
  2. Esegui il comando seguente 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 sia la stessa della password 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 precedente ti chiede di impostare una password. Questa è la password dell'archivio attendibilità e può essere diversa dalla password dell'archivio chiavi 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 in ogni nodo e importalo nell'archivio attendibilità di ogni 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