Защита канала по протоколу SSL
В данной статье описаны действия для включения защиты канала по протоколу SSL при аутентификации в ADS.
Предварительные требования для включения SSL
-
На каждом хосте кластера должно размещаться хранилище ключей и сертификатов keystore.jks (уникальное для каждого хоста кластера), должен быть известен путь к нему и его пароль.
-
На каждом хосте кластера должно размещаться хранилище ключей и сертификатов truststore.jks (общее для всех хостов кластера), должен быть известен путь к нему и его пароль.
-
Должен быть известен список DN всех хостов кластера (вида
CN=ads-host-1.example.com, OU=AD, O=AD, L=MSK, ST=MO, C=RU
), сформированных при создании сертификатов SSL. -
Должно быть известно имя пользователя, имеющего запись в каталоге Active Directory, который будет выполнять функции администратора NiFi, и его пароль.
Cоздание сертификата SSL для Certification Authority
Последовательность создания сертификата
-
Сгенерируйте пару ключей по алгоритму RSA для каждого хоста.
-
Создайте на каждом хосте хранилище ключей keystore.jks.
-
Создайте SSL-сертификат для каждого хоста.
-
Соберите все сертификаты в одном месте.
-
Скопируйте все сертификаты на каждый хост в хранилище keystore.jks.
-
Подпишите сертификаты ключом, принадлежащим одному из доверенных корневых сертификатов, включенных в хранилище сертификатов Java.
-
Создайте хранилище trustore.jks, содержащее необходимые сертификаты.
-
Импортируйте trustore.jks в Java CA store.
-
Создайте и импортируйте сертификат OpenSSL для Nginx.
ВНИМАНИЕ
Для корректного включения аутентификации в сервисе NiFi при создании сертификатов необходимо указать и заполнить поле |
Создание сертификата SSL для Certification Authority при помощи скрипта
Для тестовых и справочных целей при создании сертификатов для каждого хоста и импорта сертификатов в хранилище ключей Java можно использовать специальный скрипт generate.sh.
При помощи данного скрпита возможно как создавать новые сертификаты, так и перезаписывать уже созданные.
Запуск скрипта выполняется на хосте, имеющем права доступа к хостам кластера по FQDN и внутреннему IP.
Ниже приведена последовательность создания скрипта generate.sh.
-
Введите команду для создания файла скрипта:
$ sudo vim /tmp/ssl/generate.sh
-
Замените для следующих строк скрипта (только для них!) следующие значения на значения, которые относятся к вашему случаю:
-
NUMHOSTS=
— в этой строке указать значения (буквы или цифры), индивидуальные для каждого хоста. Значения(1 2 3)
приведены как пример для списка хостов:-
sov-ads-test-1.ru-central1.internal;
-
sov-ads-test-2.ru-central1.internal;
-
sov-ads-test-3.ru-central1.internal.
-
-
HOSTS=
— в этой строке указать общую часть FQDN хоста, заменив$i
на значения (буквы или цифры), указанные в параметреNUMHOSTS
. Значениеsov-ads-test-$i.ru-central1.internal
приведено как пример . -
bigdata
— пароль для хранилищ ключей, рекомендуется заменить.
-
-
Заполните generate.sh текстом скрипта, приведенным ниже, с учетом индивидуальных параметров.
generate.sh#!/bin/bash # Script that is used to generate and import self-signed certificates to java keystore # Edit NUMHOSTS and HOSTS as it will be suitable for your case. declare -a NUMHOSTS declare -a HOSTS SSH_OPTS='-o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' NUMHOSTS=(1 2 3) HOSTS=$(for i in "${NUMHOSTS[@]}"; do echo "sov-ads-test-$i.ru-central1.internal"; done) for HOST in $HOSTS; do echo "update-ca-trust" ssh $SSH_OPTS $HOST "sudo update-ca-trust extract" done echo Generate keystore.jks on each host for HOST in $HOSTS; do echo "remove old alias" ssh $SSH_OPTS $HOST "keytool -delete -alias $HOST -keystore /tmp/keystore.jks -storepass bigdata"; echo "Generating keypair" ssh $SSH_OPTS $HOST "keytool -genkey \ -noprompt \ -keyalg RSA \ -ext san=dns:$HOST \ -alias $HOST \ -dname \"CN=$HOST, OU=AD, O=AD, L=MSK, S=MO, C=RU\" \ -keystore /tmp/keystore.jks \ -storepass bigdata \ -keypass bigdata \ -validity 360 \ -keysize 2048"; done echo echo Export certificates for HOST in $HOSTS;do ssh $SSH_OPTS $HOST "keytool -export \ -file /tmp/$HOST.crt \ -keystore /tmp/keystore.jks \ -storepass bigdata \ -alias $HOST \ -rfc"; done echo echo Collect all certificates for HOST in $HOSTS; do scp $SSH_OPTS $HOST:/tmp/$HOST.crt /tmp/ # scp $SSH_OPTS $HOST:/tmp/*.crt /tmp/ done echo echo Transfer certificates on hosts for HOST in $HOSTS; do for CERT in $HOSTS; do scp $SSH_OPTS /tmp/$CERT.crt $HOST:/tmp/ done # scp $SSH_OPTS /tmp/*.crt $HOST:/tmp/ done echo echo Import certificates on each host for HOST in $HOSTS; do ssh $SSH_OPTS $HOST "for CERT in $(echo ${HOSTS[*]}); do echo "remove old alias before import" keytool -delete -noprompt -alias \$CERT -keystore /tmp/truststore.jks -storepass bigdata echo "Import Cert" keytool -import \ -noprompt \ -alias \$CERT \ -file /tmp/\$CERT.crt \ -keystore /tmp/truststore.jks \ -storepass bigdata; sudo bash -c \"cat /tmp/\$CERT.crt >> /etc/pki/tls/certs/ca-bundle.crt\"; done"; done echo echo Import truststore to Java CA store for HOST in $HOSTS; do ssh $SSH_OPTS $HOST "sudo keytool -importkeystore \ -noprompt \ -srckeystore /tmp/truststore.jks \ -destkeystore /etc/pki/java/cacerts \ -deststorepass changeit \ -srcstorepass bigdata" done echo echo Create directories for certs for HOST in $HOSTS; do ssh $SSH_OPTS $HOST "[ -d /etc/ssl ] || sudo mkdir /etc/ssl; [ -d /etc/ssl/certs ] || sudo mkdir /etc/ssl/certs" done echo echo Create and import cert for Nginx for HOST in $HOSTS; do ssh $SSH_OPTS $HOST "sudo openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj \"/C=RU/ST=Denial/L=MSK/O=AD/CN=$HOST\" -keyout /etc/ssl/host_cert.key -out /etc/ssl/certs/host_cert.cert" ssh $SSH_OPTS $HOST "sudo bash -c \"cat /etc/ssl/certs/host_cert.cert >> /etc/pki/tls/certs/ca-bundle.crt\"" done
-
Дайте разрешение на выполнение скрипта:
$ sudo chmod +x /tmp/ssl/generate.sh
-
Запустите скрипт:
$ /tmp/ssl/generate.sh
-
Отследите выполнение скрипта.
-
Проверьте на каждом хосте наличие хранилищ и файлов:
-
/etc/ssl/host_cert.key
-
/tmp/truststore.jks
-
/tmp/keystore.jks
-
ПРИМЕЧАНИЕ
Для сервиса NiFi необходимо выполнить дополнительные конфигурации в соответствии со статьей Аутентификация в сервисе NiFi.
|
Включение SSL на кластере ADS при помощи ADCM
-
Инициируйте включение SSL. Для этого примените действие Enable SSL, нажав на иконку в столбце Actions.
Включение SSL в кластере ADS -
В открывшемся окне введите соответствующие конфигурации и нажмите Run:
-
Keystore path — путь к хранилищу keystore.jks на хостах.
-
Keystore password — пароль для хранилища keystore.jks, по умолчанию используется
bigdata
. -
Truststore path — путь к хранилищу truststore.jks на хостах.
-
Truststore password — пароль для хранилища truststore.jks , по умолчанию используется
bigdata
. -
Force rewrite services SSL configuration — включить, если необходимо переписать конфигурацию для всех сервисов. Используйте, если вы ввели неправильный пароль или путь хранилища доверенных сертификатов при первом включении SSL.
-
(DANGEROUS!) Clean nifi user and authorizers — включить, если необходимо удалить ранее созданных пользователей и предыдущие настройки авторизации.
ВНИМАНИЕ-
Включение SSL для сервиса NiFi доступно начиная с версии 1.7.0.b1 кластера ADS.
-
Опция (DANGEROUS!) Clean nifi user and authorizers доступна начиная с версии 1.7.2.b2 кластера ADS.
-
Опция Force rewrite services SSL configuration доступна начиная с версии 1.8.1.b1 кластера ADS.
Заполнение конфигураций для включения SSL -
-
-
Подтвердите действие в открывшемся окне.
Подтверждение действия -
Дождитесь завершения включения SSL. Проанализируйте и исправьте ошибки в случае их возникновения.
Процесс запуска SSL
ПРИМЕЧАНИЕ
Работа в сервисах после запуска Enable SSL осуществляется в соответствии со статьями: |
Выключение SSL на кластере ADS при помощи ADCM
-
Инициируйте выключение SSL. Для этого примените действие Disable SSL, нажав на иконку в столбце Actions.
Выключение SSL в кластере ADS -
В открывшемся окне включите параметр (DANGEROUS!) Clean nifi user and authorizers, если необходимо удалить ранее созданных пользователей и предыдущие настройки авторизации, и нажмите Run
Запуск выключения SSL в кластере ADS -
Подтвердите действие в открывшемся окне.
Подтверждение действия -
Дождитесь завершения выключения SSL. Проанализируйте и исправьте ошибки в случае их возникновения.
Процесс выключения SSL