我成功地将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


有谁成功在ESP32上使用ssl socket_wrap吗?

编辑(23.12.2018):

我终于设法工作了,通过HTTPS从Google那里获取HTML,是的。检查上面的代码。希望这可以帮助。我认为ESP32的MicropPython端口已经变得更好,这就是现在可以使用的原因。

下一步是使SSL WebSocket正常工作...

编辑(09.06.2019):

现在正在工作。该库非常适合我打算做的事情https://github.com/danni/uwebsockets

最佳答案

错误-7280的翻译如下(摘自:include / mbedtls / ssl.h):

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

该问题可能是内存问题...您可以尝试添加:

import gc
gc.collect()


呼叫getaddinfo()之后?

还可以尝试在s.connect()调用后加载密钥/证书文件吗?

关于python - ESP32 MicroPython SSL WebSocket,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51160692/

10-14 18:47
查看更多