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

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

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

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

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

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

  2. Добавьте в файл /opt/apigee/customer/application/cassandra.properties следующие свойства: Если файла нет, создайте его.
    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
      
  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, проверьте системные журналы на наличие следующего сообщения:
    Internode messaging enabled TLS protocols
    Internode messaging enabled cipher suites
    

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

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

  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_server_encryption_keystore=NEW_KEYSTORE_PATH
    conf_cassandra_server_encryption_keystore_password=NEW_KEYSTORE_PASSWORD
      

    где NEW_KEYSTORE_PATH – путь к каталогу, в котором находится файл хранилища ключей, а NEW_KEYSTORE_PASSWORD – пароль хранилища ключей, заданный при создании сертификатов, как описано в Приложении.

  5. Остановите сервис Cassandra:
    /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 Пароль 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