ssl - 我如何通过 Javascript 将 TLS 与 Paho MQTT 一起使用?

标签 ssl mqtt mosquitto paho

我目前在我的网站上使用的代码

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 代理。

非常感谢帮助。

最佳答案

看起来您使用的是自签名证书。这不会被您的浏览器信任,因此它不会连接,引发您显示的错误。

你有两个选择:

  1. 将证书导入您的浏览器并将其标记为受信任(具体操作方式因您使用的浏览器而异)。这仅对测试/开发真正有用,因为普通用户不应导入随机证书,因为这会使他们面临各种安全问题。

  2. 为您的网站和经纪人获取真正可信的证书。最简单/最便宜的方法是使用 letsencrypt .然后,您可以配置 mosquitto 以使用此证书。

关于ssl - 我如何通过 Javascript 将 TLS 与 Paho MQTT 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53051679/

相关文章:

database - 如何从 Mosquitto 代理获取消息计数

Android Studio - MQTT 未连接

mqtt - 如何为 mosquitto 经纪人创建自己的插件?

ruby-on-rails - 如何让谷歌忘记我有一个使用 Heroku SSL 的 SSL 站点

python - 如何将文本数据和文件从 IoT 设备发送到 Cloud IoT Core?

ssl - GCP Dataproc - 无法构建 kafka 消费者,无法加载 JKS 类型的 SSL keystore dataproc.jks

javascript - 如何在 'published'回调中访问客户端对象?

cluster-computing - 蚊子集群的基准?

ios - AFNetworking 3.2.0 '配置的安全策略只能应用于具有安全基本 URL(即 https)的管理器

ssl - IIS 7上的多个通配符证书,如何选择