Jump to content

    
Sign in to follow this  
k000858

STM32F407: LwIP + SSL -> SMTP

Recommended Posts

Всем привет. Есть девайс на stm32f407 с езернетом на lwip стеке. Требуется сделать e-mail клиент. Как известно, сейчас практически все SMTP серверы перешли на SSL (наверное, правильнее будет сказать "запретили соединения без SSL по 25 порту).

Вопрос: потянет ли вышеозвученный МК софтовое шифрование (ведь крипто-проц есть только у 417 линейки).

 

Может есть у когонибдь опыт реализации: какую посоветуете реализацию SSL (знаю, что есть как коммерческие так и бесплатные), и где можно надыбать исходники/примеры.

Share this post


Link to post
Share on other sites
Вопрос: потянет ли вышеозвученный МК софтовое шифрование (ведь крипто-проц есть только у 417 линейки).

Вопрос некорректный. Потянет любой проц, лишь бы было достаточно памяти и времени на вычисления.

Share this post


Link to post
Share on other sites

Для этих решений на 4хх SMTP, жрущий озу, в этм плане 427 неплох. Софтовое шифрование потянет без проблем. А SSL по разному решают и 25 порт мало кто пользует, разве что из-за архаичности. eSMTP насклько вам нужно то реально? Также как IPv6. У вас наверняка встроеное решение а не паблик.

Share this post


Link to post
Share on other sites

нашел в примерах от ST готовую PolarSSL. но она для подключения использует socket, а его можно использовать только при наличии OS.

может можно ее как то завести без использования OS?

Share this post


Link to post
Share on other sites
Используйте 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);

Share this post


Link to post
Share on other sites

Здравствуйте.

 

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

 

Есть 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 авторизации чтобы это заработало?

 

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

 

Спасибо всем кто откликнется.

Share this post


Link to post
Share on other sites

подергал через телнет нужный 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 вообще не соединяется по телнету. Хотя может и не должен.

Share this post


Link to post
Share on other sites
на 465 вообще не соединяется по телнету. Хотя может и не должен.

и не должен. Обычно 465 - это SMTP через TLS, а 587 - это TLS внутри SMTP, так называемый STARTTLS

Лог можно здесь посмотреть http://www.checktls.com/testsender.html.

Опыта отправки писем из lwIP нет.

 

Share this post


Link to post
Share on other sites

Вроде бы начало проясняться что дело темное, явно не два байта переслать.

в моем LwIP - старенький огрызок от polarSSL, сейчас нужно смотреть mbed TLS. В нем есть файлик "ssl_mail_client.c", который вроде бы то что нужно.

Но задачка-то не такая простая, и по пониманию-тестированию, и по ресурсам в МК.

Share this post


Link to post
Share on other sites
Вроде бы начало проясняться что дело темное, явно не два байта переслать.

в моем LwIP - старенький огрызок от polarSSL, сейчас нужно смотреть mbed TLS. В нем есть файлик "ssl_mail_client.c", который вроде бы то что нужно.

Но задачка-то не такая простая, и по пониманию-тестированию, и по ресурсам в МК.

Неск. лет назад реализовывал на LPC1768 SMTP-клиент (поверх своего TCP-стека). Самостоятельно конечно, без чьих-то исходников.

Смотрел тогда тоже в сторону добавления возможности работы через шифрованное соединение. Но тоже понял, что там всё непросто.

И очень мало толковой документации по этому делу - это самое главное! В то время как нешифрованный SMTP разжёван вдоль и поперёк в разных источниках.

Именно это меня тогда и остановило. В результате нашёл достаточно много нешифрованных SMTP-серверов и решил пока отложить эту тему до тех пор когда реально припрёт.

Если нароете хорошее описание SMTP-протокола через защищённое соединение - выкладывайте. Думаю тоже когда-то придётся вернуться к этой теме.

 

Как я подозреваю: там главное установить и поддерживать шифрованное соединение, а уж протокол SMTP через него - точно такой-же как и через открытое.

Share this post


Link to post
Share on other sites
Если нароете хорошее описание SMTP-протокола через защищённое соединение - выкладывайте. Думаю тоже когда-то придётся вернуться к этой теме.

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

 

И да, сейчас безопасный smtp доступ отмирает понемногу. Уже столкнулся с мобильными операторами, которые "587/465 only".

Опять же, в перспективе уже не сильно удивлюсь, если FTP на FTPS менять нужно будет в обозримом будущем, так что от понимания "как это работает" не уйти.

Share this post


Link to post
Share on other sites
можно посмотреть WolfSSL

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

 

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

 

И при прочих равных лицензия тоже аргумент- WolfSSL это GPLv2 , а mbed TLS это еще и Apache 2.0. Этот Апач, как я понял гораздо либеральней и разрешает мне не открывать мой финальный код при использовании их исходников. Понимаю, что мало кто на соблюдении лицензий зацикливается, но при прочих равных могу позволить себе роскошь побыть честным человеком :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this