首页 > 解决方案 > 如何将我的 Reactjs Web 应用程序连接到安全的 MQTT 代理?

问题描述

我有一个需要连接到安全 mqtt 代理的 reactjs Web 应用程序。

Web 应用程序部署在 AWS 弹性 beanstalk 中并使用 HTTPS。我已经有一个安全的 MQTT 代理,但是当我尝试将我的 Web 应用程序连接到 MQTT 代理时,我遇到了这个错误:

连接建立错误:net::ERR_CERT_AUTHORITY_INVALID

我正在使用 MQTTjs 包。我已经拥有服务器端和客户端的证书。

这是我的代码:

var client = mqtt.connect('wss://[ipaddress]:8884');

我也试过这段代码:

var mqtt = require('mqtt');
var fs = require('fs');
var path = require('path');


var CERT = fs.readFileSync(path.join(__dirname, './ca.crt'));
var KEY = fs.readFileSync(path.join(__dirname, './ca.key'));


var options = {
    rejectUnauthorized: true,
    port: 8884,
    host: ipaddress,
    protocol: 'mqtts',
    ca: CERT,
    keyPath: KEY,
    certPath: CERT
}

但是这段代码的错误是:

未捕获的 TypeError:fs.​​readFileSync 不是函数

标签: reactjsmqtt

解决方案


您无法在浏览器中从磁盘加载证书。所以代码的第二个版本是行不通的。

您需要将 CA 和客户端证书添加到浏览器证书存储中。

然后浏览器应该使用 CA 证书来验证代理,然后应该选择正确的客户端证书作为标识呈现给代理。


推荐阅读