javascript - 如何使用 MQTT 连接到 wss?

标签 javascript websocket mqtt mosquitto

我正在尝试使用带有生成的自签名证书的 JavaScript(mqttws31.js) 客户端建立 wss 连接,但无法创建连接并出现以下错误。

  1. “Firefox 无法与位于 wss://localhost:8883/mqtt 的服务器建立连接。”
  2. “错误:AMQJS0011E 未连接的状态无效。”

我包含了 MQTT 代理配置详细信息和 JavaScript 脚本代码以供引用。

MQTT 代理配置(mosquitto.conf)。

port 8084
persistence true
persistence_file mosquitto.db 

listener 1883 localhost
protocol mqtt

listener 8883
protocol websockets
allow_anonymous true
require_certificate false
cafile C:/Program Files/mosquitto/certs/certs/ca.crt
certfile C:/Program Files/mosquitto/certs/certs/server.crt
keyfile C:/Program Files/mosquitto/certs/certs/server.key
tls_version tlsv1.2

Javascript 客户端代码:

下面是传递给函数的输入。

主机:localhost,端口:8883 和 clientID:1234。

function(){
that.client = new Paho.MQTT.Client(host, Number(port), clientId);

        console.log("Connecting to " + host);
        that.client.onConnectionLost = onConnectionLost;
        that.client.onMessageArrived = onMessageArrived;
        that.client.connect({
            onSuccess : onConnect,
            userName: 'user',
            password:'password',
            useSSL: true,
            cleanSession : false
        });
}
function onConnect() {
    console.log('onConnect:');
    that.client.subscribe("mgtl/#", {
        qos : 2,
        onSuccess : function(){
            console.log('Acknowldgement recieved by sender');
        },
        onFailure : function(){
            console.log('Subscribe request has failed or timed out');
        }
    });

    that.client.subscribe("local/ack", {qos : 0});
    console.log('mqtt connected');
}

谁能给我解决方案。

最佳答案

正如评论中所说,听起来您的浏览器不信任您用来签署代理证书的 CA。

浏览器不会弹出与 HTTPS 连接相同的关于不可信证书的对话框,因为它们希望代码决定如何处理连接失败(但我不认为它们实际上提供了原因错误信息)

跟踪此类事情的最佳方法通常是确保检查浏览器开发人员工具中的网络选项卡。

至于为什么 Chrome 不喜欢导入的 CA 证书,这可能取决于您使用的是什么操作系统,因为 Chrome 使用系统证书存储,而 Firefox 则维护自己的 iirc。

关于javascript - 如何使用 MQTT 连接到 wss?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59213531/

相关文章:

javascript - 背景图片不覆盖div

android - 在 Android 应用程序中使用哪个 WebSocket 库?

node.js - Nodester: "failed-to-start"新应用程序

android - 使用 Android 应用程序的基于本地代理 (MQTT) 的发布/订阅

javascript - 如何使用 facebook/immutable-js 制作自定义不可变类型?

javascript - 组件渲染时 Vue JS 计算属性尚不可用

python - Google IoT 端到端示例中的连接错误

mqtt - 如何使用 MQTT 实现 whatsapp 类型的信使?

javascript - 在第二页使用第一页的数据

websocket - 测试客户端 channel 是否收到消息