Аутентификация по SSL-сертификату
При подключении к ADQM по протоколу SSL выполняется обязательная проверка SSL-сертификатов входящих соединений — установлены могут быть только соединения, предоставившие действительный сертификат. Таким образом ADQM однозначно аутентифицирует входящее соединение и может идентифицировать пользователя по соответствующему пользовательскому SSL-сертификату. Для одного пользователя можно задать несколько сертификатов.
Ниже описывается последовательность действий, необходимых для включения аутентификации пользователей по SSL-сертификату. Для выполнения приведенных команд нужно установить openssl
— инструмент командной строки для использования функций криптографической библиотеки OpenSSL.
ПРИМЕЧАНИЕ
|
Создание SSL-сертификата пользователя
-
Сгенерируйте ключ и создайте файл с запросом на подпись сертификата (Certificate Signing Request, CSR):
$ openssl req \ -newkey rsa:2048 \ -nodes \ -subj "/CN=<user_cert_identifier>" \ -keyout <user_cert_name>.key \ -out <user_cert_name>.csr
Идентификатором сертификата CN (Common Name) может быть любое уникальное значение. Это значение будет использоваться при создании пользователя ADQM.
-
Создайте и подпишите сертификат пользователя, который будет использоваться для аутентификации:
$ openssl x509 \ -req \ -in <user_cert_name>.csr \ -out <user_cert_name>.crt \ -CAcreateserial \ -CA <ca>.crt \ -CAkey <ca>.key \ -days 365
где <ca>.crt и <ca>.key — файлы, используемые при конфигурировании ADQM для защищенных соединений по протоколу SSL (см. Шифрование SSL):
-
<ca>.crt — публичный корневой сертификат центра сертификации. Должен быть установлен на каждом сервере кластера ADQM и указан в настройках конфигурации сервиса ADQMDB (в интерфейсе ADCM: ADQM cluster → Services → ADQMDB → Primary configuration → SSL Configuration → Certificate authority file).
-
<ca>.key — закрытый ключ центра сертификации. Должен храниться в секрете.
-
Настройка ADQM для аутентификации по SSL-сертификату
В интерфейсе ADCM перейдите к окну конфигурирования сервиса ADQMDB и в секции SSL Configuration с помощью опции Client certificate verification mode установите режим проверки пользовательских SSL-сертификатов (relaxed
, strict
или once
). Нажмите Save и выполните Reconfig and restart для сервиса ADQMDB, чтобы сохранить и применить изменение значения параметра.

Создание пользователя
Чтобы создать пользователя ADQM, который будет аутентифицироваться по сертификату SSL, в запросе CREATE USER
используйте выражение IDENTIFIED WITH ssl_certificate
и укажите идентификатор сертификата (CN):
CREATE USER <user_name> IDENTIFIED WITH ssl_certificate CN '<user_cert_identifier>';
Если вы задаете пользователя через конфигурационный файл users.xml, в секции certificates
для пользователя укажите элемент common_name
с идентификатором пользовательского сертификата (в списке сертификатов может быть более одного элемента):
<users>
<user_name>
<certificates>
<common_name>user_cert_identifier</common_name>
<!-- More names -->
</certificates>
<!-- Other settings -->
</user_name>
</users>
Пример
В этом примере показано, как создать и использовать SSL-сертификат для аутентификации пользователя при подключении к кластеру ADQM, для которого настроено шифрование соединений по протоколу SSL согласно инструкции в статье Шифрование SSL.
-
Сгенерируйте ключ и создайте файл с запросом на подпись сертификата:
$ openssl req \ -newkey rsa:2048 \ -nodes -subj "/CN=arenadata:john" \ -keyout arenadata_john.key \ -out arenadata_john.csr
-
Создайте и подпишите пользовательский сертификат для аутентификации:
$ openssl x509 \ -req \ -in arenadata_john.csr \ -out arenadata_john.crt \ -CAcreateserial \ -CA arenadata_ca.crt \ -CAkey arenadata_ca.key \ -days 365
В этом запросе arenadata_ca.crt — корневой сертификат центра сертификации, arenadata_ca.key — закрытый ключ центра сертификации.
-
В настройках сервиса ADQMDB через параметр Client certificate verification mode включите режим проверки пользовательских сертификатов.
-
Создайте пользователя (например, на хосте adqm-host-1.arenadata.local), которого ADQM будет аутентифицировать по созданному сертификату:
CREATE USER john IDENTIFIED WITH ssl_certificate CN 'arenadata:john';
-
Назначьте пользователю привилегии (например, привилегии на чтение всех таблиц):
GRANT SELECT ON *.* TO john WITH GRANT OPTION;
-
Проверьте подключение к ADQM по HTTPS от имени этого пользователя. Например, можно выполнить следующий запрос из директории, где хранятся сертификаты:
$ echo 'SHOW TABLES' | \ curl 'https://adqm-host-1.arenadata.local:8443' \ --cert ./arenadata_john.crt \ --key arenadata_john.key \ --cacert arenadata_ca.crt \ -H "X-ClickHouse-SSL-Certificate-Auth: on" \ -H "X-ClickHouse-User: john" \ --data-binary @-
Если аутентификация прошла успешно, в результате выполнения запроса вернется список таблиц базы данных.