我应该将哪个域名作为 IoT MQTT 端点烘焙到我的 IoT 设备中?
Posted
技术标签:
【中文标题】我应该将哪个域名作为 IoT MQTT 端点烘焙到我的 IoT 设备中?【英文标题】:Which domain-name should I bake into my IoT device as IoT MQTT endpoint? 【发布时间】:2016-06-16 17:14:28 【问题描述】:情况说明
因此,当我在工厂中构建我的超级传感器时,它将每 30 秒通过 MQTT 将其指标发送到 AWS IoT,我必须将传感器将连接到的 DNS 域名烘焙到设备中。
AWS IoT 建议使用 <random-string>.iot.eu-west-1.amazonaws.com
形式的端点,对我来说,它看起来像 A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com
这是dig A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com
命令的稍微格式化的输出,显示经过几次重定向后,此域名解析为 6 个 IP 地址,这似乎是负载平衡器。
DOMAIN DETAILS:
A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com. 290
POINTS TO CNAME
iotmoonraker.eu-west-1.prod.iot.eu-west-1.amazonaws.com.
iotmoonraker.eu-west-1.prod.iot.eu-west-1.amazonaws.com. 254
POINTS TO CNAME
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com.
RESOLVES TO IPs:
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 54.229.34.249
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.19.106.35
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.18.139.53
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.48.96.41
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 52.19.155.13
dualstack.iotmoonraker-e-elb-9q2vvmxp3rir-1271985754.eu-west-1.elb.amazonaws.com. 50 IN A 54.76.47.209
问题
我有两个担忧:
当我在 C 中为我的 PIC 微控制器实现 MQTT 通信时,我的 DNS 解析器被单个域可以解析到的众多 IP 弄糊涂了。目前我不知道我是否可以解决这个问题。目前我的解决方案是 - 创建我自己的域名iot-ingestion.domain-i-own.com
并将其指向其中一个 IP 地址。有更好的选择吗?
将这个A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com
主机名烘焙到我的设备中有多可靠?如果我想在 2-3 年内切换更改 IoT 堆栈并切换到不同的技术/提供商怎么办?
【问题讨论】:
请问您使用的是哪个 DNS 解析器? 【参考方案1】:是的,我会避免透露“内部”AWS 主机名。 您还应该避免固定到单个 IP 地址。在 AWS 中,IP 地址可以快速更改并重新分配给其他客户。
解决方案是确实使用您可以控制的您自己的域名,但使用 DNS CNAME 记录。
iot-ingestion.domain-i-own.com CNAME A26PKG2U6WRS2I.iot.eu-west-1.amazonaws.com.
甚至可能值得将不同的主机名烘焙到不同的设备固件版本中,因此如果其中一个出现问题,您可以将其重新指向不同的端点,或者完全切断它,如果它会损坏您的服务。
我在使用 Amazon 的 DNS 服务 Route 53 方面有很好的经验。这也可能会导致您的设备向最终 IP 地址发出的 DNS 请求减少。
【讨论】:
我对这个答案投了赞成票,因为原则上我同意,尽管原因与所说的不同:我认为透露 AWS 名称没有问题,但更愿意让事情在我的控制之下。现在我的投票已锁定,但我必须重新考虑:问题是 CNAME 是不够的......因为 SSL。物联网提供的证书与客户的期望不符。您将 - 充其量 - 证书不匹配,同样可能的是,传入请求中的Host:
标头与预期的 IoT 不匹配。
@Michael-sqlbot 我已经测试过并且没有 ssl 不匹配,因为 AWS IoT 中的安全模型将数据包装在 TLS1.2 隧道中,但它没有使用任何 Common Name (CN)
内的标头证书。与在 HTTPS 中 server 必须向浏览器证明他是谁的情况不同,在 AWS IoT 中,必须向服务器证明设备是设备。安全性基于以下事实 - 如果设备拥有证书并且可以使用私钥签名 - 任何 AWS 端点都可以摄取。
@DimitryK 你能解释一下你是怎么解决的吗?我正在使用 AWSIoTPythonSDK,当我尝试通过 MQTT 连接到为 AWS IoT 端点创建的 CNAME 时,我得到:ssl.SSLError: ('Certificate subject does not match remote hostname.',)
@RichSutton 为了诊断问题,您能否先尝试通过 MQTT.fx 连接到您的端点?有用吗?
@DimitryK 我认为无论使用哪个库连接,SSL 都将是 SSL。我确信有一种方法可以禁用 SSL 证书验证,让我的客户忽略主机名与证书主题 CN 不匹配的事实,但我认为物联网系统应该设计为仅将数据发送到服务器它信任。最终,AWS 必须将此作为一项功能提供给物联网用户。【参考方案2】:
我相信这篇文章是相关的。截至 2019 年 6 月,IOT 端点似乎并未正式支持自定义域,但已在路线图上。这是我们客户的常见问题。
This link 提供进一步说明。
【讨论】:
以上是关于我应该将哪个域名作为 IoT MQTT 端点烘焙到我的 IoT 设备中?的主要内容,如果未能解决你的问题,请参考以下文章
OpenHarmony Neptune开发板-MQTT连接华为IoT平台
如何更改 Google IoT Core 的 MQTT 主机名
Google IoT Core:我如何知道消息来自哪个设备?