smtp-server-tls-certificate

GlobalХаб задаёт сам

Сертификат, который узел предъявляет при приёме почты
в конфигурации это строкаsmtp-server-tls-certificateвнутри блока Global
Чем узел представляется тем, кто ему подаёт почту

Строка называет сертификат, который узел предъявляет, когда клиент начинает шифрование на входящем соединении. Всё, что до этого обсуждалось на страницах TLS, было про исходящую сторону; здесь узел выступает сервером.

Два места хранения. Файл в формате PEM — обычный случай; и хранилище секретов, куда ссылаются записью {vault}:путь/ключ. Пароль к закрытому ключу необязателен и задаётся вторым словом — тоже либо строкой, либо ссылкой в хранилище.

Четыре сочетания, и руководство приводит три из них примером: файл плюс открытый пароль, хранилище плюс открытый пароль, хранилище для обоих.

Без этой строки шифрование на приёме не работает вовсе — предъявлять нечего. Разрешение клиенту начать шифрование — отдельная строка, allow-starttls в источнике.

Главная ловушка — пароль открытым текстом в конфигурации. Он стоит второй частью строки и попадает в резервные копии вместе с файлом. Если ключ зашифрован, пароль стоит держать в хранилище секретов; если хранилища нет — понимать, что защита ключа паролем здесь ничего не даёт.
Что делает Хаб. Пишет — в базовой конфигурации узла, и самоподписанный сертификат выпускает сам. Этого достаточно для подачи: платформа подключается к своему узлу, и проверять чужую подлинность ей незачем. Пользователь может заменить его своим, и тогда стоит перенести пароль в хранилище — Хаб этого пока не делает.
Рекомендуемые значения

Форма записи и что где лежит:

Сертификат Пароль Когда
файл не задан ключ не зашифрован — простейший случай
файл строкой пароль ляжет в конфигурацию открытым
файл {vault}:путь/ключ пароль в хранилище, в конфигурации только ссылка
{vault}:путь/ключ {vault}:путь/ключ ни сертификата, ни пароля в файлах узла

За чем следить — за сроком действия. Истёкший сертификат означает, что подача перестаёт шифроваться, а при строгой настройке платформы — что она перестаёт подключаться вовсе.

Форма записи, четыре сочетания и требование PEM — из руководства (§ 3.3.1.10). Совет держать пароль в хранилище и следить за сроком — наш.
Пример в конфигурации
# так пишет базовую конфигурацию Хаб — самоподписанный, без пароля
smtp-server-tls-certificate /etc/pmta/mtahub-smtp.pem
# оба значения из хранилища секретов — пример руководства
smtp-server-tls-certificate {vault}:/v1/kv/data/tlsCerts:smtp-cert {vault}:/v1/kv/data/tlsCerts:smtp-password
Первый вариант достаточен для подачи со своей платформы. Второй нужен, когда сертификат настоящий и его закрытый ключ не должен лежать файлом на узле.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Кладут пароль к ключу в конфигурацию открытым текстом

§ 3.3.1.10

Чем чреватоПароль читают все, кому доступен файл конфигурации, и он попадает в резервные копии. Зашифрованный ключ рядом с открытым паролем защищён ровно настолько, насколько защищён сам файл.
Как заметитьОбнаруживается при разборе доступа, а не в работе.
Как правильноДержать пароль в хранилище секретов и ссылаться на него записью {vault}:путь/ключ. Если хранилища нет — не считать пароль защитой.

Не следят за сроком действия

наш опыт

Чем чреватоИстёкший сертификат означает, что подача перестаёт шифроваться, а платформа со строгой проверкой перестаёт подключаться вовсе. Отказ приходит со стороны платформы, и искать причину начинают не на узле.
Как заметитьПодача останавливается в конкретный день без изменений в конфигурации.
Как правильноПроверять notAfter командой из справки и заводить напоминание. Самоподписанный сертификат Хаба тоже имеет срок.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
smtp-server-tls-certificate { FILENAME | {vault}:PATH/KEY } [PASSWORD | {vault}:PATH/KEY]
Значения
путь к файлу PEM или ссылка на хранилище секретов, при необходимости пароль вторым словом
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива пишется в корне файла, раздел Global, и действует на весь узел. Уровней у неё нет; для отдельного слушателя есть своя строка — tls-certificate в <smtp-listener>, и она перекрывает общий сертификат для соединений на этот адрес и порт.
Как проверить на узле
Что узел предъявляет и не истёк ли срок, проще проверить снаружи:
openssl s_client -starttls smtp -connect localhost:25 -showcerts 2>/dev/null | openssl x509 -noout -subject -enddate
Пустой ответ означает, что шифрование на приёме не поднимается: либо сертификата нет, либо клиенту не разрешено начинать шифрование — allow-starttls в источнике. Дата notAfter — то, за чем следить.
В Хабе
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Безопасность узла · Шифрование соединений