Как я могу использовать TLS с Paho MQTT поверх 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 ""? в настоящее время я получаю сообщение об ошибке ERR_CERT_AUTHORITY_INVALID в консоли Google Chrome.

Примечание 1: этот код отлично работает через http, но я перехожу на https.

Примечание 2. Я использую Mosquitto в качестве брокера MQTT.

Помощь очень ценится.


person Soul Gamer    schedule 29.10.2018    source источник
comment
ERR_CERT_AUTHORITY_INVALID: что такое сертификат сервера? Его ЦС должен быть известен HTTPS-клиенту.   -  person Patrick Mevzek    schedule 29.10.2018
comment
Я сгенерировал сертификат, используя OpenSSL   -  person Soul Gamer    schedule 29.10.2018


Ответы (2)


Похоже, вы используете самоподписанный сертификат. Ваш браузер не будет доверять этому, поэтому он не будет подключаться, вызывая показанную вами ошибку.

У вас есть 2 варианта:

  1. Импортируйте сертификат в свой браузер и пометьте его как доверенный (как вы это сделаете, зависит от того, какой браузер вы используете). Это действительно полезно только для тестирования/разработки, потому что обычные пользователи не должны импортировать случайные сертификаты, поскольку это открывает им все виды проблем с безопасностью.

  2. Получите настоящий доверенный сертификат для вашего сайта и брокера. Самый простой/дешевый способ сделать это — использовать letsencrypt. Затем вы можете настроить mosquitto для использования этого сертификата.

person hardillb    schedule 29.10.2018