Введение
Различные компоненты Edge для частного облака, такие как процессоры сообщений, серверы управления и маршрутизаторы, по умолчанию подключаются к узлам Cassandra по каналу с открытым текстом. В этом случае данные, передаваемые в Cassandra и из нее, не шифруются. Apigee mTLS – это функция на основе сервисной сетки Consul, которая повышает безопасность обмена данными между компонентами в кластере Edge для Private Cloud. Кроме того, это предложение от 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.
Цепочка сертификатов
Как правило, при двустороннем 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
Убедитесь, что файл принадлежит пользователю 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 настроен правильно, найдите в системном журнале клиентского приложения строки, похожие на следующие:
В подключение Cassandra добавлены параметры SSL
- Повторите описанные выше действия для каждого клиентского приложения по очереди.
Операции и конфигурации
Как настроить принудительное использование mTLS
Если mTLS не применяется в Cassandra, 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 во всех узлах следующих клиентских приложений по очереди:
- 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.
- Как и в предыдущем случае, вы можете использовать несколько наборов корневых и промежуточных сертификатов для разных регионов, но все клиенты и серверы во всех регионах должны быть осведомлены обо всех корневых и промежуточных цепочках. Для этого добавьте их в настроенное хранилище доверенных сертификатов.