Введение
Разные компоненты Edge для частного облака, такие как процессоры сообщений, серверы управления и маршрутизаторы, по умолчанию подключаются к узлам Cassandra по каналу с открытым текстом. На таких каналах данные, передаваемые в Cassandra и из нее, не шифруются. Apigee mTLS – это функция на основе сервисной сетки Consul, которая повышает безопасность обмена данными между компонентами кластера Edge для частного облака. Кроме того, это предложение от Apigee обеспечивает безопасность TLS для канала связи между клиентскими компонентами и Cassandra.
В этой статье рассказывается о новом альтернативном предложении от Apigee, в котором связь между клиентскими компонентами и Cassandra в Edge для частного облака защищена с помощью взаимного протокола TLS (также известного как двусторонний TLS) с использованием функций, изначально доступных в Cassandra, без использования внешней сервисной сетки.
Функция нативного mTLS
Включение mTLS между Cassandra и клиентскими компонентами, описанными в этой статье, основано на функциях TLS, изначально предоставляемых Apache Cassandra. Если этот параметр включен, клиентские подключения к Cassandra (через собственный транспортный порт CQL 9042) выполняют двустороннее рукопожатие TLS с клиентами, прежде чем разрешить установку подключения. Для двустороннего подключения TLS Cassandra выступает в роли сервера, а различные клиенты, подключающиеся к Cassandra (например, edge-message-processor, инструмент cqlsh и т. д.), – в роли клиентов.
Для двусторонней аутентификации TLS (или взаимной аутентификации TLS, mTLS) и Cassandra, и клиенты должны быть настроены с собственным хранилищем ключей. Хранилище ключей каждого узла Cassandra должно содержать собственный ключ и сертификат. Хранилище ключей каждого клиентского приложения должно содержать ключ и сертификат этого клиента. Хранилище доверенных сертификатов, содержащее сертификаты и связанную с ними цепочку сертификатов, должно быть добавлено как в Cassandra, так и в клиенты. Хранилище доверенных сертификатов каждого узла Cassandra должно содержать сертификаты клиентов, а хранилище доверенных сертификатов каждого клиента должно содержать сертификаты всех узлов Cassandra. Подробнее о том, как работает двустороннее рукопожатие TLS, можно узнать из статьи о двустороннем TLS/SSL от Apigee.
Цепочка сертификатов
Как правило, при двустороннем TLS серверные сертификаты, клиентские сертификаты, цепочки сертификатов, хранилища ключей и хранилища доверенных сертификатов можно создавать разными способами. То же самое относится к Cassandra и клиентскому нативному mTLS. Учитывая, как организации обычно управляют кластерами Edge для 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. Повторите эти шаги для каждого клиентского приложения по очереди. Клиентские приложения:
- edge-management-server
- edge-message-processor
- edge-router
Ниже приведены подробные инструкции.
Получение корневых и промежуточных сертификатов
Получите корневой сертификат и пару промежуточных ключей/сертификатов, подписанных корневым сертификатом. Используйте корневой и промежуточный сертификаты, подписанные ЦС вашей организации, или создайте самозаверяющие сертификаты. Храните цепочку корневых и промежуточных сертификатов в хранилище доверенных сертификатов. Полезные команды приведены в Приложении 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:
- edge-management-server
- edge-message-processor
- edge-router
- Выберите один клиентский компонент
- Создайте пару из конечного ключа и сертификата и подпишите ее промежуточным сертификатом. Сохраните ключ и подписанный сертификат в хранилище ключей. Пример:
# 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 по очереди.
После того как в Cassandra будет включена функция mTLS, стандартное средство для запросов 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 в Cassandra (если оно включено).
- Отключите mTLS во всех узлах следующих клиентских приложений по очереди:
- edge-management-server
- edge-message-processor
- edge-router
- Создайте и измените файл конфигурации в зависимости от приложения, которое вы настраиваете:
Приложение Файл конфигурации Сервер управления /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
- Повторите шаги #a–#c на каждом узле Cassandra по очереди.
apigee-service apigee-cassandra configure apigee-service apigee-cassandra restart
Ротация сертификатов
Ротация только конечных сертификатов (промежуточные и корневые сертификаты остаются прежними)Выполните действия, аналогичные описанным в разделе Как настроить клиентские приложения.
- Создайте новый конечный ключ или сертификат для приложения, используя тот же промежуточный ключ или сертификат.
- Настройте путь к новому конечному ключу или сертификату в приложении, а также пароль и тип хранилища ключей.
- Перезапустите приложение
Если вы планируете сменить промежуточный или корневой сертификат, рекомендуем выполнить следующие действия:
- Отключите встроенную в Cassandra функцию mTLS для всего кластера.
- Используйте новые корневые и промежуточные сертификаты, чтобы создать новые конечные или прикладные сертификаты.
- Следуйте инструкциям, чтобы включить встроенную в Cassandra функцию mTLS, используя новый набор ключей и сертификатов.
Общие операции 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.
- Как и в предыдущем случае, вы можете использовать несколько наборов корневых и промежуточных сертификатов для разных регионов, но все клиенты и серверы во всех регионах должны быть осведомлены обо всех корневых и промежуточных цепочках. Для этого добавьте их в настроенное хранилище доверенных сертификатов.