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 的分支,它与 androidios 上的 TLS 连接一起使用

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review

以上是关于MQTT 无法通过 TLS 连接的主要内容,如果未能解决你的问题,请参考以下文章

无法从Dropbox下载文件,因为无法通过C#中的WebClient与SSL / TLS通道连接

mqtt使用WebSocket over TLS(wss)握手失败

物联网云端对接-2通过MQTT协议与阿里云物联网套件进行云端通信

错误:C# 底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系

TLS证书验证失败

MQTT.js 无法建立本地代理连接