Как включить шифрование трафика между узлами Cassandra

Шифрование между узлами защищает данные, передаваемые между узлами в кластере, с помощью протокола TLS. На этой странице рассказывается, как включить шифрование трафика между узлами Cassandra с помощью TLS в Edge для частного облака. Чтобы выполнить эти действия, вам нужно знать подробности о кольце Cassandra.

Как включить шифрование трафика между узлами Cassandra

Чтобы включить шифрование трафика между узлами Cassandra, выполните следующие действия:

  1. Создайте сертификаты сервера, следуя инструкциям в Приложении, чтобы создать самоподписанный ключ и сертификат.

    В приведенных ниже инструкциях предполагается, что вы создали keystore.node0 и truststore.node0, а также пароли для хранилища ключей и хранилища доверенных сертификатов, как описано в Приложении. Хранилище ключей и хранилище доверенных сертификатов необходимо создать на каждом узле до выполнения следующих шагов.

  2. Добавьте в файл /opt/apigee/customer/application/cassandra.properties следующие свойства: Если файла нет, создайте его.
    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. Убедитесь, что файл cassandra.properties принадлежит пользователю apigee:
    chown apigee:apigee \
    /opt/apigee/customer/application/cassandra.properties

Выполните следующие действия на каждом узле Cassandra по очереди, чтобы изменения вступили в силу без простоя для пользователей:

  1. Остановите сервис Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra stop
  2. Перезапустите сервис Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  3. Чтобы узнать, запущен ли сервис шифрования TLS, проверьте системные журналы на наличие следующего сообщения:
    Starting Encrypted Messaging Service on TLS port

Выполните ротацию сертификатов

Чтобы сменить сертификаты, выполните следующие действия:

  1. Добавьте сертификат для каждой уникальной сгенерированной пары ключей (см. Приложение) в хранилище доверенных сертификатов существующего узла Cassandra, чтобы в нем были как старые, так и новые сертификаты:
    keytool -import -v -trustcacerts -alias NEW_ALIAS \
    -file CERT -keystore EXISTING_TRUSTSTORE

    где NEW_ALIAS – уникальная строка для идентификации записи, CERT – название файла сертификата, который нужно добавить, а EXISTING_TRUSTSTORE – название существующего хранилища доверенных сертификатов на узле Cassandra.

  2. Используйте утилиту копирования, например scp, чтобы распространить хранилище доверенных сертификатов на все узлы Cassandra в кластере, заменив существующее хранилище доверенных сертификатов, используемое каждым узлом.
  3. Выполните последовательную перезагрузку кластера, чтобы загрузить новое хранилище доверенных сертификатов и установить доверие для новых ключей до того, как они будут установлены:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra restart
  4. На каждом узле Cassandra в кластере обновите указанные ниже свойства, чтобы они соответствовали новым значениям хранилища ключей в файле 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. Перезапустите сервис Cassandra:
    /opt/apigee/apigee-service/bin/apigee-service \
    apigee-cassandra start
  7. Когда связь между всеми узлами будет установлена, перейдите к следующему узлу Cassandra. Примечание. Переходите к следующему узлу, только если между всеми узлами установлена связь.

Приложение

В следующем примере показано, как подготовить сертификаты сервера, необходимые для выполнения шагов шифрования между узлами. В командах из примера используются следующие параметры:

Параметр Описание
node0 Уникальная строка, идентифицирующая узел.
keystore.node0 Название хранилища ключей. Предполагается, что этот файл находится в текущем каталоге.
keypass Пароль должен быть одинаковым для хранилища ключей и ключа.
dname Определяет IP-адрес node0 как 10.128.0.39.
-validity Значение, заданное для этого флага, делает сгенерированную пару ключей действительной в течение 10 лет.
  1. Перейдите в следующий каталог:
    cd /opt/apigee/data/apigee-cassandra
  2. Чтобы создать файл с названием keystore.node0 в текущем каталоге, выполните следующую команду:
    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"

    Важно! Убедитесь, что пароль ключа совпадает с паролем хранилища ключей.

  3. Экспортируйте сертификат в отдельный файл:
    keytool -export -alias node0 -file node0.cer \
    -keystore keystore.node0
  4. Убедитесь, что файл доступен для чтения только пользователю apigee:
    $ chown apigee:apigee \
    /opt/apigee/data/apigee-cassandra/keystore.node0
    $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
  5. Импортируйте сгенерированный сертификат node0.cer в хранилище доверенных сертификатов узла:
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node0

    В приведенной выше команде вам предлагается задать пароль. Это пароль хранилища доверенных сертификатов, который может отличаться от пароля хранилища ключей, заданного ранее. Если появится запрос на доверие сертификату, введите yes.

  6. Используйте openssl, чтобы создать PEM-файл сертификата без ключей. Обратите внимание, что cqlsh не работает с сертификатом в сгенерированном формате.
    $ 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. Для шифрования между узлами скопируйте файл node0.cer на каждый узел и импортируйте его в хранилище доверенных сертификатов каждого узла.
    keytool -import -v -trustcacerts -alias node0 \
    -file node0.cer -keystore truststore.node1
  8. Используйте keytool -list, чтобы проверить наличие сертификатов в файлах хранилища ключей и хранилища доверенных сертификатов:
    $ keytool -list -keystore keystore.node0
    $ keytool -list -keystore truststore.node0