При подключении к SMTP-серверам следует сначала попробовать SSL или TCP/STARTTLS?

SMTP разрешает незашифрованную связь через порт 25. Для некоторых серверов (таких как MX-серверы Google) я могу переключиться на TLS-соединение с помощью STARTTLS после первоначального незашифрованного соединения.

S:220 mx.google.com ESMTP l1si352658een.133
C:EHLO mail.example.com
S:250-mx.google.com at your service
S:250-SIZE 35882577
S:250-8BITMIME
S:250-STARTTLS
S:250-ENHANCEDSTATUSCODES
S:250 PIPELINING
C:STARTTLS
S:220 2.0.0 Ready to start TLS
[socket switches to TLS here]
C:EHLO mail.example.com
...

Однако я также хотел бы поддерживать прямые соединения SSL, и мне интересно, предпочитают ли большинство почтовых серверов начинать с SSL или начинать с TCP, а затем переходить на TLS после установления соединения.


person Xeoncross    schedule 16.11.2012    source источник


Ответы (2)


Если у вас нет предварительной договоренности с администратором сервера, не пытайтесь подключиться с помощью SSL. Порт (465) использовался для SSMTP или SMTPS (SMTP через SSL). Ожидалось, что подключения к этому порту начнут соединение с SSL. От использования этого порта и протокола отказались теперь, когда доступен StartTLS.

Есть два порта, которые могут поддерживать SMTP с StartTLS. Ожидается, что ни один из них не будет поддерживать SSL без StartTLS и, скорее всего, прервет соединение, если вы попытаетесь. И SMTP (25), и отправка (587) могут поддерживать StartTLS. Если он поддерживается, он будет указан в ответе на сообщение EHLO. Затем вы можете инициировать процесс StartTLS. Дополнительные сведения см. в RFC 3207.

Из ваших комментариев следует, что вас действительно беспокоит, как проверить сертификат. Это другой, но связанный вопрос. Также предполагается, что почтовые серверы не используют самозаверяющие сертификаты. В моем случае я использую самозаверяющий сертификат. Это хорошо работает для меня, так как StartTLS редко, если вообще когда-либо, используется для соединений SMTP (порт 25). У меня есть разумный контроль над клиентами, подключающимися для отправки сообщений (порт 587 или порт 25), которые должны аутентифицироваться перед отправкой сообщений. По моему опыту, StartTLS в основном используется для защиты соединения для клиентов, которые должны пройти аутентификацию перед отправкой электронной почты.

person BillThor    schedule 16.11.2012

Поддержка SSL/TLS при подключении (SMTPS) или SSL/TLS после STARTTLS действительно варьируется от одного сервера к другому, в зависимости от программного обеспечения и того, как они были настроены.

Основное преимущество SSL/TLS при подключении заключается в том, что он не требует никаких изменений в протоколе приложения. На самом деле вы можете обернуть соединение, используя что-то вроде stunnel с каждой стороны.

Основное преимущество SSL/TLS после STARTTLS заключается в том, что это можно сделать на том же порту. Еще одним преимуществом может быть возможность размещения нескольких имен хостов (заменяя необходимость указания имени сервера на уровне TLS), но я не уверен, что это когда-либо использовалось для SMTP-серверов.

STMPS (SSL/TLS при подключении) не имеет официальной спецификации и использует номер порта, для которого он не зарегистрирован (465). Это также устарело, в теории. Тем не менее, некоторые серверы могут его поддерживать (например, Exim) и смогут поддерживать оба, если они в состоянии это сделать: служба хостинга будет решать, что настраивать.

Если вы пишете клиент и уже имеете поддержку STARTTLS, поддержка SSL/TLS при подключении также должна быть довольно дешевой. Это, безусловно, хорошая идея, чтобы поддерживать оба, так как они будут использоваться более широким кругом пользователей (если я правильно помню, в какой-то момент Gmail поддерживал только SMTPS, и это также может быть полезно в случае брандмауэра, который будет блокировать только один из портов).

Оба могут предлагать одинаковые уровни безопасности, если так или иначе используется SSL/TLS (и выполняется надлежащая проверка сертификата, включая имя хоста).

Обычно существует некоторая путаница в отношении разницы между SSL и TLS. По какой-то причине кажется, что ряд реализаций программного обеспечения электронной почты не осознали, что самым важным словом в «STARTTLS» является «START», а не TLS (с точки зрения режима подключения и выбора протокола). Эта путаница, к сожалению, распространилась на некоторые параметры конфигурации программного обеспечения (даже в популярных почтовых клиентах) и, таким образом, в документации провайдера. Ожидайте, что ваши пользователи будут сбиты с толку.

Какой бы режим вы ни хотели поддерживать, убедитесь, что он не имеет "Использовать TLS, если доступно", который будет возвращаться к обычному обмену, если SSL/TLS недоступен: это открывает соединения для атак MITM.

person Bruno    schedule 16.11.2012
comment
Хорошее резюме, в настоящее время я пытаюсь использовать PHP для проверить сертификат, но, в отличие от SSL, я не знаю, как проверить сертификат после переключения на TLS в STARTTLS. Кажется, я не могу заставить SSL работать с MX-серверами Google или Hotmail (порт 25, 465 или 587), но Google поддерживает STARTTLS, поэтому я думаю, что они изменились с SMTPS. - person Xeoncross; 16.11.2012
comment
[...] но в отличие от SSL [...]: здесь вы проводите такое же неправильное различие между SSL и TLS. Процесс проверки сертификата будет одинаковым для SSL или TLS, но он действительно может отличаться, используете ли вы STARTTLS или SSL/TLS при подключении. Что касается PHP, его поведение при проверке сертификата по умолчанию, как правило, довольно плохое (не забудьте проверить сертификат И имя хоста, кстати). Возможно, привязки curl могут поддерживать SMTP(S). - person Bruno; 16.11.2012
comment
Процесс проверки сертификата будет одинаковым для SSL или TLS, но он действительно может различаться в зависимости от того, используете ли вы STARTTLS или SSL/TLS при подключении. Это то, что я сказал. Проверить сертификат при подключении SSL в PHP довольно просто, но, в отличие от SSL, я не уверен, как проверить сертификат после переключения [с tcp] на TLS в STARTTLS. - person Xeoncross; 16.11.2012
comment
Я хочу сказать о том, что вы называете SSL и TLS. Вы противопоставляете SSL TLS (в отличие от SSL), подразумевая, что SSL предназначен только для SMTPS, а TLS — только для SMTP+STARTTLS. В настоящее время вы, вероятно, сможете использовать TLS для обоих. - person Bruno; 16.11.2012
comment
Ну, я не то чтобы против, просто у меня проблемы с терминологией, пытающейся связать прямые соединения SSL/TLS с незашифрованными соединениями, которые переключаются на TLS на полпути. Я не уверен, как проверить сертификат при выполнении этого переключения. - person Xeoncross; 16.11.2012