最近,Microsoft Azure在其服务中添加了MQTT后端.此服务使用TLS对其流量进行加密. 我无法连接Mosquitto和Microsoft Azure Cloud.
我用下载了服务器证书
echo -n | openssl s_client -connect mytarget.azure-devices.net:8883 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/test.cert
Run Code Online (Sandbox Code Playgroud)
然后尝试连接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
Run Code Online (Sandbox Code Playgroud)
但是,永远不会建立连接.Mosquitto输出:
客户端Device1发送CONNECT错误:发生TLS错误.
我之前已成功将ssl上的mosquitto连接到亚马逊云端(虽然我获得了证书和私钥).所以我尝试添加客户端证书/密钥,这是我从AWS获得的,希望错误是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
Run Code Online (Sandbox Code Playgroud)
但是,这没有帮助,也没有更改错误消息.
然后,我到mosquitto代码在github上,发现错误可能是造成该线路上的所以SSL_connect,这似乎是一个OpenSSL的功能.
有没有人让mosquitto连接到Microsoft Azure云或有任何指针在哪里看下一步?
编辑:
我似乎能够通过在socat上隧道传输SSL来发布:
socat openssl-connect:mytarget.azure-dices.net:8883,verify=0 tcp-l:8884,reuseaddr,fork …
Run Code Online (Sandbox Code Playgroud)