websocket MQTT.js wss连接在浏览器中失败

wlzqhblo  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(500)

我正在使用react框架编写一个浏览器应用程序。在这个应用程序中,mqtt主题是订阅的。我正在使用MQTT.js包。如果我使用https连接在浏览器中运行应用程序(Edge和Firefox测试),我被迫使用安全WebSocket(wss)连接。如果我强制浏览器使用http连接,WebSocket连接(ws)工作正常。但是使用wss连接失败:
WebSocket connection to 'wss://serveradress.tld:8084/mqtt' failed
从独立的MQTT客户端(MQTTX)到代理的wss连接也可以正常工作。但它也不能在像hivemq或mqttx web这样的网络客户端上工作。
下面是连接mqtt broker的代码:

var mqtt = require('mqtt/dist/mqtt');
var mqttOptions = {
  protocol:  'wss',
  keepalive: 20,
  clientId: "mqttjs_" + Math.random().toString(16).substr(2, 8),
  path: "/mqtt/,
  rejectUnauthorized: false
};
const mqttUrl = "wss://serveradress.tld:8084";

var mqttClient = mqtt.connect(mqttUrl, mqttOptions);

我不需要验证证书,因为我正在封闭网络中运行连接。我在想,该选项“rejectUnauthorized:“假的”接受这个?
有什么建议我可以调试这个?提前感谢!
尼科

8oomwypt

8oomwypt1#

当在浏览器中运行时,JavaScript代码无法控制TLS/SSL处理,所有这些都由浏览器完成。
浏览器也不会像访问HTTPS页面那样显示一个屏幕,要求您接受无效证书。
您唯一的选择(除了使用由“真实的”CA颁发的证书)是将代理证书或其CA证书添加到每个想要使用代理的浏览器的证书存储中。这是为了让浏览器知道要信任它。
如何向浏览器添加证书/CA证书对于每个浏览器略有不同,但通常在“设置”中的“安全”下找到。

pgky5nke

pgky5nke2#

最后是代理配置中的错误。代理(EMQX)没有使用正确的证书,因为侦听器仅为端口8883上的SSL连接定义。在为WSS侦听器定义了证书的路径之后,连接就成功建立了。

相关问题