Lua SSL证书和Azure Iot集线器

时间:2018-01-28 09:59:27

标签: ssl lua tls1.2 nodemcu azure-iot-hub

我正在尝试将我的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

3 个答案:

答案 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)

您可以参考以下两个库将NodeMCU ESP-12N连接到Azure IoT中心,可以在库管理器中搜索这两个库:

  • AzureIoTHubMQTTClient
  • AzureIoTProtocol_MQTT enter image description here

安装后,您可以参考样品。 enter image description here