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

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

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

Чтобы включить межузловое шифрование Cassandra, выполните приведенную ниже процедуру на всех узлах кластера. Вам необходимо распространить общедоступные сертификаты каждого узла на все узлы. После этого каждый узел будет содержать сертификаты node0.cer , node1.cer и т. д. в своем хранилище доверенных сертификатов. Каждый узел будет содержать только свой собственный закрытый ключ в своем хранилище ключей. Например, node0 будет содержать только node0.pem в своем хранилище ключей. Вам необходимо включить шифрование на каждом узле по одному.

Выполните следующие действия, чтобы включить межузловое шифрование 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