• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP8266 и Amazon AWS IoT MQTT

xinetd

New member
Здравствуйте.
Может подскажите в чем ошибка.
Поднял свой MQTT брокер(mosquitto) с сертификатами.
Если я с командной строки отправляю клиентом данные, то аутентификация и подключение проходит без проблем
Client:
Код:
mosquitto_pub --cafile ca.crt --cert client.crt --key client.key -h *.*.*.* -t "/test/gpio" -m "msg" -p 8883 -d -u <user> -P ***
Broker:
Код:
1480428109: Received PUBLISH from mosqpub/12221-*** (d0, q0, r0, m0, '/test/gpio', ... (3 bytes))
1480428109: Received DISCONNECT from mosqpub/12221-***
1480429131: Sending CONNACK to mosqpub/13027-*** (0, 0)
Но если я пытаюсь подключиться с ESP8266 с использованием сертификата, то соединение не устанавливается
Код:
mqtt_global_connect  MQTT connecting to *.*.*.*:8883
ev_handler           MQTT Connect (0)
ev_handler           MQTT Connect (0)
ev_handler           MQTT Disconnect
Debug:
Код:
mg_connect_opt       0x3fff3bdc *.*.*.*:8883 client.crt,client.key,ca.crt
mg_ssl_if_conn_init  0x3fff3bdc client.crt,client.key,ca.crt
set_errno            spiffs error: -10003
set_errno            spiffs error: -10003
set_errno            spiffs error: -10003
set_errno            spiffs error: -10003
mg_do_connect        0x3fff3bdc tcp://*.*.*.*:8883
mg_lwip_if_connect_tcp 0x3fff3bdc tcp_bind = 0
mg_lwip_if_connect_tcp 0x3fff3bdc tcp_connect 0x3fff405c = 0
mg_add_conn          0x3fff0098 0x3fff3bdc
miot_poll_timer_cb   poll tmr 0x3ffe9cd4 0x3fff0098
mg_call              0x3fff1afc user ev=6 ev_data=0x3fffff00 flags=0 rmbl=0 smbl=0
mg_call              0x3fff1afc after user flags=0 rmbl=0 smbl=0
mongoose_poll        New heap free LWM: 26544
miot_poll_timer_cb   poll tmr 0x3ffe9cd4 0x3fff0098
mg_call              0x3fff1afc user ev=6 ev_data=0x3fffff00 flags=0 rmbl=0 smbl=0
mg_call              0x3fff1afc after user flags=0 rmbl=0 smbl=0
mg_lwip_tcp_conn_cb  0x3fff3bdc connect to *.*.*.*:8883 = 0
mg_lwip_tcp_write    0x3fff405c tcp_write 65 = 0
kr_send              0x3fff3bdc mg_lwip_tcp_write 65 = 65
kr_recv              256 - nothing to read
mg_lwip_ssl_do_hs    0x3fff3bdc 24 0 -1
mongoose_poll        New heap free LWM: 25688
miot_poll_timer_cb   poll tmr 0x3ffe9cd4 0x3fff0098
mg_call              0x3fff1afc user ev=6 ev_data=0x3fffff00 flags=0 rmbl=0 smbl=0
mg_call              0x3fff1afc after user flags=0 rmbl=0 smbl=0
mg_lwip_tcp_sent_cb  0x3fff3bdc 0x3fff405c 65
mg_call              0x3fff3bdc proto ev=4 ev_data=0x3ffffef0 flags=24 rmbl=0 smbl=48
mg_call              0x3fff3bdc after proto flags=24 rmbl=0 smbl=48
mg_lwip_tcp_recv_cb  0x3fff3bdc 0x3fff405c 1460 0
miot_poll_timer_cb   poll tmr 0x3ffe9cd4 0x3fff0098
kr_recv              256 1460 1460 1460
kr_recv              86 1460 1204 1460
kr_recv              256 1460 1118 1460
kr_recv              256 1460 862 1460
kr_recv              256 1460 606 1460
kr_recv              256 1460 350 1460
kr_recv              256 1460 94 1460
kr_recv              162 - nothing to read
mg_lwip_ssl_do_hs    0x3fff3bdc 24 0 -1
mg_call              0x3fff1afc user ev=6 ev_data=0x3fffff00 flags=0 rmbl=0 smbl=0
mg_call              0x3fff1afc after user flags=0 rmbl=0 smbl=0
mg_lwip_tcp_recv_cb  0x3fff3bdc 0x3fff405c 981 0
kr_recv              162 981 981 981
kr_recv              256 981 819 981
kr_recv              256 981 563 981
kr_recv              256 981 307 981
mg_ssl_if_ssl_err    0x3fff3bdc 0x3fff3ad4 SSL error: -1 1
mg_lwip_ssl_do_hs    0x3fff3bdc 24 0 -3
mg_if_connect_cb     0x3fff3bdc connect, err=-3
Сертификаты и ключ загружены на ESP8266.
В чем может быть причина?
 

lsm

Разработчик Smart.js
Команда форума
Покажите вывод:

miot ls
miot config-get mqtt
 

xinetd

New member
Покажите вывод:

miot ls
miot config-get mqtt
miot ls --port /dev/ttyUSB0
Код:
readme.txt
conflib.js
sys_ro_vars_schema.json
test.txt
index.html
sys_init.js
conf_defaults.json
ca.pem
demo.js
README.txt
I2C.js
app.js
sys_config_schema.json
console.log
conf.json
client.crt
client.key
ca.crt
miot config-get mqtt --port /dev/ttyUSB0
Код:
{
  "clean_session": false,
  "keep_alive": 60,
  "reconnect_timeout_max": 60,
  "reconnect_timeout_min": 10,
  "server": "*.*.*.*:8883",
  "ssl_ca_cert": "ca.crt",
  "ssl_cert": "client.crt",
  "ssl_key": "client.key"
}
 

lsm

Разработчик Smart.js
Команда форума
Вы конкретно к AWS коннектитесь?
Если да, то к серту надо привязать полиси в AWS IoT console (click on cert, chooose "attach policy").

С AWS IoT рекомендую обновить miot утилиту и запустить "miot aws-iot-setup" - оно все сделает правильно.
 

xinetd

New member
Нет. Не подключаюсь к AWS. Я поднял у себя брокер-сервер MQTT.
Код:
mosquitto version 1.4.10
Без сертификатов при аутентификации c psk все работает. Но хотелось бы использовать сертификат.
Или такой возможности нет?
 

lsm

Разработчик Smart.js
Команда форума
Нет. Не подключаюсь к AWS. Я поднял у себя брокер-сервер MQTT.
Код:
mosquitto version 1.4.10
Без сертификатов при аутентификации c psk все работает. Но хотелось бы использовать сертификат.
Или такой возможности нет?
Есть конечно.
Судя по логу, соединение устанавливается:

Код:
ev_handler           MQTT Connect (0)
ev_handler           MQTT Connect (0)
(0) это успех CONNECT.
Даже тот факт что сервер видит CONNECT от ESP значит что SSL соединился.
Проблема почему происходит Disconnect.

На стороне сервера есть логи?
 

xinetd

New member
Есть конечно.
Судя по логу, соединение устанавливается:

Код:
ev_handler           MQTT Connect (0)
ev_handler           MQTT Connect (0)
(0) это успех CONNECT.
Даже тот факт что сервер видит CONNECT от ESP значит что SSL соединился.
Проблема почему происходит Disconnect.

На стороне сервера есть логи?

Есть, но мало информативные
Код:
1480435003: New connection from x.x.x.x on port 8883.
1480435003: Socket error on client <unknown>, disconnecting.
При успешном коннекте с командной строки
mosquitto_pub --cafile ca.crt --cert client.crt --key client.key -h *.*.*.* -t "/test/gpio" -m "msg" -p 8883 -d -u <user> -P ***
Код:
1480435226: New connection from x.x.x.x on port 8883.
1480435226: New client connected from x.x.x.x as mosqpub/17814-xxx (c1, k60, u'hw-esp8266').
1480435226: Sending CONNACK to mosqpub/17814-xxx (0, 0)
1480435226: Received PUBLISH from mosqpub/17814-xxx (d0, q0, r0, m0, '/test/gpio', ... (3 bytes))
1480435226: Received DISCONNECT from mosqpub/17814-xxx
1480435226: Client mosqpub/17814-xxx disconnected.
Меня настораживает в дэбаге строчка
Код:
mg_ssl_if_ssl_err    0x3fff3bdc 0x3fff3ad4 SSL error: -1 1
 
Последнее редактирование:

lsm

Разработчик Smart.js
Команда форума
покажите свой ca.crt, please
 

xinetd

New member
Проблема решена.
Перегенерив сертификаты как корневой так и клиентские.
Возможно проблема была в Signature Algorithm
Old:
Код:
sha512WithRSAEncryption
New:
Код:
sha1WithRSAEncryption
Теперь лог ESP выглядит так
Код:
mqtt_global_connect  MQTT connecting to x.x.x.x:8883
ev_handler           MQTT Connect (1)
ev_handler           CONNACK: 0
sub                  Subscribed to /hw-esp8266/gpio
Спасибо за указание вероятного места проблемы!
 
Последнее редактирование:

lsm

Разработчик Smart.js
Команда форума
Спасибо указание вероятного места проблемы!
Отлично!
Теперь вам осталось только подцепить к ESP8266 крипточип ATECC508A, который стоит 80 центов и уже поддерживается нашей прошивкой - и защищенное решение готово. Никто не сможет увести ваши SSL ключи.
 

xinetd

New member
Отлично!
Теперь вам осталось только подцепить к ESP8266 крипточип ATECC508A, который стоит 80 центов и уже поддерживается нашей прошивкой - и защищенное решение готово. Никто не сможет увести ваши SSL ключи.
Спасибо! Буду копать в этом направлении.
 
Сверху Снизу