MQTT 无法通过 TLS 连接
Posted
技术标签:
【中文标题】MQTT 无法通过 TLS 连接【英文标题】:MQTT unable to connect over TLS 【发布时间】:2020-11-07 04:36:25 【问题描述】:我正在尝试使用 MQTT.js 在 react-native 中通过 TLS 连接到 MQTT 代理。根据文档,我尝试了以下代码:
const options =
port: PORT,
host: HOST,
protocol: 'mqtts',
secureProtocol: 'TLS_method',
username: USERNAME,
password: PASSWORD,
ca: CA_FILE
const client = mqtt.connect(options);
client.on('error', (error) =>
console.log("error", error);
);
client.on('connect', () =>
console.log("connected");
);
options对象会通过tls.connect()
传递,所以我指定了证书文件。
连接不返回错误,但客户端未连接。 我做错了什么?
【问题讨论】:
你在代理日志中看到它甚至尝试连接吗? “ca: CA_FILE”是您证书的实际内容吗? "ca: fs.readFileSync('./cacert.pem')" 以及 hardlib 所说的:你在 MQTT 代理日志文件中看到了什么? 是的,CA_FILE 是内容,而不是路径,并且代理日志显示:1595238085: OpenSSL Error: error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certificate unknown
1595238085: Socket error on client <unknown>, disconnecting.
可能导致此错误的原因是什么?
【参考方案1】:
尝试使用 React 本机 MQTT https://github.com/FrozenPyrozen/rn-native-mqtt 的分支,它与 android 和 ios 上的 TLS 连接一起使用
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review以上是关于MQTT 无法通过 TLS 连接的主要内容,如果未能解决你的问题,请参考以下文章
无法从Dropbox下载文件,因为无法通过C#中的WebClient与SSL / TLS通道连接
mqtt使用WebSocket over TLS(wss)握手失败
物联网云端对接-2通过MQTT协议与阿里云物联网套件进行云端通信