Ativar a criptografia interna do Cassandra

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

Ativar a criptografia entre nós do Cassandra

Siga estas etapas para ativar a criptografia entre nós 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 pressupõem 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 com 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_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. Verifique se o arquivo cassandra.properties pertence ao usuário apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties
    

Execute as etapas a seguir em cada nó do Cassandra, uma de cada vez, para que as mudanças entrem em vigor sem causar tempo de 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, verifique os registros do sistema em busca da seguinte mensagem:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

Fazer a rotação do certificado

Para girar os certificados, siga estas etapas:

  1. Adicione o certificado de cada par de chaves gerado exclusivo (consulte o Apêndice) ao truststore de um nó do Cassandra existente, 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 existente no nó do Cassandra.

  2. Use um utilitário de cópia, como scp, para distribuir o truststore a todos os nós do Cassandra no cluster, substituindo o truststore em uso por cada nó.
  3. Faça uma reinicialização contínua do cluster para carregar o novo truststore e estabelecer confiança para as novas chaves antes que elas sejam instaladas:
    /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 do keystore no arquivo cassandra.properties:
    conf_cassandra_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    Em que NEW_KEYSTORE_PATH é o caminho para o diretório em que o arquivo do keystore está localizado e NEW_KEYSTORE_PASSWORD é a senha do keystore definida quando os certificados foram criados, conforme explicado no Apêndice.

  5. Interrompa o serviço do Cassandra:
    /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 com sucesso 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 for estabelecida com sucesso entre todos os nós.

Apêndice

O exemplo a seguir explica como preparar os certificados do servidor necessários para executar as etapas de criptografia entre nó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 pressupõem que esse arquivo esteja no diretório atual.
keypass O keypass precisa ser o mesmo para o keystore e a chave.
dname Identifica o endereço IP de node0 como 10.128.0.39.
-validity O valor definido nessa flag 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 o comando a seguir 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:verifique se a senha da chave é 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 apigee e por mais ninguém:
    $ 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 pede que você defina uma senha. Essa é a senha do truststore e pode ser diferente da senha do keystore definida anteriormente. Se for solicitado a confiar 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ó a 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 se há certificados nos arquivos do keystore e do truststore:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0