Аутентификация по 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 → Enable SSL → Certificate authority file).
-
<ca>.key — закрытый ключ центра сертификации. Должен храниться в секрете.
-
-
В интерфейсе ADCM перейдите к окну конфигурирования сервиса ADQMDB и в секции Enable SSL с помощью опции Client certificate verification mode установите режим проверки пользовательских SSL-сертификатов (
relaxed
,strict
илиonce
). Нажмите Save и выполните Reconfig and restart для сервиса ADQMDB, чтобы сохранить и применить изменение значения параметра.Опция для включения проверки пользовательских SSL-сертификатов
Создание пользователя
Чтобы создать пользователя 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 будет аутентифицировать по созданному сертификату:
CREATE USER john IDENTIFIED WITH ssl_certificate CN 'arenadata:john';
-
Назначьте пользователю привилегии (например, привилегии администратора):
GRANT ALL ON *.* TO john WITH GRANT OPTION;
-
Проверьте подключение к ADQM от имени заданного пользователя. Например, можно выполнить следующий запрос на одном из серверов ADQM (adqm-host-1.arenadata.local):
$ 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 @-
Если аутентификация прошла успешно, в результате выполнения запроса вернется список таблиц базы данных.