Введение
Различные компоненты Edge for Private Cloud, такие как обработчики сообщений, серверы управления и маршрутизаторы, по умолчанию подключаются к узлам Cassandra по текстовому каналу. По таким каналам данные передаются в Cassandra и обратно в открытом виде. Apigee mTLS — это функция на основе сервисной сетки Consul, которая обеспечивает безопасность обмена данными между компонентами кластера Edge for Private Cloud. Это предложение Apigee также обеспечивает безопасность TLS в канале связи между клиентскими компонентами и Cassandra.
В этой статье рассматривается новое альтернативное предложение Apigee, в котором связь между клиентскими компонентами и Cassandra в Edge для частного облака защищена с помощью двустороннего TLS (также известного как двусторонний TLS) с использованием функций, изначально доступных в Cassandra, без использования внешней сервисной сетки.
Собственная функция mTLS
Включение mTLS между Cassandra и клиентскими компонентами, описанное в этой статье, основано на функциях TLS, изначально предоставляемых Apache Cassandra . При включении mTLS клиентские соединения с Cassandra (через собственный транспортный порт CQL 9042) выполняют двустороннее TLS-рукопожатие с клиентами, прежде чем разрешить установку соединения. В рамках этого двустороннего TLS-соединения Cassandra выступает в качестве сервера, а различные клиенты, подключающиеся к Cassandra (например, edge-message-processor, cqlsh tool и т. д.), — в качестве клиентов.
Для двустороннего TLS (или взаимного TLS или mTLS) и в Cassandra, и на клиентах необходимо настроить собственное хранилище ключей. Хранилище ключей каждого узла Cassandra должно содержать собственный ключ и сертификат. Хранилище ключей каждого клиентского приложения должно содержать ключ и сертификат этого клиента. Хранилище доверенных сертификатов, содержащее сертификаты и связанную цепочку сертификатов, должно быть добавлено как в Cassandra, так и на клиентах. Хранилище доверенных сертификатов каждого узла Cassandra должно содержать сертификаты клиентов, а хранилище доверенных сертификатов каждого клиента должно содержать сертификаты всех узлов Cassandra. Подробнее о том, как работает двустороннее рукопожатие TLS, см. в статье Apigee «Двустороннее TLS/SSL» .
Цепочка сертификатов
Как правило, в двустороннем TLS сертификаты сервера, клиентские сертификаты, цепочки сертификатов, хранилища ключей и хранилища доверенных сертификатов могут быть созданы различными способами. То же самое справедливо и для Cassandra, и для клиентского mTLS. Учитывая, как организации обычно используют кластеры Edge for Private Cloud и количество уникальных пар подключений клиент-Cassandra, которые можно установить, Apigee рекомендует использовать следующий общий подход к настройке ключей и сертификатов для этой функции. Существуют и другие приемлемые методы, но описанный ниже метод, вероятно, обеспечивает хороший баланс между безопасностью и затратами на обслуживание.
Получите корневой сертификат и пару промежуточных ключей и сертификатов, подписанных корневым сертификатом. Возможно, у вас уже есть такие ключи и сертификаты. Если нет, вы можете создать самоподписанные корневой и промежуточные сертификаты и ключи, следуя инструкциям в Приложении 1 .
- Используйте общий промежуточный ключ/сертификат, указанный выше, для подписи всех ключей и сертификатов, специфичных для приложения (листовых).
Наличие общего промежуточного ключа/сертификата в одном кластере позволяет настроить общее хранилище доверенных сертификатов (содержащее одну и ту же цепочку корневых и промежуточных сертификатов) на каждом узле Cassandra и клиентском узле. Каждый узел Cassandra и клиентское приложение получают свой уникальный конечный ключ и сертификат, подписанный общим промежуточным ключом/сертификатом.
- Ротация листового сертификата узла Cassandra или клиентского приложения выполняется тривиально.
- Ротация промежуточного или корневого сертификата по-прежнему остается довольно сложной операцией, но частота таких ротаций будет намного ниже, чем у листовых сертификатов.
Используйте принятые в вашей организации методы обеспечения безопасности, чтобы решить, следует ли использовать общие корневые и промежуточные сертификаты для разных кластеров частного облака. Альтернативные варианты настройки сертификатов см. в Приложении 2 .
Оставшиеся шаги в этой статье содержат подробную информацию о вышеуказанной методологии разработки ключей и сертификатов.
Ограничения и предостережения
К этой функции применяются следующие ограничения.
- Это предложение нативного mTLS между клиентскими компонентами и Cassandra НЕ совместимо с apigee-mtls . Если вы используете эту функцию, вы не сможете использовать apigee-mtls и наоборот.
- Включение mTLS между клиентскими компонентами и Cassandra окажет некоторое влияние на производительность соединений между клиентами и Cassandra. Такие операции, как загрузка клиентов или масштабирование соединений Cassandra, могут выполняться медленнее, поскольку Cassandra и клиенты должны сначала согласовать TLS перед началом обмена данными. Влияние должно быть незначительным и, как правило, незаметным.
- В Cassandra mTLS может быть опционально включен для входящих клиентских подключений. Хотя принудительное включение можно включить, его необходимо отключить во время выполнения рабочих задач, таких как обновление программного обеспечения Apigee, включение/отключение функций TLS и определённые типы ротации сертификатов. Подробнее см. в разделе «Операции и конфигурации» .
- Управление и поддержание сертификатов является обязанностью заказчика.
- Ротация сертификатов имеет ряд нюансов. Подробнее см. в разделе «Ротация сертификатов».
Включить собственный mTLS
На высоком уровне включение собственного mTLS представляет собой трехэтапную процедуру, описанную ниже:
- Получите корневой сертификат и промежуточную пару ключ/сертификат.
- Создайте пару «листовой ключ/сертификат» для одного узла Cassandra, подпишите её, сохраните в хранилище ключей и настройте Cassandra для использования mTLS (необязательно) . Повторите шаги для каждого узла Cassandra по одному за раз.
- Создайте пару «листовой ключ/сертификат» для одного клиентского приложения, подпишите её, сохраните в хранилище ключей и настройте клиентское приложение для mTLS. Повторите шаги для каждого клиентского приложения по одному за раз. Клиентские приложения:
- сервер управления периферией
- процессор граничных сообщений
- кромочный маршрутизатор
Эти шаги подробно описаны ниже:
Получить корневые и промежуточные сертификаты
Получите корневой сертификат и пару промежуточных ключей и сертификатов, подписанных корневым сертификатом. Используйте корневой и промежуточный сертификаты, подписанные центром сертификации вашей организации, или создайте самоподписанные сертификаты. Сохраните цепочку корневого и промежуточного сертификатов в хранилище доверенных сертификатов. Полезные команды см. в Приложении 1. Последующие команды предполагают, что у вас есть доступ к следующим файлам:
-
intermediate.key
- ключевой файл промежуточного сертификата для подписи листовых сертификатов -
intermediate-cert.pem
- промежуточный сертификат
Настройте узлы Cassandra
- Выберите один узел Cassandra
- Сгенерируйте пару «листовой ключ — сертификат» и подпишите её промежуточным сертификатом. Сохраните ключ и подписанный сертификат в хранилище ключей. Пример ниже:
# Generate Leaf key and csr openssl req -newkey rsa:2048 -keyout cass-node1.key -out cass-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=cassnode1@yourorg.com" # leaf cert signed by intermediate openssl x509 -req -in cass-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out cass-node1-cert.pem # keystore packaging leaf key and cert openssl pkcs12 -export -clcerts -in cass-node1-cert.pem -inkey cass-node1.key -out cass-node1-keystore.pfx -name nativemtls -password pass:keystorepass
Разместите файлы хранилища ключей и хранилища доверенных сертификатов в определенном месте на узле и обеспечьте к ним доступ пользователю Apigee.
cp cass-node1-keystore.pfx /opt/apigee/customer/application/ cp truststore.pfx /opt/apigee/customer/application/ chown apigee:apigee /opt/apigee/customer/application/cass-node1-keystore.pfx chown apigee:apigee /opt/apigee/customer/application/truststore.pfx
- Создайте или отредактируйте файл
/opt/apigee/customer/application/cassandra.properties
. Добавьте в него следующее содержимое:### Enable Cassandra TLS on CQL connections conf_cassandra_client_encryption_enabled=true ### Optional TLS - true or false conf_cassandra_client_encryption_optional=true ### Keystore details conf_cassandra_client_encryption_keystore=/opt/apigee/customer/application/cass-node1-keystore.pfx conf_cassandra_client_encryption_keystore_password=keystorepass conf_cassandra_server_encryption_store_type=PKCS12 ### Whether to enable 2-way TLS (or mTLS) - true or false conf_cassandra_client_encryption_require_client_auth=true ### When 2-way TLS is enabled, client certificate details need to be provided via a truststore conf_cassandra_client_encryption_truststore=/opt/apigee/customer/application/truststore.pfx conf_cassandra_client_encryption_truststore_password=trustpass conf_cassandra_client_encryption_store_type=PKCS12
Кроме того, для операционных систем с поддержкой FIPS добавьте следующее свойство в файл
/opt/apigee/customer/application/cassandra.properties
:conf_cassandra_client_encryption_protocol=TLSv1.2
Убедитесь, что файл принадлежит пользователю apigee и доступен для чтения:
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Настройте и перезапустите узел Cassandra.
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Повторите вышеуказанные шаги на каждом узле Cassandra по одному за раз.
Настройка клиентских приложений
Этот раздел применим к следующим клиентским компонентам, подключающимся к Cassandra:
- сервер управления периферией
- процессор граничных сообщений
- кромочный маршрутизатор
- Выберите один клиентский компонент
- Сгенерируйте пару «листовой ключ — сертификат» и подпишите её промежуточным сертификатом. Сохраните ключ и подписанный сертификат в хранилище ключей. Пример ниже:
# Generate Leaf key and csr openssl req -newkey rsa:2048 -keyout mgmt-node1.key -out mgmt-node1-req.pem -sha256 -days 365 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=yourip/emailAddress=mgmtnode1@yourorg.com" # leaf cert signed by intermediate openssl x509 -req -in mgmt-node1-req.pem -CAkey intermediate.key -CA intermediate-cert.pem -days 365 -CAcreateserial -out mgmt-node1-cert.pem # keystore packaging leaf key and cert openssl pkcs12 -export -clcerts -in mgmt-node1-cert.pem -inkey mgmt-node1.key -out mgmt-node1-keystore.pfx -name nativemtls -password pass:keystorepass
Разместите файлы хранилища ключей и хранилища доверенных сертификатов в определенном месте на узле и обеспечьте к ним доступ пользователю Apigee.
cp mgmt-node1-keystore.pfx /opt/apigee/customer/application/ cp truststore.pfx /opt/apigee/customer/application/ chown apigee:apigee /opt/apigee/customer/application/mgmt-node1-keystore.pfx chown apigee:apigee /opt/apigee/customer/application/truststore.pfx
- Создайте и отредактируйте файл конфигурации на основе настраиваемого приложения.
Приложение Файл конфигурации Сервер управления /opt/apigee/customer/application/management-server.properties
Процессор управления /opt/apigee/customer/application/message-processor.properties
Маршрутизатор /opt/apigee/customer/application/router.properties
Добавьте в файл следующие конфигурации:
### Enable TLS on CQL connections conf_cassandra_sslconfig.enable.tls=true conf_cassandra_sslconfig.enable.mtls=true ### Keystore Details conf_cassandra_sslconfig.keystore.path=/opt/apigee/customer/application/mgmt-node1-keystore.pfx conf_cassandra_sslconfig.keystore.password=keystorepass conf_cassandra_sslconfig.keystore.type=PKCS12 ### Truststore Details conf_cassandra_sslconfig.truststore.path=/opt/apigee/customer/application/truststore.pfx conf_cassandra_sslconfig.truststore.password=trustpass conf_cassandra_sslconfig.truststore.type=PKCS12
Убедитесь, что файл конфигурации принадлежит пользователю Apigee и доступен для чтения.
chown apigee:apigee configuration file ### Example: chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Перезапустите клиентское приложение.
# Configure and restart service: apigee-service component configure apigee-service component restart # Example, to configure and restart message processor application apigee-service edge-message-processor configure apigee-service edge-message-processor restart
- Вы можете убедиться в том, что SSL был правильно настроен в клиентском приложении, просмотрев записи в системном журнале соответствующего приложения по следующим строкам:
Добавлены параметры SSL для подключения Cassandra
- Повторите вышеуказанные шаги для каждого клиентского приложения по одному за раз.
Операции и конфигурации
Обеспечить соблюдение mTLS
Если в Cassandra не используется принудительное использование mTLS, Cassandra принимает как незашифрованные соединения от клиентов, так и клиенты, с которыми она может успешно выполнить двустороннее TLS-рукопожатие. Для работы принудительного использования mTLS необходимо сначала настроить mTLS в Cassandra . Вы можете включить принудительное использование mTLS в Cassandra, выполнив следующие действия:
- Выберите один узел Cassandra
- Создайте или отредактируйте файл
/opt/apigee/customer/application/cassandra.properties
. Добавьте или отредактируйте следующее свойство в этом файле:### Optional TLS - true or false conf_cassandra_client_encryption_optional=false
Убедитесь, что файл принадлежит пользователю Apigee и доступен для чтения.
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Настройте и перезапустите узел Cassandra.
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Повторите вышеуказанные шаги на каждом узле Cassandra по одному за раз.
После включения mTLS в Cassandra стандартный инструмент запросов Cassandra cqlsh не сможет напрямую подключаться к Cassandra. Чтобы настроить cqlsh для SSL, сгенерируйте новый ключ и сертификат (аналогично ключу и сертификату для клиентских приложений ) и выполните следующие действия:
- Создать или отредактировать файл
$HOME/.cassandra/cqlshrc
- Добавьте в файл следующее содержимое:
[ssl] certfile = /home/admin-user/certs/inter-root.pem validate = false userkey = /home/admin-user/certs/cqlsh1.key usercert = /home/admin-user/certs/cqlsh1-cert.pem
certfile
— файл сертификата, содержащий корневую и промежуточную цепочку сертификатов-
userkey
— клиентский ключ, используемый cqlsh. Это должна быть пара «листовой ключ/сертификат», которую можно сгенерировать и подписать промежуточным сертификатом. -
usercert
— клиентский сертификат, используемый cqlsh. Это должен быть листовой ключ/сертификат, который можно сгенерировать и подписать промежуточным сертификатом.
- Выполните команду
cqlsh
как обычно, указав аргумент--ssl
. Например:$ /opt/apigee/apigee-cassandra/bin/cqlsh --ssl X.X.X.X Connected to Apigee at X.X.X.X:9042 [cqlsh 6.0.0 | Cassandra 4.0.13 | CQL spec 3.4.5 | Native protocol v5] Use HELP for help. cqlsh>
Отключить принудительное использование mTLS на Cassandra
Чтобы отключить принудительное использование mTLS в Cassandra, выполните следующие действия:
- Выберите один узел Cassandra
- Создайте или отредактируйте файл
/opt/apigee/customer/application/cassandra.properties
. Добавьте или отредактируйте следующее свойство в этом файле:### Optional TLS - true or false conf_cassandra_client_encryption_optional=true
Убедитесь, что файл принадлежит пользователю Apigee и доступен для чтения.
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Настройте и перезапустите узел Cassandra.
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Повторите вышеуказанные шаги на каждом узле Cassandra по одному за раз.
Отключить собственный mTLS
Отключение нативного mTLS — это многоэтапный процесс, аналогичный включению нативного mTLS . Основные этапы:
- Отключить принудительное использование mTLS в Cassandra (если применяется)
- Поочередно отключите mTLS во всех узлах следующих клиентских приложений:
- сервер управления периферией
- процессор граничных сообщений
- кромочный маршрутизатор
- Создайте и отредактируйте файл конфигурации на основе настраиваемого приложения:
Приложение Файл конфигурации Сервер управления /opt/apigee/customer/application/management-server.properties
Процессор управления /opt/apigee/customer/application/message-processor.properties
Маршрутизатор /opt/apigee/customer/application/router.properties
- Добавьте или отредактируйте следующие свойства в файле конфигурации:
### TLS on CQL connections conf_cassandra_sslconfig.enable.tls=false conf_cassandra_sslconfig.enable.mtls=false
- Убедитесь, что файл конфигурации принадлежит пользователю apigee и доступен для чтения:
chown apigee:apigee configuration file ### Example: chown apigee:apigee /opt/apigee/customer/application/management-server.properties
- Перезапустите клиентское приложение:
# Configure and restart service: apigee-service component configure apigee-service component restart # Example, to configure and restart message processor application apigee-service edge-message-processor configure apigee-service edge-message-processor restart
- Повторите шаги с #a по #d для каждого клиентского приложения, по одному за раз.
- Отключите mTLS на всех узлах Cassandra по очереди:
- Выберите один узел Cassandra.
- Создайте или отредактируйте файл
/opt/apigee/customer/application/cassandra.properties
. Добавьте или отредактируйте следующее свойство в этом файле:### Cassandra TLS on CQL connections conf_cassandra_client_encryption_enabled=false
Убедитесь, что файл принадлежит пользователю Apigee и доступен для чтения.
chown apigee:apigee /opt/apigee/customer/application/cassandra.properties
- Настройте и перезапустите узел Cassandra
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
- Повторите шаги с #a по #c на каждом узле Cassandra, по одному за раз.
Ротация сертификатов
Ротация только для сертификатов Leaf (с сохранением тех же промежуточных и корневых сертификатов)Можно выполнить шаги, аналогичные настройке клиентских приложений :
- Генерация нового листового ключа/сертификата для приложения, использующего тот же промежуточный ключ/сертификат
- Настройте путь к новому ключу/сертификату в приложении вместе с паролем и типом хранилища ключей.
- Перезапустите приложение.
Если вы планируете провести ротацию промежуточного или корневого сертификата, рекомендуется сделать это в несколько этапов:
- Отключите собственный mTLS Cassandra во всем кластере.
- Используйте новые корневые и промежуточные сертификаты для генерации новых листовых сертификатов или сертификатов приложений.
- Следуйте инструкциям по включению собственного mTLS Cassandra с использованием нового набора ключей и сертификатов.
Общие операции Apigee
Для выполнения общих операций Apigee, таких как обновление программного обеспечения Apigee, добавление или удаление узлов Cassandra, добавление или удаление центров обработки данных, включение или отключение аутентификации Cassandra и т. д., убедитесь, что в Cassandra отключено принудительное использование mTLS. Если у вас включено принудительное использование mTLS, отключите его перед выполнением этих операций.
Приложение 1
Действия, описанные в этом приложении, можно выполнить для создания самоподписанной пары корневого и промежуточного ключа/сертификата и добавления этой цепочки сертификатов в хранилище доверенных сертификатов.Генерация самоподписанных корневых и промежуточных сертификатов
# Create self-signed root key and cert openssl req -x509 -newkey rsa:2048 -keyout root.key -out root-cert.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=root.yourorg.com/emailAddress=apigeeroot@yourorg.com" # Create intermediate key and cert (signed by root) openssl req -newkey rsa:2048 -keyout intermediate.key -out intermediate-req.pem -sha256 -days 3650 -nodes -subj "/C=yourc/ST=yourst/L=yourl/O=youro/OU=yourou/CN=inter.yourorg.com/emailAddress=apigeeinter@yourorg.com" openssl x509 -req -in intermediate-req.pem -CAkey root.key -CA root-cert.pem -days 3650 -CAcreateserial -out intermediate-cert.pem
Создать хранилище доверенных сертификатов
# Merge root and intermediate cert into 1 file cat intermediate-cert.pem > inter-root.pem cat root-cert.pem >> inter-root.pem # Create truststore to be used everywhere keytool -keystore truststore.pfx -storetype PKCS12 -importcert -file inter-root.pem -keypass trustpass -storepass trustpass -alias nativemtls -noprompt
Приложение 2: Альтернативные настройки цепочки сертификатов
Хотя в этой статье рекомендуется определённая схема цепочки сертификатов , обеспечивающая баланс между безопасностью и простотой использования, существуют альтернативные варианты, описанные ниже. Большинство общих принципов применимы и к другим методологиям, например:
- Наличие прямых листовых ключей и сертификатов для каждого узла Cassandra или клиентского приложения (без подписи корневых или промежуточных сертификатов). Это, вероятно, усложнит ротацию сертификатов.
- Наличие нескольких корневых и промежуточных наборов сертификатов для различных вариантов использования . Например, узлы Cassandra имеют один набор корневых/промежуточных сертификатов, с помощью которого подписываются все конечные сертификаты Cassandra. Аналогично, все клиентские приложения могут иметь один отдельный корневой/промежуточный набор для подписи конечных сертификатов приложений. Такие конфигурации жизнеспособны, но требуют добавления цепочки корневых/промежуточных сертификатов в соответствующее хранилище доверенных сертификатов. В этом примере хранилища доверенных сертификатов Cassandra должны содержать корневые/промежуточные сертификаты клиента, а клиентские приложения должны иметь корневую/промежуточную цепочку узлов Cassandra в своих хранилищах доверенных сертификатов.
- Аналогично вышеизложенному, вы можете иметь несколько наборов корневых и промежуточных сертификатов для разных регионов , но все клиенты во всех регионах и все серверы во всех регионах должны быть осведомлены обо всех корневых и промежуточных цепочках, добавив их все в настроенное хранилище доверенных сертификатов.