我如何在 Javascript 上将 TLS 与 Paho MQTT 一起使用?
How can I use TLS with Paho MQTT over Javascript?
我目前在我的网站上使用的代码
var client = null;
var device_is_on = null;
var hostname = "********";
var port = "8003";
var clientId = "mqtt_js_" + parseInt(Math.random() * 100000, 10);
var device_topic = "stat/Device_001/POWER";
var status_topic = "cmnd/Device_001/power";
function connect(){
client = new Paho.MQTT.Client(hostname, Number(port), clientId);
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
var options = {
useSSL: true,
userName : "***",
password : "********",
onSuccess: onConnect,
onFailure: onFail
};
client.connect(options);
}
function onConnect(context) {
options = {qos:0}
client.subscribe(device_topic, options);
client.subscribe(status_topic, options);
var payloadd = "6";
message = new Paho.MQTT.Message(payloadd);
message.destinationName = status_topic;
message.retained = true;
client.send(message);
}
function onFail(context) {
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
window.alert("Connection Lost!\nPlease Refresh.");
}
}
function onMessageArrived(message) {
if (message.destinationName == device_topic){
var temperature_heading = document.getElementById("device_display");
temperature_heading.innerHTML = "Air Conditioner: " + message.payloadString;
if (message.payloadString == "ON" || message.payloadString == "o"){
device_is_on = true;
} else {
device_is_on = false;
}
}
}
function device_toggle(){
if (device_is_on){
var payload = "off";
device_is_on = false;
} else {
var payload = "on";
device_is_on = true;
}
message = new Paho.MQTT.Message(payload);
message.destinationName = status_topic;
message.retained = true;
client.send(message);
}
我应该在““var options””部分下放什么?目前我在 Google Chrome.
的控制台中收到错误 ERR_CERT_AUTHORITY_INVALID
注意 1:此代码在 http 上运行完美,但我正在转换为 https。
注意 2:我使用 Mosquitto 作为我的 MQTT 代理。
非常感谢帮助。
TLS javascript paho 客户端可用:Github paho.mqtt.javascript/issues/88
您似乎使用的是自签名证书。这不会被您的浏览器信任,因此它不会连接,引发您显示的错误。
您有 2 个选择:
将证书导入您的浏览器并将其标记为受信任(具体操作方式因您使用的浏览器而异)。这仅对 testing/development 真正有用,因为普通用户不应导入随机证书,因为这会使他们面临各种安全问题。
为您的网站和经纪人获取真正可信的证书。 simplest/cheapest 的方法是使用 letsencrypt。然后你可以配置 mosquitto 使用这个证书。
我目前在我的网站上使用的代码
var client = null;
var device_is_on = null;
var hostname = "********";
var port = "8003";
var clientId = "mqtt_js_" + parseInt(Math.random() * 100000, 10);
var device_topic = "stat/Device_001/POWER";
var status_topic = "cmnd/Device_001/power";
function connect(){
client = new Paho.MQTT.Client(hostname, Number(port), clientId);
client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;
var options = {
useSSL: true,
userName : "***",
password : "********",
onSuccess: onConnect,
onFailure: onFail
};
client.connect(options);
}
function onConnect(context) {
options = {qos:0}
client.subscribe(device_topic, options);
client.subscribe(status_topic, options);
var payloadd = "6";
message = new Paho.MQTT.Message(payloadd);
message.destinationName = status_topic;
message.retained = true;
client.send(message);
}
function onFail(context) {
}
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
window.alert("Connection Lost!\nPlease Refresh.");
}
}
function onMessageArrived(message) {
if (message.destinationName == device_topic){
var temperature_heading = document.getElementById("device_display");
temperature_heading.innerHTML = "Air Conditioner: " + message.payloadString;
if (message.payloadString == "ON" || message.payloadString == "o"){
device_is_on = true;
} else {
device_is_on = false;
}
}
}
function device_toggle(){
if (device_is_on){
var payload = "off";
device_is_on = false;
} else {
var payload = "on";
device_is_on = true;
}
message = new Paho.MQTT.Message(payload);
message.destinationName = status_topic;
message.retained = true;
client.send(message);
}
我应该在““var options””部分下放什么?目前我在 Google Chrome.
的控制台中收到错误 ERR_CERT_AUTHORITY_INVALID注意 1:此代码在 http 上运行完美,但我正在转换为 https。
注意 2:我使用 Mosquitto 作为我的 MQTT 代理。
非常感谢帮助。
TLS javascript paho 客户端可用:Github paho.mqtt.javascript/issues/88
您似乎使用的是自签名证书。这不会被您的浏览器信任,因此它不会连接,引发您显示的错误。
您有 2 个选择:
将证书导入您的浏览器并将其标记为受信任(具体操作方式因您使用的浏览器而异)。这仅对 testing/development 真正有用,因为普通用户不应导入随机证书,因为这会使他们面临各种安全问题。
为您的网站和经纪人获取真正可信的证书。 simplest/cheapest 的方法是使用 letsencrypt。然后你可以配置 mosquitto 使用这个证书。