我正在构建真正简单的IoT项目,并且遇到了nodeMCU TLS问题。我在Raspberry pi上安装了MQTT代理,所有证书均已正确插入(与同一树莓上的Paho Client或远程PC上的Mqtt.fx客户端都可以正常使用),但是当我尝试将ESP8266与nodeMCU连接时,我正在获取SSL握手错误(是的,我为所有提到的客户端使用相同的证书文件)。我的ESP8266代码如下所示:
tls.cert.verify([[
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
]])
m:connect(config.HOST, 8883, 1, function(con)
print("Connected to MQTT broker")
register_myself()
-- And then pings each 1000 milliseconds
tmr.stop(6)
tmr.alarm(6, 1000, 1, send_ping)
end, handle_mqtt_error)
我从m:connect收到错误代码 -5(mqtt.CONN_FAIL_SERVER_NOT_FOUND),但是当我使用Wireshark分析数据包时,TLS握手看起来像这样:
- 客户您好
- 服务器您好
- 证书,服务器Hello完成
- TLSv1.2记录层:警报(级别:致命,描述:未知CA)
在ESPlorer控制台中也有这行: E:M 544 ,我真的不知道那是什么意思。
答案 0 :(得分:1)
万一有人遇到同样的事情,我的问题实际上是由项目其他部分的高内存使用引起的,我在应用程序层上使用AES加密,没有它,一切工作正常。
答案 1 :(得分:0)
ESP8266太慢,无法可靠地使用证书。您应该升级到ESP32或对它有更多支持的东西。
请参阅以下PDF的3.2节,参考ESP8266的SSL握手失败。这看起来与您的问题类似。您确实必须具有创造力和精益才能使其可靠地工作,这降低了您制作的产品的价值。因此,可能不值得麻烦。
https://www.espressif.com/sites/default/files/documentation/5a-esp8266_sdk_ssl_user_manual_en.pdf
此外,请尝试使用TLS 1.1来查看其功能。它可能不支持TLS 1.2。