是否可以将 HTTPS 通信包装到 MQTT 中?

Is it possible to wrap HTTPS communication into MQTT?

我再次为缺乏协议知识而苦苦挣扎。

基本情况:

设备 A 想通过 HTTPS 与设备 Z 通信。

设备 A 未连接到互联网,仅连接到仅允许 MQTT 的内部网络。我们称其为 "internal bus" B。 同样连接到 B 的是 MQTT -> HTTPS 网关 G,它可以访问互联网。

问题:

是否可以将 A 和 Z 之间的完整 HTTPS 流量包装到 MQTT 有效负载中,并使用这些 MQTT 包进行握手和数据传输 - 以设备 A 和 Z 不具备的方式 "disturbed" 在他们的 HTTPS 通信中?

这不是指以某种方式解密包:所有内容都应按原样包装到 MQTT 中并通过 G 转发 - 因此它类似于 OSI 第 8 层。

评价:

我的直觉说,它应该以某种方式工作,但我认为要真正实现这一点,我必须在设备 A 和网关 G 上编写自己的 "network driver" 或 "network hook"

您认为可行性如何?

谢谢并致以最诚挚的问候

虽然这是可能的(如果你足够努力,几乎任何事情都是可能的,人们已经编写了整个 VPN 运行 通过 DNS 查找)我会质疑 return 投资。

您需要 2 个主题,一个用于通信的每个方向,网关上的一个 tun/tap 设备用于 write/read 数据包。添加一个 NAT 层,它将在 IP 层而不是在 HTTP 代理级别工作。

如果您担心安全问题并且由于某种原因您不能(或不需要)在本地网络中使用基于 TLS 的 MQTT,您可以使用反向代理在本地网络的边缘终止 TLS。使用 Nginx 很容易做到这一点(在下面的文章中有详细介绍)

https://docs.nginx.com/nginx/admin-guide/security-controls/terminating-ssl-tcp/

如果出于某种原因您绝对需要使用 HTTPS,协议网关应该可以解决问题,但除非万不得已,否则我不会这样做。