Как использовать STM32 API LWIP / MQTT с TLS? - PullRequest
0 голосов
/ 08 апреля 2020

Я сделал решение stm32 + rtos + lwip / mqtt, и оно работает хорошо. Теперь я хочу использовать его с безопасным подключением. Я не нашел никаких примеров.

lwip mqtt api поддерживает связь tls. Но такого примера нет, просто простой mqtt-клиент, использующий код LWIP MQTT-клиент , который я использовал.

Я попытался включить embedtls и некоторые параметры в cubemx, LWIP_ALTCP & LWIP_ALTCP_TLS, добавить LWIP_ALTCP_TLS_MBEDTLS в , Это скомпилировано. Как инициировать mbedtls и добавить сертификат TLS. эта ссылка требует небольшой информации altcp tls

Есть ли у кого-нибудь опыт или рабочий пример с stm32 lwip / mqtt + tls (mbedtls) для стека lmip stm32?

UPD. Вот мой код установки клиента mqtt:

struct mqtt_connect_client_info_t ci;
memset(&ci, 0, sizeof(ci));
ci.client_id = "lwip_test";
ci.client_user = "";
ci.client_pass = "";
ci.keep_alive = 0;
ci.tls_config = altcp_tls_create_config_client((const u8_t*)test_cert, sizeof(test_cert));
// create client
client = mqtt_client_new();
// connect client   
mqtt_client_connect(client, &resolved, port, mqtt_on_connect, (void *)0, &ci);

Я даю клиенту mqtt сертификат и длину. У меня есть ошибка в altcp_tls_create_config_client_common функция (altcp_tls_mbedtls. c) с кодом -4480 (не удалось выделить память).

ret = mbedtls_x509_crt_parse(conf->ca, ca, ca_len);
if (ret != 0) {
  LWIP_DEBUGF(ALTCP_MBEDTLS_DEBUG, ("mbedtls_x509_crt_parse ca failed: %d 0x%x", ret, -1*ret));
  altcp_mbedtls_free_config(conf);
  return NULL;
}

Что я делаю неправильно, какие варианты еще я следует настроить в модуле mbedtls? Я использую по умолчанию был сгенерирован CubeMX

1 Ответ

0 голосов
/ 16 апреля 2020

У меня идентичная конфигурация, поэтому я могу сказать вам, что если вы отладите код, вы увидите, что он sh попытается вызвать callo c, если ваша среда равна моей, у вас нет этого системная функция.

Я использовал callo c, реализованный в lwip, в частности в модуле altcp. Я определил через cubemx MBEDTLS_PLATFORM_MEMORY, для того, чтобы активировать определения ALTCP_MBEDTLS_PLATFORM_ALLO C в altcp_tls_mbedtls_mem. c, то я был в состоянии использовать altcp_mbedtls_mem_init () функции, которые определяют в mbedtls для использования altcp Callo c и бесплатно.

Эта функция вызывается в altcp_tls_create_config_client, поэтому, если вы собираетесь ее использовать, вам не нужно вызывать altcp_mbedtls_mem_init ().

Таким образом, вы должны быть в состоянии правильно распределить память для mbedtls. .

...