Межузловое (или межузловое) шифрование защищает данные, передаваемые между узлами в кластере с помощью TLS. На этой странице объясняется, как включить межузловое шифрование Cassandra с помощью TLS on Edge для частного облака. Чтобы выполнить эти действия, вы должны быть знакомы с деталями вашего кольца Кассандра.
Включить межузловое шифрование Cassandra
Выполните следующие действия, чтобы включить межузловое шифрование Cassandra:
Сгенерируйте сертификаты сервера, выполнив действия, описанные в Приложении , чтобы создать самозаверяющий ключ и сертификат.
Если вы используете Edge для частного облака в операционной системе с поддержкой FIPS, используйте хранилище ключей BouncyCastle FIPS (BCFKS). В Приложении ниже приведены советы по работе с хранилищем ключей типа BCFKS.
Следующие шаги предполагают, что вы создали
keystore.node0
truststore.node0
, а также пароли хранилища ключей и хранилища доверенных сертификатов, как описано в Приложении . Хранилище ключей и хранилище доверенных сертификатов следует создать в качестве предварительных шагов на каждом узле, прежде чем переходить к следующим шагам.- Добавьте следующие свойства в файл
/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 # 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
- Убедитесь, что файл
cassandra.properties
принадлежит пользователю apigee:chown apigee:apigee \ /opt/apigee/customer/application/cassandra.properties
Выполните следующие шаги на каждом узле Cassandra по одному, чтобы изменения вступили в силу, не вызывая простоев для пользователей:
- Остановите службу Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Перезапустите службу Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Чтобы определить, запущена ли служба шифрования TLS, проверьте системные журналы на наличие следующего сообщения:
Internode messaging enabled TLS protocols Internode messaging enabled cipher suites
Выполнить ротацию сертификатов
Чтобы выполнить ротацию сертификатов, выполните следующие действия:
- Добавьте сертификат для каждой уникальной сгенерированной пары ключей (см. Приложение ) в существующее хранилище доверенных сертификатов узла Cassandra, чтобы и старые сертификаты, и новые сертификаты находились в одном хранилище доверенных сертификатов:
keytool -import -v -trustcacerts -alias NEW_ALIAS \ -file CERT -keystore EXISTING_TRUSTSTORE
где
NEW_ALIAS
— уникальная строка для идентификации записи,CERT
— имя добавляемого файла сертификата, аEXISTING_TRUSTSTORE
— имя существующего хранилища доверенных сертификатов на узле Cassandra. - Используйте утилиту копирования, например scp, чтобы распространить хранилище доверенных сертификатов на все узлы Cassandra в кластере, заменяя существующее хранилище доверенных сертификатов, используемое каждым узлом.
- Выполните последовательный перезапуск кластера, чтобы загрузить новое хранилище доверенных сертификатов и установить доверие для новых ключей до того, как они будут на месте:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra restart
- На каждом узле 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
— пароль хранилища ключей, установленный при создании сертификатов, как описано в Приложении . - Остановите службу Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra stop
- Перезапустите службу Cassandra:
/opt/apigee/apigee-service/bin/apigee-service \ apigee-cassandra start
- Когда связь между всеми узлами будет успешно установлена, перейдите к следующему узлу Cassandra. Примечание. Переходите к следующему узлу только в том случае, если связь между всеми узлами успешно установлена.
Приложение
В следующем примере объясняется, как подготовить сертификаты сервера, необходимые для выполнения шагов межузлового шифрования. Команды, показанные в примере, используют следующие параметры:
Параметр | Описание |
---|---|
node0 | Любая уникальная строка для идентификации узла. |
keystore.node0 | Имя хранилища ключей. Команды предполагают, что этот файл находится в текущем каталоге. |
keypass | Ключевой пароль должен быть одинаковым как для хранилища ключей, так и для ключа. |
dname | Идентифицирует IP-адрес node0 как 10.128.0.39 . |
-validity | Значение, установленное для этого флага, делает сгенерированную пару ключей действительной в течение 10 лет. |
- Перейдите в следующий каталог:
cd /opt/apigee/data/apigee-cassandra
- Выполните следующую команду, чтобы создать файл с именем
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"
Важно: Убедитесь, что пароль ключа совпадает с паролем хранилища ключей.
- Экспортируйте сертификат в отдельный файл:
keytool -export -alias node0 -file node0.cer \ -keystore keystore.node0
- Убедитесь, что файл доступен для чтения только пользователю apigee и никому другому:
$ chown apigee:apigee \ /opt/apigee/data/apigee-cassandra/keystore.node0 $ chmod 400 /opt/apigee/data/apigee-cassandra/keystore.node0
- Импортируйте сгенерированный сертификат
node0.cer
в хранилище доверенных сертификатов узла:keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node0
Команда выше попросит вас установить пароль. Это пароль хранилища доверенных сертификатов, который может отличаться от пароля хранилища ключей, который вы установили ранее. Если будет предложено доверять сертификату, введите
yes
. - Используйте 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
- Для межузлового шифрования скопируйте файл
node0.cer
на каждый узел и импортируйте его в хранилище доверенных сертификатов каждого узла.keytool -import -v -trustcacerts -alias node0 \ -file node0.cer -keystore truststore.node1
- Используйте
keytool -list
для проверки наличия сертификатов в файлах хранилища ключей и хранилища доверенных сертификатов:$ keytool -list -keystore keystore.node0 $ keytool -list -keystore truststore.node0
Работа с хранилищами ключей BCFKS для операционных систем с поддержкой FIPS.
При работе с операционными системами с поддержкой FIPS используйте хранилища ключей BouncyCastle FIPS (BCFKS). В разделе ниже описывается, как работать с хранилищами ключей типа BCFKS. Остальные шаги по работе с хранилищами ключей (например, владение файлом, расположение файла и т. д.) остаются такими же, как указано в этом приложении.
Чтобы создать хранилище ключей типа BCFKS, используйте команду ниже:
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
Примечание. Пароль хранилища ключей и пароль ключа должны быть одинаковыми.
Примечание. Можно использовать jar-файл bc-fips
, поставляемый Apigee, или загрузить тот же jar-файл из репозитория BouncyCastle. Обратитесь к документации BouncyCastle для получения более подробной информации о том, как создать хранилище ключей BCFKS.
Экспортируйте сертификат в отдельный файл:
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
Импортируйте сгенерированный сертификат node0.cer
в хранилище доверенных сертификатов узла:
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