Перейти к содержанию
    

STM32F407: LwIP + SSL -> SMTP

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Используйте 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);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на 465 вообще не соединяется по телнету. Хотя может и не должен.

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно посмотреть WolfSSL

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...