Шифрование между узлами защищает данные, передаваемые между узлами в кластере, с помощью протокола TLS. На этой странице рассказывается, как включить шифрование трафика между узлами Cassandra с помощью TLS в Edge для частного облака. Чтобы выполнить эти действия, вам нужно знать подробности о кольце Cassandra.
Как включить шифрование трафика между узлами 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, или скачать его из репозиториев BouncyCastle. Информацию о том, как создать хранилище ключей BCFKS, можно найти в документации BouncyCastle.
Экспортируйте сертификат в отдельный файл:
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