reactjs 在Nextjs中使用安全WebSocket连接到MQTT

new9mtju  于 2023-02-18  发布在  React
关注(0)|答案(2)|浏览(247)

我使用这段代码通过Nextjs的socket连接到我自己的mqtt代理,它工作正常

import mqtt, { MqttClient } from "mqtt";
//...
mqtt.connect("ws://IPADDRESS:1884");
//....

现在,我想把它改为安全的WebSocket(wss),我有CRT文件,但不知道如何添加它。

import mqtt, { MqttClient } from "mqtt";
//...
mqtt.connect("wss://IPADDRESS:1884");
//....
kokeuurv

kokeuurv1#

您可以使用您用于网站的相同证书,也可以使用它用于Web Socket。例如,如果网站URL是**https://test.com,您应该使用 wsswss://test.com:1884)连接到test.com**,并在您的经纪人中使用相同的SSL证书。对于Mosquitto,配置文件应该如下所示。

listener 1883

allow_anonymous true

listener 1884
protocol websockets
socket_domain ipv4

cafile C:\Program Files\mosquitto\cert\ca.crt
keyfile C:\Program Files\mosquitto\cert\server.key
certfile C:\Program Files\mosquitto\cert\server.crt
tls_version tlsv1.2

端口1883用于无TLS的Mqtt连接,Web Socket使用端口1884,并且需要SSL证书。
证书文件应位于服务器上,它们是:

ca.crt是SSL证书的CA文件
服务器密钥是私钥
server.crt是SSL证书的CRT文件

当您从您的网站连接到Web Socket(因为它是HTTPS),并且您连接到Web套接字的同一URL时,它使用相同的SSL证书,并且不需要将其导入到浏览器。

aurhwmvo

aurhwmvo2#

就像评论里说的那样。
1.无法从通过HTTPS加载的页面加载不安全的内容。这意味着如果页面通过https://加载,则WebSocket连接必须为wss://
1.在进行WebSocket连接时,浏览器不会要求您批准自签名或不受信任的证书,就像在尝试使用非受信任CA签名的证书导航到HTTPS站点时一样。
你有两个选择
1.您可以手动将您的自签名证书导入到浏览器的信任存储区中。这只是开发/测试的一个有效选项,因为它需要对所有访问过该站点的浏览器执行。
1.您可以从可信CA(例如LetsEncrypt)获得证书,并用于HTTP服务器和代理(或者您可以获得类似Nginx的东西来代理代理代理,并终止两者的TLS)

相关问题