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

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