【发布时间】:2016-05-04 03:29:40
【问题描述】:
我尝试将 NodeMCU 与 IBM Bluemix IoT Foundation 连接起来。不安全的 MQTT 连接工作出色,并将数据从 BMP180 推送到云端。但是,当我开始使用 TLS 时,它不会连接到代理。我尝试与 mqtt.fx 建立 TLS 连接,它工作正常,似乎 NodeMCU 是问题所在。 如果我运行这段代码:
orgID="****"
BROKER = orgID..".<bluemix>"
BRPORT = 8883
CLIENTID = "d:"..orgID..":generic_esp:generic_esp_01"
print("ClientID: "..CLIENTID)
BRPWD = "***********"
BRUSER = "use-token-auth"
local function publish()
dofile('sensor.lc')
m:publish('iot-2/evt/esp8266/fmt/json',payload,1,0,
function(conn) print('Payload published') end)
end
m = mqtt.Client(CLIENTID, 120, BRUSER, BRPWD)
c = false
print('MQTT Init')
m:on('offline', function(con) print('mqtt offline'); c = false end)
m:connect(BROKER, BRPORT, 1, function(conn)
print('MQTT connected: '..BROKER..':'..BRPORT)
c = true
publish()
end)
tmr.alarm(1, 1000, 1, function()
if not c then
print('MQTT reconnecting')
m:close()
c = false
m:connect(BROKER, BRPORT, 1, function(conn) print('.. MQTT reconnected: '..BROKER..':'..BRPORT); c = true end)
end
if c then
publish()
end
end)
esp8266 只是打印“MQTT reconnecting”,无法连接。 是我的代码有问题还是 NodeMCU 1.4 不完全支持 TLS?
【问题讨论】:
-
NodeMCU 使用 TLS 1.2,nodemcu.readthedocs.org/en/dev/en/modules/mqtt/…。
-
首先想到的是证书链验证问题,即 NodeMCU(或 Espressif SDK)不信任 SSL 证书或与其签名的 CA 证书。 1. 尝试使用已启用调试的固件。 2. 尝试使用不同的 MQTT 代理(如果您在 IBM 工作,会很难吗?)。 3. 尝试使用像cloudmqtt.com 这样的public 代理,以便其他人可以验证您的代码。
-
如果您有权访问 Bluemix 代理实例,您可以turn on Java SSL debug messages。这应该为您提供足够的信息来得出一些结论。
-
我会尝试访问它。一个有趣的花絮:Bluemix 代理似乎只接受带有 AES 的 TLS。您是否知道 NodeMCU 是否使用了不同的密码,例如三重 DES 或 RC4?编辑:无法访问代理进行调试。
-
IoTF 的列表支持太长,无法评论,但很容易发现:
sslscan --no-failed --tls12 us.messaging.internetofthings.ibmcloud.com:443
标签: lua microcontroller ibm-cloud iot esp8266