我正在尝试将我的NodeMCU ESP-12N连接到Azure IoT中心。
我用这样的代码创建了客户端:
esp8266 = mqtt.Client(DEVICE, 240, USER, PASSWD)
并且在调用esp8266时遇到错误:connect
PANIC:调用Lua API时出现无保护错误(init.lua:127:ssl not 可用的)
当我以前连接我的Arduino时,使用SSL证书刷新Wi-Fi非常重要。但是我无法用NodeMCU做到这一点(或者更有权利说 - 不知道如何)。
我可以获得证书:
openssl s_client -showcerts -connect ArduinoDemoHub.azure-devices.net:8883
当我添加时(谢谢@MarcelStör提示,我之前尝试过net.cert.verify)
tls.cert.verify([[
-----BEGIN CERTIFICATE-----
MIIGsTCCBJmgADJKJFdWgAIQF5Koy/50vI3cQAAAAhAXjANBgkqhkiG9w0BAQsF
......
lz3ZDUcyzRgG6TRtA3SjASEUlJMt3f7xuI2nNpt8p5gy9pXuRw==
-----END CERTIFICATE-----
]])
tls.cert.verify(true)
我收到了另一个错误:
连接错误:-5
更新: 有another similar topic,我已经设定了时间,但仍然没有结果。
更新2 : 以下是我尝试使用的一些链接:
Use Azure IoT Hub without client libraries (MQTT)
Sending Device-to-Cloud (D2C) Messages
sankarcheppali gitHub with samples
这是官方链接 Communicate with your IoT hub using the MQTT protocol 告诉我们:
要直接使用MQTT协议,您的客户端必须连接 TLS / SSL。尝试跳过此操作将因连接错误而失败。
此链接还提供与旧代码示例不同的用户名:
{iothubhostname}/{device_id}/api-version=2016-11-14
答案 0 :(得分:3)
默认情况下,TLS / SSL在固件构建配置中具有 dis 功能。在编译/构建固件之前,必须取消注释CLIENT_SSL_ENABLE
in user_config.h
。
最简单的方法是使用https://nodemcu-build.com上的云构建器(由您真正使用)并检查TLS复选框。
此外,net
模块中的所有TLS / SSL相关功能(您使用net.cert.verify
)已被提取到tls
模块中。除非使用当前固件构建的不有令人信服的论据,否则我建议您尝试dev
分支。在构建器中启用“TLS / SSL支持”后,您将自动获得tls
模块。
更新:有关于Azure IoT中心和证书的好文章:Certificate between IoT hub and devices connection
答案 1 :(得分:2)
我在Device Explorer的帮助下创建了SAS,如下所示:
SharedAccessSignature sr={your hub name}.azure-devices.net%2Fdevices%2FMyDevice01%2Fapi-version%3D2016-11-14&sig=vSgHBMUG.....Ntg%3d&se=1456481802
此值设置为PASSWD变量。已将USER变量更改为:
USER = "MyAzureIoTHub.azure-devices.net/MyDeviceID/api-version=2016-11-14"
已设为false tls.cert.verify
tls.cert.verify(false)
立即行动:)
答案 2 :(得分:0)