ESP32 MicroPython SSL WebSocket

Мне удалось подключить мой ESP32 к серверу WebSocket. Сейчас пытаюсь заставить его работать с SSL. Я попробовал этот простой код для подключения к www.google.com. Я использовал это для создания сертификата и ключа.

openssl req -newkey rsa:2048 -nodes -keyout client.key -x509 -days 365 -out client.crt

.

Затем скопируйте файлы ключей и сертификатов с помощью adafruit-ampy. Не забудьте изменить свой последовательный порт.

ampy -p /dev/tty.SLAB_USBtoUART put client.crt
ampy -p /dev/tty.SLAB_USBtoUART put client.key

Это код на ESP32

import ussl
import usocket
import networking

KEY_PATH = "client.key"
CERT_PATH = "client.crt"
HOST, PATH, PORT = "www.google.com", "/" 443

with open(KEY_PATH, 'rb') as f:
    key1 = f.read()

with open(CERT_PATH, 'rb') as f:
    cert1 = f.read()

s = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
addr = usocket.getaddrinfo(HOST, PORT)[0][-1]
s.connect(addr)
sock = ussl.wrap_socket(s, key = key1, cert = cert1)
sock.write(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (PATH, HOST), 'utf8'))
print(sock.read(100))

Я получаю такую ​​ошибку:

mbedtls_ssl_handshake error: -7280
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 5] EIO

Кто-нибудь успешно использовал ssl socket_wrap на ESP32?

РЕДАКТИРОВАТЬ (23.12.2018):

Мне, наконец, удалось заставить что-то работать, получая HTML из Google по HTTPS, ага. Проверьте код выше. Надеюсь это поможет. Я предполагаю, что порт MicropPython для ESP32 становится лучше, и именно по этой причине он работает сейчас.

Следующим шагом будет заставить работать SSL WebSocket ...

РЕДАКТИРОВАТЬ (09.06.2019):

Теперь работает. Эта библиотека отлично подходит для того, что я намеревался сделать https://github.com/danni/uwebsockets


person silbo    schedule 03.07.2018    source источник


Ответы (2)


ошибка -7280 переводится следующим образом (из: include / mbedtls / ssl.h):

#define MBEDTLS_ERR_SSL_CONN_EOF -0x7280 /**< The connection indicated an EOF. */

Проблема у вас может быть проблема с памятью ... Не могли бы вы попробовать добавить:

import gc
gc.collect() 

после того, как вы позвонили getaddinfo()?

Также можно попробовать загрузить файлы ключей / сертификатов после вызова s.connect()?

person Lingster    schedule 28.08.2018
comment
Спасибо, попробую, когда у меня будет время :) - person silbo; 28.08.2018
comment
В настоящее время я получаю эту ошибку, я также постараюсь изучить ››› sock = ussl.wrap_socket (s, key = key1, cert = cert1). mbedtls_ssl_handshake error: -80 Traceback (последний вызов последний): файл ‹stdin›, строка 1, в ‹module› OSError: [Errno 5] EIO - person silbo; 23.12.2018
comment
Теперь он работает, мне кажется, мне не нужно было ничего менять, может быть, это была ошибка памяти внутри библиотеки ussl или usock. Я понятия не имею. Но, похоже, с последним портом ESP32 MicroPython теперь все работает. - person silbo; 23.12.2018

В конце концов, он заработал со следующим кодом: https://github.com/robokoding/sumorobot-firmware/blob/wifi/uwebsockets.py#L246

person silbo    schedule 31.01.2021