我有一个 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 是一个旧的不安全标准。
您有几个选择: