Шифрование клиентского трафика с помощью TLS#
Для работы с кластером CedrusData клиент должен подключиться к узлу-координатору. По умолчанию аутентификация клиентов и шифрование трафика между клиентом и координатором отключены. Любой пользователь может подключиться к координатору по протоколу HTTP, используя JDBC драйвер, Trino CLI или Web UI. Это удобно для тестирования и разработки, но редко подходит для промышленных развертываний.
Данная статья описывает процесс настройки шифрования трафика между клиентом и координатором CedrusData с помощью TLS. Шифрование является обязательным условием для включения аутентификации клиентов аутентификации клиентов.
Поддерживаемые стандарты#
CedrusData поддерживает сертификаты TLS 1.2 и TLS 1.3. Сертификаты TLS 1.1, TLS 1.0 и SSL не поддерживаются.
По умолчанию CedrusData выбирает алгоритм шифрования из списка поддерживаемых алгоритмов текущей JVM, исключая те алгоритмы, который не поддерживают forward secrecy (FS).
Вы можете получить список поддерживаемых алгоритмов шифрования текущей JVM с помощью следующей команды:
echo "java.util.Arrays.asList(((javax.net.ssl.SSLServerSocketFactory) \
javax.net.ssl.SSLServerSocketFactory.getDefault()).getSupportedCipherSuites()).stream().forEach(System.out::println)" | jshell -
Вы можете изменить список поддерживаемых алгоритмов шифрования с помощью параметра конфигурации
http-server.https.included-cipher
в файле config.properties. Значением данного параметра
являются имена алгоритмов шифрования, разделенные запятой, в порядке уменьшения приоритета. Например:
http-server.https.included-cipher=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256
По умолчанию CedrusData не разрешает использование алгоритмов шифрования, которые не используют forward secrecy. Если
вы хотите использовать такой алгоритм, необходимо дополнительно установить параметр конфигурации
http-server.https.excluded-cipher
в пустое значение:
http-server.https.included-cipher=TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256
http-server.https.excluded-cipher=
Выбор допустимых алгоритмов шифрования часто определяется политиками безопасности организации. Использование нестандартного алгоритма может потребовать установки дополнительных пакетов. Кроме того, некоторые алгоритмы шифрования могут иметь экспортные ограничения. Проконсультируйтесь со службой информационной безопасности вашей организации перед выбором конкретных алгоритмов шифрования.
Способы организации шифрования#
Существует два способа конфигурации шифрования клиентских подключений к CedrusData.
С использованием сертификатов. Данный способ подходит, если вы можете получить действительные сертификаты от службы безопасности вашей организации, или же если вы хотите использовать самоподписанные сертификаты для тестирования и отладки.
С использованием балансировщика нагрузки или прокси-сервера. В данном случае клиент CedrusData подключается к балансировщику нагрузки или прокси-северу с использованием TLS/HTTPS, после чего последний перенаправляет запрос к CedrusData по протоколу HTTP (TLS termination). Данный способ является предпочтительным и более простым в конфигурации.
Шифрование с помощью сертификатов#
Вы можете использовать сертификаты для шифрования трафика между клиентами и кластером CedrusData. Для этого вам необходимо получить TLS сертификат и установить его на координаторе CedrusData.
Получение сертификата#
Для конфигурации шифрования с помощью сертификатов вам необходимо получить сертификат, который будет использован координатором CedrusData. Вы можете получить сертификат одним из следующих способов.
Доверенный сертификат - сертификат, которому автоматически доверяют все клиентские приложения. Для получения доверенного сертификата необходимо обратиться к производителю доверенных сертификатов. Таким производителем могут быть:
Коммерческие компании (SSL Certificate providers), например DigiCert или Comodo.
Компании, которые предоставляют бесплатные доверенные сертификаты, например letsencrypt.org.
Регистраторы доменных имен, например GoDaddy.
Облачные провайдеры.
Корпоративный сертификат — сертификат, которому доверяют браузеры и клиентские приложения вашей организации. Обычно за выпуск таких сертификатов отвечает IT-отдел организации, который поддерживает собственное хранилище доверенных сертификатов и обеспечивает конфигурацию клиентских приложений таким образом, чтобы они доверяли сертификатам из хранилища.
Сгенерированный self-signed сертификат - сертификат, который самостоятельно сгенерирован с помощью приложений типа
openssl
,keytool
илиcerttool
. Такие сертификаты не являются доверенными по умолчанию для других приложений, что обусловливает необходимость дополнительной конфигурации клиентских приложений (например, JDBC драйвер, Trino CLI, Web UI браузер) для работы с такими сертификатами. Раздел Проверка работоспособности содержит описание дополнительных параметров, которые нужны для подключения к координатору CedrusData, который использует self-signed сертификат, из Web UI, Trino CLI и JDBC драйвера.
Поддерживаемые сертификаты#
CedrusData поддерживает сертификаты и приватные ключи PKCS #1 и PKCS #8 в формате PEM, PKCS #12, а так же ключи в формате Java KeyStore (JKS).
Проверка сертификатов#
Перед установкой сертификата мы рекомендуем провести ручную проверку его содержимого. Проблемы с сертификатами часто приводят к сложным в анализе сообщениям об ошибках. Предварительная проверка содержимого сертификата зачастую может сэкономить существенное количество времени.
Инструкции для проверки сертификатов PEM: Проверка файлов PEM.
Инструкции для проверки сертификатов JKS и PKCS # 12: Проверка файлов JKS (Java keystore).
Установка сертификата#
Сертификат должен быть установлен на координаторе CedrusData. Убедитесь, что файл сертификата доступен для чтения координатором. Мы так же рекомендуем убедиться, что доступ к файлу ограничен минимально возможным количеством пользователей и групп, что бы минимизировать риск похищения или подмены сертификата.
Конфигурация координатора#
Добавьте следующие параметры в файл конфигурации координатора config.properties, чтобы включить поддержку TLS.
http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=etc/clustercoord.pem
Параметр http-server.https.enabled
включает поддержку HTTPS.
Параметр http-server.https.port
задает HTTPS порт координатора; вы можете использовать любой доступный порт.
Параметр http-server.https.keystore.path
задает путь к файлу с сертификатом. Данный путь может быть как абсолютным,
так и относительным. В последнем случае путь будет разрешен относительно корневой директории распакованного архива
CedrusData.
Если для сертификата установлен пароль (обязателен для JKS, опционален для PEM), укажите его в параметре конфигурации
http-server.https.keystore.key
:
http-server.https.keystore.key=<keystore-password>
Если запись сертификата внутри JKS keystore имеет собственный пароль, укажите ее в параметре конфигурации
http-server.https.keymanager.password
:
http-server.https.keymanager.password=<key-password>
Включение HTTPS не отключает доступ по HTTP автоматически. Что бы запретить клиентам подключаться к координатору по HTTP (включая Web UI), установите следующий параметр конфигурации:
http-server.authentication.allow-insecure-over-http=false
Проверка работоспособности#
Подключитесь к координатору с помощью Web UI, используя протокол HTTPS и порт, указанный в конфигурации. Например:
https://trino.example.com:8443
. Если аутентификация отключена, введите произвольное имя пользователя (ввод пароля будет недоступен). Если аутентификация включена, введите корректные имя пользователя и пароль. Если вы используете self-signed сертификат, который не может быть проверен браузером, вы получите сообщение об ошибке при открытии страницы. В большинстве браузеров страница об ошибке будет содержать ссылку или кнопку, которая позволит отобразить страницу после получения от вас подтверждения, что вы понимаете риски.Подключитесь к координатору с помощью Trino CLI, используя протокол HTTPS. Например:
https://trino.example.com:8443
. Если вы используете self-signed сертификат, который не может быть проверен Java-процессом, в котором запущен Trino CLI, добавьте опцию--insecure
. Никогда не используйте данный флаг в промышленном окружении../trino --server https://trino.example.com:8443 ./trino --server https://trino.example.com:8443 --insecure
Запустите тестовый запрос:
trino> SELECT COUNT(*) FROM tpch.tiny.nation; trino ------- 25 (1 row)
Подключитесь к координатору с помощью JDBC драйвера. Для этого укажите в строке подключения HTTPS порт, указанный в конфигурации выше. Кроме того, необходимо добавить параметр
SSL=true
. Если вы используете self-signed сертификат, который не может быть проверен процессом Java, из которого происходит подключение, добавьте параметрSSLVerification=NONE
. Никогда не используйте данный параметр со значениемNONE
в промышленном окружении.jdbc:trino://trino.example.com:8443?SSL=true jdbc:trino://trino.example.com:8443?SSL=true&SSLVerification=NONE
Использование TLS termination proxy#
Ваша организация может иметь развернутый балансировщик нагрузки или proxy-сервер, на который уже
обеспечивает шифрование трафика клиентских подключений. В таком случае вы можете попросить ваших администраторов
настроить балансировщик или proxy-сервер таким образом, что бы он подключался к координатору CedrusData по протоколу
HTTP, добавляя специальный forwarded
заголовок к HTTP-запросам к CedrusData, например X-Forwarded-Proto: https
. Данный заголовок указывает координатору
CedrusData, что клиент подключился к балансировщику или proxy-серверу по протоколу HTTPS, и должный уровень безопасности
уже обеспечен.
В таком случае конфигурация TLS сертификатов на координаторе CedrusData не требуется. Вместо этого необходимо включить
параметр конфигурации http-server.process-forwarded
в файле config.properties, что бы
координатор учитывал forwarded
заголовок от балансировщика или proxy-сервера:
http-server.process-forwarded=true
Других параметров конфигурации не требуется.