Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F407: LwIP + SSL -> SMTP
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
k000858
Всем привет. Есть девайс на stm32f407 с езернетом на lwip стеке. Требуется сделать e-mail клиент. Как известно, сейчас практически все SMTP серверы перешли на SSL (наверное, правильнее будет сказать "запретили соединения без SSL по 25 порту).
Вопрос: потянет ли вышеозвученный МК софтовое шифрование (ведь крипто-проц есть только у 417 линейки).

Может есть у когонибдь опыт реализации: какую посоветуете реализацию SSL (знаю, что есть как коммерческие так и бесплатные), и где можно надыбать исходники/примеры.
scifi
Цитата(k000858 @ Dec 4 2014, 15:26) *
Вопрос: потянет ли вышеозвученный МК софтовое шифрование (ведь крипто-проц есть только у 417 линейки).

Вопрос некорректный. Потянет любой проц, лишь бы было достаточно памяти и времени на вычисления.
Aner
Для этих решений на 4хх SMTP, жрущий озу, в этм плане 427 неплох. Софтовое шифрование потянет без проблем. А SSL по разному решают и 25 порт мало кто пользует, разве что из-за архаичности. eSMTP насклько вам нужно то реально? Также как IPv6. У вас наверняка встроеное решение а не паблик.
k000858
нашел в примерах от ST готовую PolarSSL. но она для подключения использует socket, а его можно использовать только при наличии OS.
может можно ее как то завести без использования OS?
Aner
Используйте RTOS например, все остальное без OS кривота для серии 4xx.
k000858
Цитата(Aner @ Dec 5 2014, 13:43) *
Используйте RTOS например, все остальное без OS кривота для серии 4xx.

а если весь функционал в прошивке реализован без RTOS, дак что теперь все перелопачивать ради SSL?
покурил внутринности PolarSSL и решил переписать сетевую прослойку на Raw API вместо Netcon API + Socket

Если у когонибудь есть подобный опыт, не откажусь от помощи.
так же полезен будет любой пример переделки приложения вида
Код
struct sockaddr_in server_addr;


    if( ( *fd = socket( AF_INET, SOCK_STREAM, IPPROTO_IP ) ) < 0 )
        return( POLARSSL_ERR_NET_SOCKET_FAILED );

    server_addr.sin_family = AF_INET;
    server_addr.sin_port   = net_htons( port );

    if( connect( *fd, (struct sockaddr *) &server_addr,
                 sizeof( server_addr ) ) < 0 )
    {
        close( *fd );
        return( POLARSSL_ERR_NET_CONNECT_FAILED );
    }


на код вида

Код
  struct tcp_pcb* pcb;
  ip_addr_t addr;

  pcb = tcp_new();

  tcp_arg(pcb, s);
  tcp_recv(pcb, *tcp_recv);
  tcp_err(pcb, *tcp_err);
  tcp_poll(pcb, *tcp_poll, POLL_INTERVAL);
  tcp_sent(pcb, *tcp_sent);
Ruslan1
Здравствуйте.

Подниму тему. Вопрос похожий, но надеюсь проще в решении:

Есть LwIP, FreeRTOS, STM32F4.
написан и работает smtp клиент по порту 25 (исходник чужой вот отсюда и даже не мной интегрированная в проект, я с smtp врукопашную раньше дела не имел).

сейчас стейт-машина в указанном исходнике так работает (полностью можно по ссылке исходник на гитхабе глануть):
Код
enum smtp_session_state {
  SMTP_NULL,
  SMTP_HELO,
  SMTP_AUTH_PLAIN,
  SMTP_AUTH_LOGIN_UNAME,
  SMTP_AUTH_LOGIN_PASS,
  SMTP_AUTH_LOGIN,
  SMTP_MAIL,
  SMTP_RCPT,
  SMTP_DATA,
  SMTP_BODY,
  SMTP_QUIT,
  SMTP_CLOSED
};


нужно добавить возможность работы по портам 587 и/или 465.
Как это сделать с наименьшим напряжением рук и головы? на этапе "SMTP_AUTH_" что подсунуть в процесс?

Cобственно, как я понимаю, нужен SSL. и вижу PolarSSL в составе LwIP, это оно?
Какие несколько команд вставить на этапе smtp авторизации чтобы это заработало?

Может быть решение простое и где-то рядом, но не доходит до меня...

Спасибо всем кто откликнется.
Ruslan1
подергал через телнет нужный smtp сервер, говорит следующее на EHLO

порт 587:
Цитата
220 <address> ESMTP Postfix (Ubuntu)
EHLO <address>
250-<address>
250-PIPELINING
250-SIZE 15728640
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN


на 465 вообще не соединяется по телнету. Хотя может и не должен.
psL
Цитата(Ruslan1 @ Jan 31 2017, 15:30) *
на 465 вообще не соединяется по телнету. Хотя может и не должен.

и не должен. Обычно 465 - это SMTP через TLS, а 587 - это TLS внутри SMTP, так называемый STARTTLS
Лог можно здесь посмотреть http://www.checktls.com/testsender.html.
Опыта отправки писем из lwIP нет.
Ruslan1
Вроде бы начало проясняться что дело темное, явно не два байта переслать.
в моем LwIP - старенький огрызок от polarSSL, сейчас нужно смотреть mbed TLS. В нем есть файлик "ssl_mail_client.c", который вроде бы то что нужно.
Но задачка-то не такая простая, и по пониманию-тестированию, и по ресурсам в МК.
jcxz
Цитата(Ruslan1 @ Jan 31 2017, 21:13) *
Вроде бы начало проясняться что дело темное, явно не два байта переслать.
в моем LwIP - старенький огрызок от polarSSL, сейчас нужно смотреть mbed TLS. В нем есть файлик "ssl_mail_client.c", который вроде бы то что нужно.
Но задачка-то не такая простая, и по пониманию-тестированию, и по ресурсам в МК.

Неск. лет назад реализовывал на LPC1768 SMTP-клиент (поверх своего TCP-стека). Самостоятельно конечно, без чьих-то исходников.
Смотрел тогда тоже в сторону добавления возможности работы через шифрованное соединение. Но тоже понял, что там всё непросто.
И очень мало толковой документации по этому делу - это самое главное! В то время как нешифрованный SMTP разжёван вдоль и поперёк в разных источниках.
Именно это меня тогда и остановило. В результате нашёл достаточно много нешифрованных SMTP-серверов и решил пока отложить эту тему до тех пор когда реально припрёт.
Если нароете хорошее описание SMTP-протокола через защищённое соединение - выкладывайте. Думаю тоже когда-то придётся вернуться к этой теме.

Как я подозреваю: там главное установить и поддерживать шифрованное соединение, а уж протокол SMTP через него - точно такой-же как и через открытое.
Ruslan1
Цитата(jcxz @ Feb 1 2017, 11:46) *
Если нароете хорошее описание SMTP-протокола через защищённое соединение - выкладывайте. Думаю тоже когда-то придётся вернуться к этой теме.

Да не вопрос. Причем делать точно буду, но вот не знаю когда (пока что у этой задачи статус "critical", то есть: спать мешает, но жить c этим можно).

И да, сейчас безопасный smtp доступ отмирает понемногу. Уже столкнулся с мобильными операторами, которые "587/465 only".
Опять же, в перспективе уже не сильно удивлюсь, если FTP на FTPS менять нужно будет в обозримом будущем, так что от понимания "как это работает" не уйти.
Ruslan1
Цитата(psL @ Feb 1 2017, 16:24) *
можно посмотреть WolfSSL

Большое спасибо! посмотрю, конечно.

Из того что я предварительно читал про WolfSSL, мне показалось(!может я и не прав), что оно сложнее в подключении и жручее в ресурсах чем mbed TLS.

И при прочих равных лицензия тоже аргумент- WolfSSL это GPLv2 , а mbed TLS это еще и Apache 2.0. Этот Апач, как я понял гораздо либеральней и разрешает мне не открывать мой финальный код при использовании их исходников. Понимаю, что мало кто на соблюдении лицензий зацикливается, но при прочих равных могу позволить себе роскошь побыть честным человеком sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.