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:
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
etruststore.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.- 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
- 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:
- Pare o serviço do Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Reinicie o serviço do Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- 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:
- 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 eEXISTING_TRUSTSTORE
é o nome do repositório de confiança atual no nó do Cassandra. - 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ó.
- 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
- 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 eNEW_KEYSTORE_PASSWORD
é a senha do keystore definida quando os certificados foram criados, conforme explicado no Apêndice. - Pare o serviço do Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Reinicie o serviço do Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- 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. |
- Acesse o seguinte diretório:
cd /opt/apigee/data/apigee-cassandra
- 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.
- Exporte o certificado para um arquivo separado:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- 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
- 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
. - 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
- 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
- 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