Ativar a criptografia interna do Cassandra

A criptografia internós (ou nó para nó) protege os dados que trafegam entre os nós em um cluster usando TLS. Nesta página, explicamos como ativar a criptografia internode do Cassandra usando o TLS no Edge para nuvem privada. Para executar essas etapas, você precisa conhecer os detalhes do anel do Cassandra.

Ativar a criptografia interno do Cassandra

Para ativar a criptografia internode do Cassandra, siga o procedimento abaixo em todos os nós no cluster. Você precisa distribuir certificados públicos de cada nó para todos os nós. Depois disso, cada nó vai conter certificados node0.cer, node1.cer etc. no truststore. Cada nó vai conter apenas a própria chave privada no keystore. Por exemplo, node0 só vai conter node0.pem no keystore. É preciso ativar a criptografia em cada nó, um por vez.

Siga estas etapas para ativar a criptografia de internode do Cassandra:

  1. Gere certificados do servidor seguindo as etapas no Apêndice para criar uma chave e um certificado autoassinados.

    As etapas a seguir presumem que você criou keystore.node0 e truststore.node0, bem como as senhas do keystore e do truststore, conforme explicado no Apêndice. O keystore e o truststore precisam ser criados como etapas preliminares em cada nó antes de prosseguir para as próximas etapas.

  2. Adicione as seguintes propriedades ao arquivo /opt/apigee/customer/application/cassandra.properties. Se o arquivo não existir, crie-o.
    conf_cassandra_internode_encryption=all
    conf_cassandra_keystore=/opt/apigee/data/apigee-cassandra/keystore.node0
    conf_cassandra_keystore_password=keypass
    conf_cassandra_truststore=/opt/apigee/data/apigee-cassandra/truststore.node0
    conf_cassandra_truststore_password=trustpass
    # Optionally set the following to enable 2-way TLS or mutual TLS
    # conf_cassandra_require_client_auth=true
  3. Verifique se o arquivo cassandra.properties pertence ao usuário da Apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

Execute as etapas a seguir em cada nó do Cassandra, um de cada vez, para que as alterações entrem em vigor sem causar inatividade para os usuários:

  1. Interrompa o serviço do Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. Reinicie o serviço do Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. Para determinar se o serviço de criptografia TLS foi iniciado, procure a seguinte mensagem nos registros do sistema:
    Starting Encrypted Messaging Service on TLS port

Realizar a rotação de certificados

Para alternar certificados, siga estas etapas:

  1. Adicione o certificado de cada par de chaves exclusivo gerado (consulte o Apêndice) a um truststore atual do nó do Cassandra, de modo que os certificados antigos e novos existam no mesmo truststore:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    em que NEW_ALIAS é uma string exclusiva para identificar a entrada, CERT é o nome do arquivo de certificado a ser adicionado e EXISTING_TRUSTSTORE é o nome do truststore atual no nó do Cassandra.

  2. Use um utilitário de cópia, como o scp, para distribuir o truststore a todos os nós do Cassandra no cluster, substituindo o truststore atual em uso por cada nó.
  3. Execute uma reinicialização gradual do cluster para carregar o novo truststore e estabelecer a confiança para as novas chaves antes que elas sejam implantadas:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. Em cada nó do Cassandra no cluster, atualize as propriedades mostradas abaixo para os novos valores de keystore no arquivo cassandra.properties:
    conf_cassandra_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_keystore_password=NEW_KEYSTORE_PASSOWRD
    
      

    where NEW_KEYSTORE_PATH is the path to the directory where the keystore file is located and NEW_KEYSTORE_PASSWORD is the keystore password set when the certificates were created, as explained in the Appendix.

  5. Stop the Cassandra service:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  6. Reinicie o serviço do Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. Quando a comunicação for estabelecida entre todos os nós, prossiga para o próximo nó do Cassandra. Observação: só prossiga para o próximo nó se a comunicação entre todos eles for estabelecida.

Apêndice

O exemplo a seguir explica como preparar certificados de servidor necessários para executar as etapas de criptografia do internós. Os comandos mostrados no exemplo usam os seguintes parâmetros:

Parâmetro Descrição
node0 Qualquer string exclusiva para identificar o nó.
keystore.node0 Um nome de keystore. Os comandos presumem que esse arquivo esteja no diretório atual.
keypass O keypass precisa ser o mesmo para o keystore e para a chave.
dname Identifica o endereço IP de node0 como 10.128.0.39.
-validity O valor definido nessa sinalização torna o par de chaves gerado válido por 10 anos.
  1. Acesse o seguinte diretório:
    cd /opt/apigee/data/apigee-cassandra
  2. Execute este comando para gerar um arquivo chamado keystore.node0 no diretório atual:
    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:a senha da chave precisa ser a mesma do keystore.

  3. Exporte o certificado para um arquivo separado:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Verifique se o arquivo pode ser lido apenas pelo usuário da Apigee e por ninguém mais:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Importe o certificado gerado node0.cer para o truststore do nó:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    O comando acima solicita que você defina uma senha. Essa é a senha do truststore e pode ser diferente da senha do keystore definida anteriormente. Se for solicitado que você confie no certificado, insira yes.

  6. Use o OpenSSL para gerar um arquivo PEM do certificado sem chaves. Observe que cqlsh não funciona com o certificado no formato gerado.
    $ 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. Para criptografia de nó para nó, copie o arquivo node0.cer para cada nó e importe-o para o truststore de cada nó.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Use keytool -list para verificar certificados nos arquivos keystore e truststore:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0