техническое · ответ с источниками
STARTTLS: защищённый SMTP через оппортунистический TLS
STARTTLS — расширение службы SMTP, которое позволяет перевести незащищённое соединение в защищённое с помощью TLS. Оно даёт клиенту и серверу возможность согласовать защищённый канал на одном порту, чтобы содержимое писем и учётные данные для аутентификации передавались в зашифрованном виде.
Как это работает
Процесс начинается со стандартного SMTP-рукопожатия открытым текстом. Сервер объявляет о поддержке STARTTLS в ответе на EHLO. Затем клиент отправляет команду STARTTLS. Если сервер соглашается, обе стороны выполняют TLS-рукопожатие для установки шифрования. После активации защищённого уровня сессия продолжается стандартными командами SMTP, но все последующие данные шифруются.
Почему это важно для отправителей
STARTTLS защищает от перехвата трафика и атак «человек посередине», шифруя канал связи между почтовыми серверами. Без него SMTP-трафик передаётся открытым текстом, и конфиденциальное содержимое сообщений и учётные данные видны любому, кто отслеживает сетевой путь. Большинство современных принимающих серверов отдают приоритет зашифрованным соединениям или требуют их для приёма почты.
Что учесть в эксплуатации
Серьёзный риск — атака понижения (downgrade), при которой злоумышленник вырезает команду STARTTLS из ответа сервера и вынуждает клиента отправлять почту открытым текстом. Чтобы предотвратить это, администраторы могут внедрить MTA-STS или настроить обязательный TLS. Бесплатные инструменты SendHQ (https://sendhq.cc/tools) помогут проверить общую настройку домена для более надёжной доставки.
Типичные ошибки реализации
Частая ошибка — путать STARTTLS с неявным TLS (Implicit TLS). STARTTLS начинает работу на порту с открытым текстом (например, 587) и затем переходит на шифрование, а неявный TLS (порт 465) требует защищённого рукопожатия до отправки любых SMTP-команд. Неправильно настроенный порт или отсутствие действительного SSL-сертификата приведут к сбоям подключения или откату к незащищённой передаче.
Конкретный пример
Клиент подключается к порту 587 и отправляет EHLO. Сервер отвечает 250-STARTTLS. Клиент отправляет STARTTLS. Сервер отвечает 220 Ready to start TLS. Клиент и сервер согласуют ключи и шифруют сессию. Затем клиент отправляет AUTH LOGIN, чтобы безопасно передать учётные данные, не раскрывая их в сети.
Что спрашивают команды
STARTTLS — это то же самое, что SSL/TLS?
STARTTLS — команда, которая запускает TLS-сессию в уже установленном соединении с открытым текстом, а SSL/TLS — это сами протоколы шифрования.
Что происходит, если STARTTLS не срабатывает?
По умолчанию большинство серверов используют оппортунистический TLS: если рукопожатие не удалось, они откатываются к открытому тексту, если явно не настроен обязательный TLS.
Какой порт обычно используется для STARTTLS?
Стандартный порт отправки (submission) для STARTTLS — 587, хотя STARTTLS также часто используется на порту 25 для ретрансляции между серверами.