我使用这段代码通过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");
//....
2条答案
按热度按时间kokeuurv1#
您可以使用您用于网站的相同证书,也可以使用它用于Web Socket。例如,如果网站URL是**https://test.com,您应该使用 wss(wss://test.com:1884)连接到test.com**,并在您的经纪人中使用相同的SSL证书。对于Mosquitto,配置文件应该如下所示。
端口1883用于无TLS的Mqtt连接,Web Socket使用端口1884,并且需要SSL证书。
证书文件应位于服务器上,它们是:
ca.crt是SSL证书的CA文件
服务器密钥是私钥
server.crt是SSL证书的CRT文件
当您从您的网站连接到Web Socket(因为它是HTTPS),并且您连接到Web套接字的同一URL时,它使用相同的SSL证书,并且不需要将其导入到浏览器。
aurhwmvo2#
就像评论里说的那样。
1.无法从通过HTTPS加载的页面加载不安全的内容。这意味着如果页面通过
https://
加载,则WebSocket连接必须为wss://
1.在进行WebSocket连接时,浏览器不会要求您批准自签名或不受信任的证书,就像在尝试使用非受信任CA签名的证书导航到HTTPS站点时一样。
你有两个选择
1.您可以手动将您的自签名证书导入到浏览器的信任存储区中。这只是开发/测试的一个有效选项,因为它需要对所有访问过该站点的浏览器执行。
1.您可以从可信CA(例如LetsEncrypt)获得证书,并用于HTTP服务器和代理(或者您可以获得类似Nginx的东西来代理代理代理,并终止两者的TLS)