Аутентификация по SSL-сертификату

При подключении к ADQM по протоколу SSL выполняется обязательная проверка SSL-сертификатов входящих соединений — установлены могут быть только соединения, предоставившие действительный сертификат. Таким образом ADQM однозначно аутентифицирует входящее соединение и может идентифицировать пользователя по соответствующему пользовательскому SSL-сертификату. Для одного пользователя можно задать несколько сертификатов.

Ниже описывается последовательность действий, необходимых для включения аутентификации пользователей по SSL-сертификату. Для выполнения приведенных команд нужно установить openssl — инструмент командной строки для использования функций криптографической библиотеки OpenSSL.

ПРИМЕЧАНИЕ
  • Возможность аутентифицировать пользователя по SSL-сертификату доступна только при подключении к ADQM через клиента, который поддерживает интерфейс HTTPS.

  • Для демонстрационных целей в этой статье пользовательский SSL-сертификат подписывается самоподписанным (self-signed) корневым сертификатом центра сертификации (Certification Authority, CA). В реальных системах используйте доверенный центр сертификации для подписи сертификатов.

Создание SSL-сертификата пользователя

  1. Сгенерируйте ключ и создайте файл с запросом на подпись сертификата (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.

  2. Создайте и подпишите сертификат пользователя, который будет использоваться для аутентификации:

    $ 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 — закрытый ключ центра сертификации. Должен храниться в секрете.

  3. В интерфейсе ADCM перейдите к окну конфигурирования сервиса ADQMDB и в секции Enable SSL с помощью опции Client certificate verification mode установите режим проверки пользовательских SSL-сертификатов (relaxed, strict или once). Нажмите Save и выполните Reconfig and restart для сервиса ADQMDB, чтобы сохранить и применить изменение значения параметра.

    Опция для включения проверки пользовательских SSL-сертификатов
    Опция для включения проверки пользовательских 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.

  1. Сгенерируйте ключ и создайте файл с запросом на подпись сертификата:

    $ openssl req -newkey rsa:2048 -nodes -subj "/CN=arenadata:john"  -keyout arenadata_john.key -out arenadata_john.csr
  2. Создайте и подпишите пользовательский сертификат для аутентификации:

    $ 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 — закрытый ключ центра сертификации.

  3. Убедитесь, что в настройках сервиса ADQMDB через параметр Client certificate verification mode указан режим проверки пользовательских сертификатов.

  4. Создайте пользователя, которого ADQM будет аутентифицировать по созданному сертификату:

    CREATE USER john IDENTIFIED WITH ssl_certificate CN 'arenadata:john';
  5. Назначьте пользователю привилегии (например, привилегии администратора):

    GRANT ALL ON *.* TO john WITH GRANT OPTION;
  6. Проверьте подключение к 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 @-

    Если аутентификация прошла успешно, в результате выполнения запроса вернется список таблиц базы данных.

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