如何使用MQTT连接到wss?

问题描述 投票:1回答:1

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

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

我已包含MQTT代理配置详细信息和JavaScript脚本代码以供参考。

[MQTT Broker配置(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和客户端ID: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');
}

任何人都可以为我提供解决方案。

javascript websocket mqtt mosquitto
1个回答
1
投票

如注释中所散列,听起来您的浏览器不信任您用来签署经纪人证书的CA。

浏览器不会像对HTTPS连接那样弹出关于不可信证书的对话框,因为他们希望代码决定如何处理连接失败(但我不认为他们实际上在错误消息)

跟踪此类事件的最佳方法通常是确保您在浏览器开发人员工具中选中network标签。

关于Chrome为什么不喜欢导入的CA证书的原因,这可能取决于您所使用的操作系统,因为Chrome使用系统证书库的方式不同于Firefox自己维护的iirc。

© www.soinside.com 2019 - 2024. All rights reserved.