如何解决ngx-mqtt 通过 webapp 连接到 SSL/TLS mosquitto 代理
我正在使用树莓派来运行代理和 Java 后端。 Broker 有它的证书,后端已经通过 ssl 连接,没有任何问题。问题是,正如 mcollina 已经提到的,如果我想通过 webapp 连接到 mosquitto 代理,我不能使用密钥、证书或 ca。
这些是我的客户选项:
const MQTT_SERVICE_OPTIONS: IMqttServiceOptions = {
hostname: environment.hostname,port: 8883,protocol: 'wss',clientId: this.hashId,username: environment.mqttUsername,password: environment.mqttPassword,}
this.mqttService = new MqttService(MQTT_SERVICE_OPTIONS);
这里是蚊子的日志:
1611954829: New connection from xx.x.xxx.xxx on port 8883.
1611954829: Socket error on client <unknown>,disconnecting.
到目前为止我找不到可行的解决方案。
编辑:
蚊子配置:
tls_version tlsv1.2
cafile /etc/ssl/certs/my_domain_115928960DigiCertCA.crt
certfile /etc/ssl/certs/my_domain_115928960my-domain.crt
keyfile /home/pi/Desktop/server/cert/www.my-domain.key
allow_anonymous false
password_file /etc/mosquitto/passwd
port 8883
listener 8884
protocol websockets
解决方法
mosquitto 中的证书配置依赖于侦听器,因此您需要列出两次证书才能使其正常工作。一次用于绑定到 port
命令的默认侦听器,再次用于 websocket 侦听器。
将您的 mosquitto.conf 更改为如下所示:
allow_anonymous false
password_file /etc/mosquitto/passwd
port 8883
tls_version tlsv1.2
cafile /etc/ssl/certs/my_domain_115928960DigiCertCA.crt
certfile /etc/ssl/certs/my_domain_115928960my-domain.crt
keyfile /home/pi/Desktop/server/cert/www.my-domain.key
listener 8884
protocol websockets
cafile /etc/ssl/certs/my_domain_115928960DigiCertCA.crt
certfile /etc/ssl/certs/my_domain_115928960my-domain.crt
keyfile /home/pi/Desktop/server/cert/www.my-domain.key
,
我会在这里猜一猜。您正在与您的经纪人一起使用自签名证书。
这将导致任何 Web 浏览器出现问题,因为与使用自签名证书建立到 HTTP 服务器的 HTTPS 连接不同,浏览器不会弹出有关用户可以选择接受的不可信证书的警告。
当建立安全的 Websocket 连接时,代理提供的证书必须已经被浏览器信任。
您有两个选择:
-
将您使用的 CA 证书添加到代理证书存储。您如何执行此操作将因代理而异(并且可能还基于浏览器运行的操作系统)。问题是您必须对每个想要访问该站点的浏览器执行此操作。这只是在开发环境或企业设置中真正的一个选项,其中 CA 证书可以由中央管理系统推送。
-
使用来自现有可信 CA 的证书。例如Letsencrypt.org 这些都是免费的并且已经被所有浏览器信任。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。