Шифрование 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.

  1. Сгенерируйте корневой закрытый ключ:

    $ openssl genrsa -out arenadata_ca.key 2048

    Этот ключ будет использоваться для создания корневого сертификата центра сертификации, а также для подписи других сертификатов (серверных сертификатов и сертификатов для аутентификации пользователей), поэтому храните его в безопасном месте.

  2. Создайте самоподписанный корневой сертификат CA:

    $ openssl req -x509 -subj "/CN=arenadata.local CA" -nodes -key arenadata_ca.key -days 1095 -out arenadata_ca.crt
  3. Для каждого сервера кластера сгенерируйте ключ и создайте запрос на подпись сертификата (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), для которого создается сертификат. Иначе сертификат нельзя будет проверить.

  4. Для каждого сервера кластера создайте и подпишите сертификат, используя корневой ключ и корневой сертификат 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
  5. На каждый сервер кластера 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-сертификатов соединений
Конфигурационные параметры для проверки SSL-сертификатов соединений

После определения всех параметров конфигурации 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-сертификату.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней