在角度ngx-mqtt中使用websockets secure(wss)连接到mosquitto代理失败连接

问题描述 投票:0回答:2

我有一个 Angular 12 Web 应用程序,可以通过端口 9001 上的 websockets (ws) 订阅代理上的主题,从而从 mosquitto 代理检索 mqtt 数据,该应用程序有效。

我现在已经按照本指南创建我自己的自签名证书和密钥,对发布到代理的设备传入的 mqtt 数据进行了加密。这工作正常,并且可以在端口 8883上工作。

我还尝试加密连接到我的代理以检索数据的 Angular Web 应用程序之间的通信。到目前为止,在我的连接设置中,我已启用协议作为 websockets secure

(wss) 而不是标准 websockets (ws):

export const MQTT_SERVICE_OPTIONS: IMqttServiceOptions = { hostname: '<BROKER IP>', port: 9001, protocol: 'wss', username: '<BROKER USERNAME>', password: '<BROKER PASSWORD>' };
我已将 mosquitto.conf 文件调整为以下内容,

感谢这个问题,其中答案表明您需要为每个侦听器指定证书和密钥,在我的例子中,Websocket 为 9001,加密为 8883 MQTT:

persistence true persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d allow_anonymous false password_file /etc/mosquitto/pwfile #TLS CONFIG listener 8883 cafile /etc/mosquitto/certs/mqtt_ca.crt certfile /etc/mosquitto/certs/mqtt_srv.crt keyfile /etc/mosquitto/certs/mqtt_srv.key tls_version tlsv1.2 listener 9001 protocol websockets cafile /etc/mosquitto/certs/mqtt_ca.crt certfile /etc/mosquitto/certs/mqtt_srv.crt keyfile /etc/mosquitto/certs/mqtt_srv.key
但是,当我查看浏览器(Brave 和 Firefox)时,我在控制台中收到以下错误:

如果我在 Angular web 应用程序中使用普通的 websockets

(ws) 连接到代理,它可以正常工作,但显然它没有加密。

我已确保在我的代理上允许来自操作系统和路由器防火墙上的端口 9001 和 8883 的传入连接。

我不知道为什么会出现这种情况,任何帮助将不胜感激,谢谢。

我只是尝试将我在 mosquitto 代理上使用的相同自签名证书 CA mqtt_ca.crt 导入浏览器证书存储区,这在 MacOS 上会显示钥匙串。我将其标记为可信,但仍然收到连接错误。

我不确定我是否做得正确,但这就是我在登录选项卡下的钥匙串中的内容:

这是我在勇敢中选择的选项,它打开了钥匙串窗口:

我还尝试在 Firefox 中导入我的 mqtt_ca.crt,但我再次遇到相同的连接错误:

我还深入研究了浏览器开发工具的网络部分,并遇到了此错误:

SSL_ERROR_RX_RECORD_TOO_LONG

但我不确定这意味着什么。

还要补充一点,当我创建 CA 证书密钥时,我使用了 4096 位的 -aes256,而不是指南中使用的 -des3 2048 位。我不知道这是否与我遇到的这些问题有关,但我的理解是 des3 是一个旧的不安全标准。

angular websocket mqtt mosquitto self-signed
2个回答
2
投票
通过 JavaScript(例如 Javascript MQTT 客户端)访问资源时,浏览器不会像加载网页时那样提示您手动接受自签名证书。

您有几个选择:

  1. 确保托管 MQTT 客户端的页面也使用与代理相同的证书通过 HTTPS 加载。这将使浏览器提示您接受使用自签名证书连接的风险,然后该风险应转移到 MQTT WebSocket 连接。

  2. 将自签名证书导入到浏览器的证书存储中并将其标记为受信任。这实际上只是一个开发选项,因为您需要为所有访问该网站的浏览器执行此操作。您导入哪个证书取决于您创建证书的方式,但如果您有 CA 证书,则导入该证书。


0
投票
有更新吗?您找到这个问题的解决方案了吗?我在这里处理或多或少相同的问题。

© www.soinside.com 2019 - 2024. All rights reserved.