gpt4 book ai didi

azure - 将 Mosquitto 连接到新的 Azure MQTT 后端

转载 作者:太空宇宙 更新时间:2023-11-03 13:09:15 25 4
gpt4 key购买 nike

最近,Microsoft Azure 在其服务中添加了 MQTT 后端。此服务使用 TLS对其流量进行加密。我无法在 Mosquitto 和 Microsoft Azure 云之间连接。

我下载了服务器证书

echo -n | openssl s_client -connect mytarget.azure-devices.net:8883 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/test.cert

然后尝试连接 mosquitto_sub

mosquitto_sub -h mytarget.azure-devices.net -p 8883 -d -t devices/Device1/messages/events -i Device1 -u "mytarget.azure-devices.net/Device1" -P "SharedAccessSignature sr=snip&sig=snip&skn=snip"  --cafile /tmp/test.pem --insecure

但是,连接从未建立。Mosquitto 输出:

Client Device1 sending CONNECT Error: A TLS error occurred.

我之前已经通过 ssl 成功将 mosquitto 连接到亚马逊云(尽管我为此获得了证书和私钥)。因此,我尝试添加从 AWS 获得的客户端证书/ key ,希望错误是 mosquitto 也需要这些文件。

mosquitto_sub -h mytarget.azure-devices.net -p 8883 -d -t devices/Device1/messages/events -i Device1 -u "mytarget.azure-devices.net/Device1" -P "SharedAccessSignature sr=snip&sig=snip&skn=snip"  --cafile /tmp/test.pem --cert certificate.pem.crt --key -private.pem.key --insecure --insecure

但是,这没有帮助,也没有改变错误消息。

然后我查看了github上的mosquitto代码,发现错误可能是on this line引起的通过SSL_connect,这似乎是一个openssl函数。

有人让 mosquitto 连接到 Microsoft Azure 云吗?或者有任何指示下一步该去哪里吗?

编辑:

我似乎能够通过 socat 上的 SSL 隧道来发布:

socat openssl-connect:mytarget.azure-dices.net:8883,verify=0 tcp-l:8884,reuseaddr,fork

然后在 mosquitto 上连接到 -h localhost 而不是 azure 得到我:

Client Device1 sending CONNECT
Client Device1 received CONNACK
Client Device1 sending PUBLISH (d0, q0, r0, m1, 'devices/Device1/messages/events', ... (4 bytes))
Client Device1 sending DISCONNECT

可能是 Azure 主机的某些东西正在抛出蚊子。用 mosquitto 这样订阅也可以。

这种方法的问题是,ssl 连接似乎在第一个(几个)数据包之后被破坏,并且 socat 随后提示

E SSL_write(): Broken pipe

最佳答案

对于其他搜索此内容的人。我们终于成功地让它与 mosquitto_sub/pub 一起工作:

mosquitto_sub -h mytarget.azure-devices.net -p 8883 -t "devices/Device1/messages/devicebound/#" -i Device1 -u "mytarget.azure-devices.net/Device1" -P "SharedAccessSignature sr=mytarget.azure-devices.net&sig=snip&skn=snip" --capath /etc/ssl/certs/ --tls-version tlsv1 -d -V mqttv311 -q 1

以及发布:

mosquitto_pub -h mytarget.azure-devices.net -p 8883 -t "devices/Device1/messages/events/" -i Device2 -u "mytarget.azure-devices.net/Device2" -P "SharedAccessSignature sr=bbvgathering.azure-devices.net&sig=snip&se=snip&skn=snip" --capath /etc/ssl/certs/ --tls-version tlsv1 -d -V mqttv311 -q 1 -m "{\"key\": \"value\"}"

重要您必须发送 JSON 数据,其他所有内容都将被拒绝(至少在我们的设置中)!

注意请注意,您(似乎)无法直接从一台设备发送到另一台设备。因为这与方式相反。您必须在云中配置连接

关于azure - 将 Mosquitto 连接到新的 Azure MQTT 后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35863841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com