http-tls-min-version

Globalнужен перезапуск

Нижняя граница версии TLS у веб-монитора
в конфигурации это строкаhttp-tls-min-version tlsv1.2внутри блока Global
Пол версии на управляющем интерфейсе

Веб-монитор — отдельная программа (pmtahttpd) на порту из http-mgmt-port. Эта строка задаёт, ниже какой версии протокола он не опустится. Умолчание — tlsv1.2.

Порт один, а разговоров два. Монитор смотрит на первые байты соединения и понимает как обычный запрос, так и рукопожатие TLS. Мы проверили это на узле парка: тот же порт ответил и на простой запрос, и на рукопожатие TLS 1.3. Значит, шифрование на мониторе доступно всегда — вопрос лишь в том, пользуется ли им клиент.

Здесь нет доводов о совместимости, которые есть у почты. На отправке приёмников тысячи и среди них попадаются древние; у монитора на другом конце браузер и наши собственные клиенты. Поднять пол здесь дешевле, чем где бы то ни было ещё.

Настройку читает не тот процесс, что почту. pmta reload перечитывает конфигурацию отправки и монитора не касается — новая граница вступит в силу только после перезапуска pmtahttpd.

Главная ловушка — считать, что перезагрузка конфигурации применила настройку. Она не применила: монитор читает свои строки при собственном старте. Проверка сразу после pmta reload покажет старое поведение, и его примут за неработающую директиву.
Что делает Хаб. Не пишет — и пользуется умолчанием лишь на бумаге. В базовой конфигурации стоит http-redirect-to-https false, а опрос идёт по обычному http://: ключ управления уходит на узел заголовком без шифра. Поднимать здесь пол бессмысленно, пока сам Хаб к монитору не шифруется.

Перезапуск монитора после применения конфигурации Хаб уже делает — PmtaConfigApplier::restartMonitor, — так что этой директиве, в отличие от многих, ничего в порядке применения не мешает.

Рекомендуемые значения

Умолчание уже разумно, и снижать его почти всегда неправильно:

Значение Когда
tlsv1.2 (умолчание) всегда
tlsv1.3 все клиенты монитора свои и современные
tlsv1.1 и ниже только под старый клиент, который нельзя обновить

Разница с почтой в цене. Там снижение границы спасает доставку письма; здесь оно открывает управляющий интерфейс.

Значения и умолчание tlsv1.2 — из руководства (§ 3.3.1.58.13). Что порт отвечает и на обычный запрос, и на рукопожатие — наша проверка на узле парка. Что настройку читает pmtahttpd при старте — тоже наше наблюдение.
Пример в конфигурации
# управляющий интерфейс узла
http-mgmt-port 1000
http-tls-min-version tlsv1.2http-redirect-to-https true
Первая строка без третьей мало что даёт: пока принимаются и обычные соединения, клиент выберет их сам. Границу версии и запрет обычных соединений ставят вместе.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается3 ошибки▶

Проверяют сразу после перезагрузки конфигурации

наш опыт

Чем чреватоМонитор читает свои настройки при собственном старте. pmta reload его не трогает, и проверка показывает прежнее поведение.
Как заметитьВ файле новая граница, а рукопожатие идёт по старой.
Как правильноПерезапустить веб-монитор — systemctl restart pmtahttp там, где он юнит, или через pmtawatch там, где нет.

Отказ своего клиента принимают за отказ узла

наш опыт

Чем чреватоOpenSSL 3 на уровне безопасности 1 не предлагает старые версии вовсе. Ответ no protocols available приходит до всякой сети, и узел выглядит настроенным строже, чем он есть.
Как заметитьПроверка «запрещённой» версии не доходит до узла ни при какой его настройке.
Как правильноРазрешить старую версию своему клиенту — -cipher ‘DEFAULT:@SECLEVEL=0’ — и смотреть, что ответит узел.

Поднимают пол, оставив обычные соединения открытыми

§ 3.3.1.58.13

Чем чреватоГраница касается только тех соединений, которые вообще дошли до шифрования. Клиент, которому проще не шифровать, границу не заметит.
Как заметитьПол поднят, а ключ управления по-прежнему виден в сети.
Как правильноСтавить http-redirect-to-https true и убедиться, что клиенты монитора умеют https.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
http-tls-min-version <enumeration>
Значения
tlsv1 | tlsv1.1 | tlsv1.2 | tlsv1.3
Умолчание
tlsv1.2 § 3.3.1.58.13
Применение
нужен перезапуск сервиса
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Наследования у директивы нет: она пишется в корне файла, раздел Global, и действует на весь управляющий интерфейс узла. Отдельных настроек «по слушателю» у монитора не бывает — он один.
⇄

Связанные директивы

4 связи

Как проверить на узле
Проверять надо со стороны клиента, и здесь есть подвох: отказать может не узел, а наш собственный OpenSSL. Сначала берём версию, которая должна проходить:
openssl s_client -connect NODE:1000 -tls1_2 -brief </dev/null
Строка Protocol version: TLSv1.2 означает, что пол не выше. Теперь версия, которая проходить не должна: -tls1_1 без затей ответит no protocols available — это отказ нашего клиента, а не узла. Чтобы спросить именно узел, надо разрешить старую версию себе: -tls1_1 -cipher ‘DEFAULT:@SECLEVEL=0’. Тогда в ответ придёт tlsv1 alert protocol version — отказ пришёл с той стороны.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла