Activer le chiffrement internœuds Cassandra

Le chiffrement entre nœuds (ou de nœud à nœud) protège les données circulant entre les nœuds d'un cluster à l'aide du protocole TLS. Cette page explique comment activer le chiffrement internœud Cassandra à l'aide de TLS sur Edge pour le cloud privé. Pour effectuer ces étapes, vous devez connaître les détails de votre anneau Cassandra.

Activer le chiffrement entre les nœuds Cassandra

Pour activer le chiffrement internœud Cassandra, procédez comme suit:

  1. Générez des certificats de serveur en suivant la procédure décrite dans l'annexe pour créer une clé et un certificat autosignés.

    Si vous utilisez Edge pour le cloud privé sur un système d'exploitation compatible avec FIPS, utilisez un Keystore FIPS (BCFKS) BouncyCastle. Consultez l'annexe ci-dessous pour obtenir des conseils sur l'utilisation du keystore de type BCFKS.

    Les étapes suivantes supposent que vous avez créé keystore.node0 et truststore.node0, ainsi que les mots de passe du keystore et du truststore, comme expliqué dans l'annexe. Le keystore et le truststore doivent être créés en tant qu'étapes préliminaires sur chaque nœud avant de passer aux étapes suivantes.

  2. Ajoutez les propriétés suivantes au fichier /opt/apigee/customer/application/cassandra.properties. Si le fichier n'existe pas, créez-le.
    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. Assurez-vous que le fichier cassandra.properties appartient à l'utilisateur apigee :
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties
    

Exécutez les étapes suivantes sur chaque nœud Cassandra, un à la fois, afin que les modifications prennent effet sans entraîner de temps d'arrêt pour les utilisateurs:

  1. Arrêtez le service Cassandra :
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  2. Redémarrez le service Cassandra :
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  3. Pour déterminer si le service de chiffrement TLS a démarré, recherchez le message suivant dans les journaux système :
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

Effectuer une rotation des certificats

Pour alterner des certificats, procédez comme suit:

  1. Ajoutez le certificat de chaque paire de clés générée de manière unique (voir Annexe) au truststore d'un nœud Cassandra existant, de sorte que les anciens certificats et les nouveaux certificats existent dans le même truststore :
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE
    

    NEW_ALIAS est une chaîne unique permettant d'identifier l'entrée, CERT est le nom du fichier de certificat à ajouter et EXISTING_TRUSTSTORE est le nom du truststore existant sur le nœud Cassandra.

  2. Utilisez un utilitaire de copie, tel que scp, pour distribuer le truststore à tous les nœuds Cassandra du cluster, en remplaçant le truststore existant utilisé par chaque nœud.
  3. Effectuez un redémarrage par vagues du cluster pour charger le nouveau truststore et établir la confiance pour les nouvelles clés avant qu'elles ne soient en place :
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
    
  4. Sur chaque nœud Cassandra du cluster, remplacez les propriétés indiquées ci-dessous par les nouvelles valeurs du keystore dans le fichier cassandra.properties :
    conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    NEW_KEYSTORE_PATH correspond au chemin d'accès au répertoire dans lequel se trouve le fichier keystore et NEW_KEYSTORE_PASSWORD au mot de passe du keystore défini lors de la création des certificats, comme expliqué dans l'annexe.

  5. Arrêtez le service Cassandra :
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
    
  6. Redémarrez le service Cassandra :
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
    
  7. Une fois la communication établie entre tous les nœuds, passez au nœud Cassandra suivant. Remarque:Ne passez au nœud suivant que si la communication est établie entre tous les nœuds.

Annexe

L'exemple suivant explique comment préparer les certificats de serveur nécessaires pour effectuer les étapes de chiffrement inter-nœud. Les commandes présentées dans l'exemple utilisent les paramètres suivants:

Paramètre Description
node0 Chaîne unique permettant d'identifier le nœud.
keystore.node0 Nom du keystore. Les commandes partent du principe que ce fichier se trouve dans le répertoire actuel.
keypass Le keypass doit être identique pour le keystore et la clé.
dname Identifie l'adresse IP de node0 comme 10.128.0.39.
-validity La valeur définie sur cet indicateur rend la paire de clés générée valide pendant 10 ans.
  1. Accédez au répertoire suivant :
    cd /opt/apigee/data/apigee-cassandra
  2. Exécutez la commande suivante pour générer un fichier nommé keystore.node0 dans le répertoire actuel :
    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"

    Important:Assurez-vous que le mot de passe de la clé est identique à celui du keystore.

  3. Exportez le certificat vers un fichier distinct :
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Assurez-vous que le fichier n'est lisible que par l'utilisateur apigee et par personne d'autre :
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Importez le certificat node0.cer généré dans le truststore du nœud :
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    La commande ci-dessus vous demande de définir un mot de passe. Il s'agit du mot de passe du truststore, qui peut être différent du mot de passe du keystore que vous avez défini précédemment. Si vous êtes invité à approuver le certificat, saisissez yes.

  6. Utilisez OpenSSL pour générer un fichier PEM du certificat sans clé. Notez que cqlsh ne fonctionne pas avec le certificat au format généré.
    $ 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. Pour le chiffrement de nœud à nœud, copiez le fichier node0.cer sur chaque nœud et importez-le dans le truststore de chaque nœud.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Utilisez keytool -list pour rechercher des certificats dans les fichiers keystore et truststore :
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

Utiliser des keystores BCFKS pour les systèmes d'exploitation compatibles avec FIPS

Lorsque vous utilisez des systèmes d'exploitation compatibles avec FIPS, utilisez des magasins de clés FIPS (BCFKS) BouncyCastle. La section ci-dessous explique comment utiliser les keystores de type BCFKS. Les autres étapes à suivre pour utiliser les keystores (comme la propriété des fichiers, l'emplacement des fichiers, etc.) restent les mêmes que celles indiquées dans cet annexe.

Pour générer un keystore de type BCFKS, utilisez la commande ci-dessous:

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

Remarque:Le mot de passe du keystore et celui de la clé doivent être identiques.

Remarque:Vous pouvez utiliser le fichier JAR bc-fips fourni par Apigee ou le télécharger à partir des dépôts de BouncyCastle. Consultez la documentation de BouncyCastle pour savoir comment générer un keystore BCFKS.

Exportez le certificat vers un fichier distinct:

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

Importez le certificat node0.cer généré dans le truststore du nœud:

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