Перейти к содержимому
Последнее обновление

Конфигурация фреймворка TLS

В этом документе описан контракт конфигурации фреймворка TLS в Apache Doris.

примечание

Этот фреймворк доступен начиная с Apache Doris 4.1.4. Эти унифицированные настройки TLS недоступны в версии 4.0.

Пакет Doris с открытым исходным кодом содержит фреймворк, параметры конфигурации, поддержку со стороны парсера и точки расширения для TLS и аутентификации по сертификатам. Он не включает полную рабочую реализацию TLS для каждого протокола. В стандартной сборке с открытым исходным кодом включение TLS для протокола, для которого отсутствует реализация модуля TLS, завершится ошибкой с указанием, что требуется модуль TLS.

Перечисленные ниже имена параметров, значения по умолчанию и их смысл закреплены фреймворком. Если вы предоставляете собственную реализацию модуля TLS, используйте этот фреймворк и эти параметры конфигурации для обеспечения совместимости. Такие детали, как загрузка сертификатов, создание контекста TLS, поведение при установлении соединения, перезагрузка сертификатов и проверка другой стороны с учётом особенностей протокола, могут быть реализованы модулем TLS.

Справочник параметров конфигурации​

Все приведённые ниже параметры необязательны и используют указанные значения по умолчанию. Задавайте их в файлах конфигурации FE fe.conf, BE be.conf или в конфигурации компонента Cloud Meta Service/Recycler. Эти параметры применяются при запуске, поэтому после их изменения нужно перезапустить соответствующий процесс. Исключение составляет параметр FE tls_cert_based_auth_ignore_password, который можно менять во время работы. Разверните и проверьте модуль, прежде чем включать TLS для обслуживаемых им протоколов.

ПараметрТипКомпонентыПо умолчаниюОписаниеПримечания
enable_tlsBooleanFE, BE, CloudfalseВключает унифицированный фреймворк TLS для процесса.Если значение равно true, протоколы, не исключённые с помощью tls_excluded_protocols, должны использовать реализацию TLS, предоставляемую модулем. Все связанные компоненты Doris должны использовать совместимые настройки TLS.
tls_verify_modeStringFE, BE, Cloudverify_peerУправляет проверкой сертификатов. Поддерживаемые значения: verify_none, verify_peer и verify_fail_if_no_peer_cert.См. Режимы проверки TLS.
tls_certificate_pathStringFE, BE, CloudПустоПуть к сертификату, который компонент использует, выступая в роли сервера или клиента TLS.Контракт фреймворка предусматривает сертификаты в формате PEM. Модуль TLS может поддерживать конечный сертификат или PEM-файл с полной цепочкой сертификатов.
tls_private_key_pathStringFE, BE, CloudПустоПуть к закрытому ключу, используемому вместе с tls_certificate_path.Контракт фреймворка предусматривает закрытый ключ в формате PEM.
tls_private_key_passwordStringFE, BE, CloudПустоПароль для файла закрытого ключа.Это обычная строка пароля, а не значение в кодировке Base64.
tls_ca_certificate_pathStringFE, BE, CloudПустоПуть к сертификату CA или набору сертификатов CA, используемому для проверки сертификата другой стороны.Контракт фреймворка предусматривает сертификаты CA в формате PEM. Модуль TLS также может использовать системные хранилища доверенных сертификатов или хранилища JDK по умолчанию, если значение пустое и сценарий это допускает.
tls_cert_refresh_interval_secondsIntegerFE, BE, Cloud3600Интервал в секундах между проверками необходимости перезагрузки файлов сертификатов.Фреймворк предоставляет параметр интервала. Фактическое поведение при перезагрузке сертификатов реализует модуль TLS.
tls_excluded_protocolsStringFE, BE, CloudПустоСписок разделённых запятыми имён протоколов, которые не должны использовать TLS. Сопоставление выполняется без учёта регистра.Допустимые имена протоколов зависят от компонента и модуля TLS. Фреймворк с открытым исходным кодом резервирует такие селекторы, как thrift, mysql, http, arrowflight, brpc и bdbje; используйте только селекторы, поддерживаемые вашей реализацией.
tls_peer_cert_required_san_dnsStringFE, BE, CloudПустоСписок разрешённых значений DNS Subject Alternative Name в сертификате другой стороны для выбранных частных протоколов.Синтаксис: <protocol>=<dns1>,<dns2>;.... Фреймворк резервирует этот контракт для реализаций модулей, которым требуется контроль допуска по сертификату другой стороны.
tls_cert_based_auth_ignore_passwordBooleanFEfalseПозволяет пропустить проверку пароля после успешной аутентификации по сертификату.Влияет только на процедуры аутентификации пользователей FE. Включение параметра ослабляет защиту паролем и допустимо только в тех развёртываниях, где модуль TLS обеспечивает требуемое поведение аутентификации по сертификатам.

Режимы проверки TLS​

РежимРоль клиентаРоль сервераПрименение
verify_noneНе проверяет сертификат сервера.Не проверяет сертификат клиента.Для развёртываний, которым требуется шифрование TLS без проверки сертификатов.
verify_peerПроверяет сертификат сервера.Не требует сертификата клиента.Для односторонней проверки TLS. Это значение не требует mTLS.
verify_fail_if_no_peer_certПроверяет сертификат сервера.Требует и проверяет сертификат клиента.Для развёртываний mTLS, которым требуется взаимная проверка сертификатов.

Поведение фреймворка в сборке с открытым исходным кодом​

Фреймворк с открытым исходным кодом предоставляет определения параметров конфигурации и точки расширения, а провайдеры по умолчанию сохраняют существующее поведение с передачей данных в открытом виде, когда enable_tls имеет значение false.

Когда enable_tls имеет значение true, запуск протокола или создание канала выполняется через фреймворк TLS. Если соответствующий модуль TLS не предоставлен, реализация по умолчанию с открытым исходным кодом отклоняет запуск TLS для этого протокола и сообщает, что требуется модуль TLS.

Таким образом, приведённая выше таблица представляет собой контракт совместимости, а не полное практическое руководство по включению TLS в стандартном пакете с открытым исходным кодом.

Рекомендации по реализации​

При реализации собственного модуля TLS соблюдайте следующие правила:

  • Используйте имена и семантику параметров конфигурации, приведённые в этом документе. Не вводите другие имена параметров для того же поведения TLS.
  • Обеспечивайте единообразное поведение параметров конфигурации в компонентах FE, BE и Cloud, в которых присутствует один и тот же параметр.
  • Учитывайте tls_excluded_protocols, чтобы пользователи могли выбирать, какие протоколы обрабатывает модуль TLS.
  • Обеспечивайте согласованную реализацию tls_verify_mode для ролей сервера и клиента.
  • Если поддерживается перезагрузка сертификатов, используйте tls_cert_refresh_interval_seconds как интервал проверки необходимости перезагрузки.
  • Если поддерживается контроль допуска по DNS SAN сертификата другой стороны, используйте синтаксис tls_peer_cert_required_san_dns, описанный в таблице.
  • Для аутентификации по сертификатам предоставьте рабочую реализацию аутентификации через точку расширения фреймворка. Без собственной реализации сервис по умолчанию с открытым исходным кодом не выполняет никаких действий (no-op).