Конфигурация фреймворка 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_tls | Boolean | FE, BE, Cloud | false | Включает унифицированный фреймворк TLS для процесса. | Если значение равно true, протоколы, не исключённые с помощью tls_excluded_protocols, должны использовать реализацию TLS, предоставляемую модулем. Все связанные компоненты Doris должны использовать совместимые настройки TLS. |
tls_verify_mode | String | FE, BE, Cloud | verify_peer | Управляет проверкой сертификатов. Поддерживаемые значения: verify_none, verify_peer и verify_fail_if_no_peer_cert. | См. Режимы проверки TLS. |
tls_certificate_path | String | FE, BE, Cloud | Пусто | Путь к сертификату, который компонент использует, выступая в роли сервера или клиента TLS. | Контракт фреймворка предусматривает сертификаты в формате PEM. Модуль TLS может поддерживать конечный сертификат или PEM-файл с полной цепочкой сертификатов. |
tls_private_key_path | String | FE, BE, Cloud | Пусто | Путь к закрытому ключу, используемому вместе с tls_certificate_path. | Контракт фреймворка предусматривает закрытый ключ в формате PEM. |
tls_private_key_password | String | FE, BE, Cloud | Пусто | Пароль для файла закрытого ключа. | Это обычная строка пароля, а не значение в кодировке Base64. |
tls_ca_certificate_path | String | FE, BE, Cloud | Пусто | Путь к сертификату CA или набору сертификатов CA, используемому для проверки сертификата другой стороны. | Контракт фреймворка предусматривает сертификаты CA в формате PEM. Модуль TLS также может использовать системные хранилища доверенных сертификатов или хранилища JDK по умолчанию, если значение пустое и сценарий это допускает. |
tls_cert_refresh_interval_seconds | Integer | FE, BE, Cloud | 3600 | Интервал в секундах между проверками необходимости перезагрузки файлов сертификатов. | Фреймворк предоставляет параметр интервала. Фактическое поведение при перезагрузке сертификатов реализует модуль TLS. |
tls_excluded_protocols | String | FE, BE, Cloud | Пусто | Список разделённых запятыми имён протоколов, которые не должны использовать TLS. Сопоставление выполняется без учёта регистра. | Допустимые имена протоколов зависят от компонента и модуля TLS. Фреймворк с открытым исходным кодом резервирует такие селекторы, как thrift, mysql, http, arrowflight, brpc и bdbje; используйте только селекторы, поддерживаемые вашей реализацией. |
tls_peer_cert_required_san_dns | String | FE, BE, Cloud | Пусто | Список разрешённых значений DNS Subject Alternative Name в сертификате другой стороны для выбранных частных протоколов. | Синтаксис: <protocol>=<dns1>,<dns2>;.... Фреймворк резервирует этот контракт для реализаций модулей, которым требуется контроль допуска по сертификату другой стороны. |
tls_cert_based_auth_ignore_password | Boolean | FE | false | Позволяет пропустить проверку пароля после успешной аутентификации по сертификату. | Влияет только на процедуры аутентификации пользователей 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).