Ativar a criptografia interna do Cassandra

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

Ativar a criptografia internós do Cassandra

Siga estas etapas para ativar a criptografia internós do Cassandra:

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

    Se você estiver usando o Edge para nuvem privada em um sistema operacional habilitado para FIPS, use um Keystore FIPS do BouncyCastle (BCFKS). Consulte o Apêndice abaixo para conferir dicas sobre como trabalhar com o keystore do tipo BCFKS.

    As etapas a seguir pressupõem que você criou keystore.node0 e truststore.node0, assim 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_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. 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 por vez, para que as mudanças entrem em vigor sem causar inatividade para os usuários:

  1. Pare 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 a seguinte mensagem nos registros do sistema:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

Fazer a rotação de certificados

Para alternar certificados, siga estas etapas:

  1. Adicione o certificado de cada par de chaves gerado (consulte o Apêndice) a um repositório de confiança de nó do Cassandra, de modo que os certificados antigos e novos existam no mesmo repositório de confiança:
    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 repositório de confiança atual no nó do Cassandra.

  2. Use um utilitário de cópia, como o scp, para distribuir o repositório de confiança a todos os nós do Cassandra no cluster, substituindo o repositório de confiança em uso por cada nó.
  3. Execute uma reinicialização gradual do cluster para carregar o novo truststore e estabelecer confiança nas novas chaves antes que elas estejam em vigor:
    /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_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. Pare 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 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 entre todos os nós.

Apêndice

O exemplo a seguir explica como preparar os certificados do servidor necessários para realizar as etapas de criptografia de internodo. 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:confira se a senha da chave é a mesma da senha 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 só pode ser lido pelo usuário da Apigee:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Importe o certificado node0.cer gerado para o repositório de confiança 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 repositório de confiança e pode ser diferente da senha do keystore definida anteriormente. Se você precisar confiar no certificado, digite yes.

  6. Use o openssl para gerar um arquivo PEM do certificado sem chaves. 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 a criptografia de nó para nó, copie o arquivo node0.cer para cada nó e importe-o para o repositório de confiança 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 de keystore e truststore:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0

Como trabalhar com keystores BCFKS para sistemas operacionais habilitados para FIPS

Ao trabalhar com sistemas operacionais ativados pelo FIPS, use as chaves BouncyCastle FIPS (BCFKS). A seção abaixo descreve como trabalhar com keystores do tipo BCFKS. As outras etapas para trabalhar com keystores (como propriedade de arquivo, local do arquivo e outras) permanecem as mesmas mencionadas neste apêndice.

Para gerar um keystore do tipo BCFKS, use o comando abaixo:

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

Observação:as senhas do keystore e da chave precisam ser iguais.

Observação: é possível usar o jar bc-fips enviado pela Apigee ou fazer o download dele nos repositórios do BouncyCastle. Consulte a documentação do BouncyCastle para mais detalhes sobre como gerar um keystore do BCFKS.

Exporte o certificado para um arquivo separado:

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

Importe o certificado gerado node0.cer para o truststore do nó:

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