tls smtp (starttls)

Модератор: Модераторы разделов

Аватара пользователя
RaZiel
Сообщения: 85

tls smtp

Сообщение RaZiel »

Здравствуйте, во время написания smtp-клиента столкнулся с проблемой поддержки TLS. Дело в том, что после передачи серверу коммнды starttls и ответа 220 он должен нормально принимать комманды, а именно ehlo. Но этого не происходит, после starttls сервер просто висит и рвёт соединение при попытке что-либо выполнить.

starttls
220 2.0.0 Ready to start TLS
ehlo

Далее ничего не происходит.
Slackware 11 / kernel-2.6.15-ck4
FreeBSD 6.2
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: tls smtp

Сообщение halturin »

А что RFC на сей предмет говорит?
Спасибо сказали:
Аватара пользователя
RaZiel
Сообщения: 85

Re: tls smtp

Сообщение RaZiel »

RFC умалчивает об этом.
Но если посмотреть содержимое, допустим, модуля с CPAN, то становится понятно, что сервак должен всё это воспринять очень хорошо.
Slackware 11 / kernel-2.6.15-ck4
FreeBSD 6.2
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5457
ОС: Gentoo

Re: tls smtp

Сообщение /dev/random »

After receiving a 220 response to a STARTTLS command, the client
SHOULD start the TLS negotiation before giving any other SMTP
commands.

Это не то?
Спасибо сказали:
Аватара пользователя
RaZiel
Сообщения: 85

Re: tls smtp

Сообщение RaZiel »

/dev/random писал(а):
16.12.2007 13:50
After receiving a 220 response to a STARTTLS command, the client
SHOULD start the TLS negotiation before giving any other SMTP
commands.

Это не то?

Об этом я читал, но как?
Проблема в том, что после ответа 220 они должны, на сколько я понимаю, пообщаться и сервер должен продолжить принимать комманды.
Если не надо ничего отсылать, то что не так? А если надо, то что?
Slackware 11 / kernel-2.6.15-ck4
FreeBSD 6.2
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5457
ОС: Gentoo

Re: tls smtp

Сообщение /dev/random »

Я, конечно, не могу гарантировать, т.к. никогда шифрованием SMTP-протокола не занимался (хотя клиент без шифрования писал), но что-то мне подсказывает, что здесь имелось в виду, что последующие команды нужно слать не plain-text'ом, а через SSL.
Спасибо сказали:
Аватара пользователя
RaZiel
Сообщения: 85

Re: tls smtp

Сообщение RaZiel »

/dev/random писал(а):
17.12.2007 08:27
Я, конечно, не могу гарантировать, т.к. никогда шифрованием SMTP-протокола не занимался (хотя клиент без шифрования писал), но что-то мне подсказывает, что здесь имелось в виду, что последующие команды нужно слать не plain-text'ом, а через SSL.

т.е? 465 порт? Тоже ничего хорошего не получается.
Slackware 11 / kernel-2.6.15-ck4
FreeBSD 6.2
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5457
ОС: Gentoo

Re: tls smtp

Сообщение /dev/random »

Нет, я имел в виду не это...
Объясняю на примере, на bash. Проделывать это не обязательно, это просто чтобы было понятнее.

Предполагается, что установлен gnutls (есть во многих дистрибутивах)
Открыть 3 терминала, перейти в одну и ту же папку.
(можно было свести все это в один скрипт, но мне в лом :) Для демонстрации и в трех отдельных терминалах сойдет)
Командой mkfifo создать in.fifo и out.fifo.

В 1-м терминале:

Код: Выделить всё

{
read
echo ehlo yandex.ru
a=; until [ "$a" == "250" ]; do read a b; done
echo starttls
read
nc -l -p 1234
} > in.fifo < out.fifo

Во 2-м:

Код: Выделить всё

nc smtp.yandex.ru 25 < in.fifo > out.fifo

В 3-м:

Код: Выделить всё

gnutls-cli -p 1234 127.0.0.1

В 3-м терминале получаем информацию о tls, и начинаем вводить туда команды, к-е будут передаваться уже через зашифрованное соединение, например:

Код: Выделить всё

invalidcommand
550 5.5.2 Unknown command 'invalidcommand'
quit
221 2.0.0 smtp5.yandex.ru Out
- Peer has closed the GNUTLS connection


PS: все работает, я проверил.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5457
ОС: Gentoo

Re: tls smtp

Сообщение /dev/random »

Мда. Можно было и без этих дурацких примеров обойтись :)
Я, кажется, понял, в чем была ошибка, описанная в первом посте.
Похоже, ув. RaZiel просто не понял, для чего служит команда starttls :)
Она означает, что ВЕСЬ дальнейший траффик через ЭТО ЖЕ соединение
должен передаваться в зашифрованном виде. И 465 порт тут совершенно
не при чем.
Все команды до starttls включительно передаются plain-text'ом, а затем
в ТОМ ЖЕ соединении (465 порт открывать не надо (: ) запускается
SSL-сессия, и все дальнейшие команды нужно передавать уже
зашифрованными. Трафик, передаваемый немедленно после starttls
воспринимается как ssl-приветствие. А команда ehlo таковым не является,
и сервер совершенно оправданно рвет соединение.
Кстати, надо бы уметь читать документацию - в RFC2487 все это подробно
разжевано.
Спасибо сказали:
Аватара пользователя
RaZiel
Сообщения: 85

Re: tls smtp

Сообщение RaZiel »

/dev/random писал(а):
18.12.2007 11:12
Мда. Можно было и без этих дурацких примеров обойтись :)
Я, кажется, понял, в чем была ошибка, описанная в первом посте.
Похоже, ув. RaZiel просто не понял, для чего служит команда starttls :)
Она означает, что ВЕСЬ дальнейший траффик через ЭТО ЖЕ соединение
должен передаваться в зашифрованном виде. И 465 порт тут совершенно
не при чем.
Все команды до starttls включительно передаются plain-text'ом, а затем
в ТОМ ЖЕ соединении (465 порт открывать не надо (: ) запускается
SSL-сессия, и все дальнейшие команды нужно передавать уже
зашифрованными. Трафик, передаваемый немедленно после starttls
воспринимается как ssl-приветствие. А команда ehlo таковым не является,
и сервер совершенно оправданно рвет соединение.
Кстати, надо бы уметь читать документацию - в RFC2487 все это подробно
разжевано.

Спасибо. Дальше буду сам разбираться. Есть ещё несколько вопросов.
Slackware 11 / kernel-2.6.15-ck4
FreeBSD 6.2
Спасибо сказали: