La encriptación entre nodos (o de nodo a nodo) protege los datos que se transfieren entre nodos en un clúster mediante TLS. En esta página, se explica cómo habilitar la encriptación entre nodos de Cassandra mediante TLS en Edge para nube privada. Para realizar estos pasos, debes estar familiarizado con los detalles de tu anillo de Cassandra.
Habilitar la encriptación entre nodos de Cassandra
Para habilitar la encriptación entre nodos de Cassandra, sigue el siguiente procedimiento en todos los nodos del
clúster. Debes distribuir certificados públicos de cada nodo a todos los nodos.
Después de hacerlo, cada nodo contendrá los certificados node0.cer
, node1.cer
, etc. en su almacén de confianza. Cada nodo solo contendrá su propia clave privada en su almacén de claves. Por ejemplo, node0
solo contendrá node0.pem
en su almacén de claves. Debes habilitar la encriptación en cada nodo, uno a la vez.
Sigue estos pasos para habilitar la encriptación entre nodos de Cassandra:
Genera certificados de servidor mediante los pasos que se indican en el Apéndice para crear una clave y un certificado autofirmados.
En los siguientes pasos, se da por sentado que creaste
keystore.node0
ytruststore.node0
, además de las contraseñas del almacén de claves y del almacén de confianza, como se explica en el Apéndice. El almacén de claves y el almacén de confianza deben crearse como pasos preliminares en cada nodo antes de continuar con los siguientes pasos.- Agrega las siguientes propiedades al archivo
/opt/apigee/customer/application/cassandra.properties
. Si el archivo no existe, créalo.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
- Asegúrate de que el archivo
cassandra.properties
sea propiedad del usuario de Apigee:chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
Ejecuta los siguientes pasos en cada nodo de Cassandra, uno a la vez, para que los cambios se apliquen sin causar tiempo de inactividad para los usuarios:
- Detén el servicio de Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
. - Reinicia el servicio de Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Para determinar si se inició el servicio de encriptación TLS, busca el siguiente mensaje en los registros del sistema:
Starting Encrypted Messaging Service on TLS port
Realiza la rotación de certificados
Para rotar los certificados, sigue estos pasos:
- Agrega el certificado para cada par de claves único generado (consulta el Apéndice) al almacén de confianza del nodo Cassandra existente, de modo que los certificados antiguos y los nuevos existan en el mismo almacén de confianza:
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
en el que
NEW_ALIAS
es una string única para identificar la entrada,CERT
es el nombre del archivo de certificado que se agregará yEXISTING_TRUSTSTORE
es el nombre del almacén de confianza existente en el nodo Cassandra. - Usa una utilidad de copia, como scp, para distribuir el almacén de confianza a todos los nodos de Cassandra en el clúster, y reemplazar el almacén de confianza existente que usa cada nodo.
- Realiza un reinicio progresivo del clúster a fin de cargar el almacén de confianza nuevo y establecer confianza para las
claves nuevas antes de que se implementen:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- En cada nodo de Cassandra del clúster, actualiza las propiedades que se muestran a continuación a los nuevos valores del almacén de claves en el archivo 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 andNEW_KEYSTORE_PASSWORD
is the keystore password set when the certificates were created, as explained in the Appendix. - Stop the Cassandra service:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
. - Reinicia el servicio de Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Cuando se establezca correctamente la comunicación entre todos los nodos, pasa al siguiente nodo de Cassandra. Nota: Continúa con el siguiente nodo solo si se estableció correctamente la comunicación entre todos los nodos.
Apéndice
En el siguiente ejemplo, se explica cómo preparar los certificados de servidor necesarios para realizar los pasos de encriptación entre nodos. Los comandos que se muestran en el ejemplo usan los siguientes parámetros:
Parámetro | Descripción |
---|---|
node0 |
Cualquier cadena única para identificar el nodo. |
keystore.node0 |
Un nombre de almacén de claves. Los comandos suponen que este archivo está en el directorio actual. |
keypass |
El paso de clave debe ser el mismo para el almacén de claves y la clave. |
dname |
Identifica la dirección IP de node0 como 10.128.0.39 . |
-validity |
El valor establecido en esta marca hace que el par de claves generado sea válido durante 10 años. |
- Ve al siguiente directorio:
cd /opt/apigee/data/apigee-cassandra
- Ejecuta el siguiente comando para generar un archivo llamado
keystore.node0
en el directorio actual: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: Asegúrate de que la contraseña de la clave sea la misma que la del almacén de claves.
- Exporta el certificado a otro archivo:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
. - Asegúrate de que solo el usuario de Apigee pueda leer el archivo y que nadie más pueda leer el archivo:
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- Importa el certificado generado
node0.cer
al almacén de confianza del nodo:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
El comando anterior te solicita que establezcas una contraseña. Esta es la contraseña del almacén de confianza y puede ser diferente de la contraseña del almacén de claves que configuraste antes. Si se te solicita que confíes en el certificado, ingresa
yes
. - Usa openssl para generar un archivo PEM del certificado sin claves. Ten en cuenta que
cqlsh
no funciona con el certificado en el formato generado.$ 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 la encriptación de nodo a nodo, copia el archivo
node0.cer
en cada nodo y, luego, impórtalo al almacén de confianza de cada nodo.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- Usa
keytool -list
para verificar certificados en los archivos de almacén de claves y almacén de confianza:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0