如何使用 MQTT 连接到 wss?
How to connect to wss using the MQTT?
我正在尝试使用 JavaScript(mqttws31.js) 客户端与生成的自签名证书建立 wss 连接,但无法创建连接并出现以下错误。
- "Firefox can’t establish a connection to the server at wss://localhost:8883/mqtt."
- "Error: AMQJS0011E Invalid state not connected."
我已经包含了 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 连接相同的关于不可信证书的对话框,因为它们希望代码决定如何处理连接失败(但我不认为它们实际上提供了错误消息中的原因)
跟踪此类事件的最佳方法通常是确保检查浏览器开发人员工具中的 network
选项卡。
至于为什么 Chrome 不喜欢导入的 CA 证书,这可能取决于 OS 您使用的是什么,因为 Chrome 使用系统证书存储,而 Firefox 则维护它是自己的 iirc.
我正在尝试使用 JavaScript(mqttws31.js) 客户端与生成的自签名证书建立 wss 连接,但无法创建连接并出现以下错误。
- "Firefox can’t establish a connection to the server at wss://localhost:8883/mqtt."
- "Error: AMQJS0011E Invalid state not connected."
我已经包含了 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 连接相同的关于不可信证书的对话框,因为它们希望代码决定如何处理连接失败(但我不认为它们实际上提供了错误消息中的原因)
跟踪此类事件的最佳方法通常是确保检查浏览器开发人员工具中的 network
选项卡。
至于为什么 Chrome 不喜欢导入的 CA 证书,这可能取决于 OS 您使用的是什么,因为 Chrome 使用系统证书存储,而 Firefox 则维护它是自己的 iirc.