Шифрование SSL
Канал обмена данными между сервером ADQM и клиентом может быть защищен по протоколу шифрования SSL. Эта статья описывает как настроить ADQM, чтобы обеспечить проверку SSL-сертификатов для входящих соединений. Для примера используется кластер ADQM, включающий следующие хосты:
-
10.92.17.146, adqm-host-1.arenadata.local;
-
10.92.17.106, adqm-host-2.arenadata.local;
-
10.92.17.140, adqm-host-3.arenadata.local;
-
10.92.16.245, adqm-host-4.arenadata.local.
ПРИМЕЧАНИЕ
Для демонстрационных целей в этой статье серверные SSL-сертификаты подписываются самоподписанным (self-signed) корневым сертификатом центра сертификации (Certification Authority, CA). В реальных системах используйте доверенный центр сертификации для подписи сертификатов. |
Создание SSL-сертификатов
Для выполнения приведенных команд необходимо установить openssl — инструмент командной строки для использования функций криптографической библиотеки OpenSSL.
-
Сгенерируйте корневой закрытый ключ:
$ openssl genrsa -out arenadata_ca.key 2048
Этот ключ будет использоваться для создания корневого сертификата центра сертификации, а также для подписи других сертификатов (серверных сертификатов и сертификатов для аутентификации пользователей), поэтому храните его в безопасном месте.
-
Создайте самоподписанный корневой сертификат CA:
$ openssl req -x509 -subj "/CN=arenadata.local CA" -nodes -key arenadata_ca.key -days 1095 -out arenadata_ca.crt
-
Для каждого сервера кластера сгенерируйте ключ и создайте запрос на подпись сертификата (Certificate Signing Request, CSR):
$ openssl req -newkey rsa:2048 -nodes -subj "/CN=adqm-host-1.arenadata.local" -addext "subjectAltName = DNS:adqm-host-1.arenadata.local,IP:10.92.17.146" -keyout adqm-host-1.key -out adqm-host-1.csr $ openssl req -newkey rsa:2048 -nodes -subj "/CN=adqm-host-2.arenadata.local" -addext "subjectAltName = DNS:adqm-host-2.arenadata.local,IP:10.92.17.106" -keyout adqm-host-2.key -out adqm-host-2.csr $ openssl req -newkey rsa:2048 -nodes -subj "/CN=adqm-host-3.arenadata.local" -addext "subjectAltName = DNS:adqm-host-3.arenadata.local,IP:10.92.17.140" -keyout adqm-host-3.key -out adqm-host-3.csr $ openssl req -newkey rsa:2048 -nodes -subj "/CN=adqm-host-4.arenadata.local" -addext "subjectAltName = DNS:adqm-host-4.arenadata.local,IP:10.92.16.245" -keyout adqm-host-4.key -out adqm-host-4.csr
В качестве идентификатора сертификата CN (Common Name) нужно указать полное доменное имя сервера (Fully Qualified Domain Name, FQDN), для которого создается сертификат. Иначе сертификат нельзя будет проверить.
-
Для каждого сервера кластера создайте и подпишите сертификат, используя корневой ключ и корневой сертификат CA:
$ openssl x509 -req -in adqm-host-1.csr -out adqm-host-1.crt -CAcreateserial -CA arenadata_ca.crt -CAkey arenadata_ca.key -days 365 $ openssl x509 -req -in adqm-host-2.csr -out adqm-host-2.crt -CAcreateserial -CA arenadata_ca.crt -CAkey arenadata_ca.key -days 365 $ openssl x509 -req -in adqm-host-3.csr -out adqm-host-3.crt -CAcreateserial -CA arenadata_ca.crt -CAkey arenadata_ca.key -days 365 $ openssl x509 -req -in adqm-host-4.csr -out adqm-host-4.crt -CAcreateserial -CA arenadata_ca.crt -CAkey arenadata_ca.key -days 365
-
На каждый сервер кластера ADQM скопируйте корневой сертификат, а также ключ и сертификат соответствующего сервера. Эти файлы должны храниться по одинаковому пути (рекомендуется /etc/clickhouse-server) и называться одинаково на каждом хосте кластера — пути и названия файлов корневого сертификата, ключа и сертификата сервера указываются в настройках кластера (см. секцию Настройка ADQM для включения SSL).
Например, на сервер adqm-host-1.arenadata.local скопируйте:-
arenadata_ca.crt в /etc/clickhouse-server/ca.crt;
-
adqm-host-1.key в /etc/clickhouse-server/server.key;
-
adqm-host-1.crt в /etc/clickhouse-server/server.crt.
-
Настройка ADQM для включения SSL
В интерфейсе ADCM перейдите к окну конфигурирования сервиса ADQMDB (ADQM cluster → Services → ADQMDB → Primary Configuration) и активируйте опцию Enable SSL. В развернувшейся секции настройте следующие параметры для передачи данных по протоколу SSL:
-
Enable https — включает порт для соединения по протоколу HTTPS (по умолчанию включен).
-
HTTPS port — порт для соединения по HTTPS (по умолчанию
8443
). -
Enable tcp secure — включает порт для SSL-защищенного соединения (по умолчанию включен).
-
TCP secure port — порт для SSL-защищенного соединения по протоколу TCP (по умолчанию
9440
). -
Disable protocols — протоколы, которые не разрешено использовать (например,
sslv2
,sslv3
). -
Certificate file — путь к файлу серверного SSL-сертификата в формате PEM.
-
Private key file — путь к файлу закрытого ключа серверного SSL-сертификата.
-
Certificate authority file — путь к файлу корневого сертификата центра сертификации. Если серверные сертификаты самоподписанные, оставьте это поле пустым.
-
Client certificate verification mode — режим проверки пользовательских SSL-сертификатов, подписанных корневым сертификатом (должен быть указан в Certificate authority file).
После определения всех параметров конфигурации SSL-соединений, нажмите Save и выполните Reconfig and restart для сервиса ADQMDB, чтобы применить изменения.
Проверка соединения
Чтобы убедиться, что соединение с ADQM защищено шифрованием SSL, можно подключиться к одному из серверов ADQM через clickhouse-client с флагом --secure
, указав TCP-порт для безопасного соединения по SSL (9440
). Например:
$ clickhouse-client --host adqm-host-1.arenadata.local --secure --port 9440 --user default
Вывод на экран после выполнения этой команды подтверждает подключение через защищенный порт 9440
:
ClickHouse client version 22.8.4.7. Connecting to adqm-host-1.arenadata.local:9440 as user default. Connected to ClickHouse server version 22.8.4 revision 54460.
Обратите внимание, опция Client certificate verification mode должна быть выключена (значение none
), так как в этом примере для подключения к ADQM не используется аутентификация пользователя по SSL-сертификату.