IoT 中心使用传输层安全性(TLS)来保护来自 IoT 设备和服务的连接。
注释
Azure IoT 中心 将于 2025 年 8 月 31 日 停止支持 TLS 1.0 和 1.1,这与 Azure 关于 TLS 1.0 和 1.1 停用 的服务公告一致。 此外,截至 2025 年 8 月 31 日,IoT 中心不再支持弱密码套件。 现有和新 IoT 中心仅支持推荐的强密码套件。
从 2025 年 8 月 31 日开始,Azure IoT 中心团队将开始在所有 IoT 中心主动强制实施 TLS 1.2 和强密码套件。 此强制实施是我们加强安全性并确保跨Azure服务合规性的更广泛承诺的一部分。
因此,必须正确测试和验证所有 IoT 设备是否与 TLS 1.2 兼容,并提前 推荐的密码 。
相互 TLS 支持
相互 TLS 身份验证可确保客户端验证服务器(IoT 中心)证书,服务器(IoT 中心)使用 X.509 客户端证书或 X.509 指纹 验证客户端。 IoT 中心在完成身份验证后执行授权。
对于高级消息队列协议(AMQP)和消息队列遥测传输(MQTT)协议,IoT 中心在初始 TLS 握手中请求客户端证书。 如果提供了一份客户端证书,IoT 中心会验证客户端证书,客户端会验证IoT 中心的证书。 此过程称为相互 TLS 身份验证。 当 IoT 中心 收到 MQTT 连接数据包或 AMQP 链接打开时,将对请求客户端进行授权,并判断客户端是否需要 X.509 身份验证。 如果已完成双向 TLS 身份验证,并且客户端已获授权以该设备身份进行连接,则允许该连接。 但是,如果客户端要求 X.509 身份验证,并且 TLS 握手期间未完成客户端身份验证,则IoT 中心拒绝连接。
对于 HTTP 协议,当客户端发出第一个请求时,IoT 中心检查客户端是否需要 X.509 身份验证,以及客户端身份验证是否已完成,IoT 中心执行授权。 如果客户端身份验证未完成,则IoT 中心拒绝连接。
成功握手后,IoT 中心可以使用对称密钥或 X.509 证书对设备进行身份验证。 对于基于证书的身份验证,IoT 中心根据提供的指纹或证书颁发机构(CA)验证证书。 若要了解详细信息,请参阅 使用 X.509 证书对标识进行身份验证。
IoT 中心的服务器 TLS 证书
在 TLS 握手期间,IoT 中心向连接客户端提供 RSA 密钥的服务器证书。 全局Azure云中的所有 IoT 中心都使用 DigiCert 全局根 G2 颁发的 TLS 证书。
请为所有设备信任以下两个根 CA:
- DigiCert Global G2 根 CA
- Microsoft RSA 根 CA 2017
有关下载这些证书的链接,请参阅Azure证书颁发机构详细信息。
根 CA 迁移很少见。 请始终让您的 IoT 解决方案为以下小概率事件做好准备:根 CA 一旦遭到入侵,就必须紧急迁移根 CA。
密码套件
从 2025 年 8 月 31 日起,IoT 中心强制对所有现有和新 IoT 中心使用推荐的强密码套件。 在此日期之后,不支持非推荐(弱)密码套件。
为了符合安全连接Azure安全策略,IoT 中心仅支持以下 RSA 和 ECDSA 密码套件:
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
在 没有 minTlsVersion:1.2 的中心上,以下不推荐的密码套件被允许使用,直到 2025 年 8 月 31 日:
- TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
- TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_256_CBC_SHA
客户端可以建议在 ClientHello 期间使用的高级密码套件的列表。 但是,IoT 中心可能不支持其中一些,例如,ECDHE-ECDSA-AES256-GCM-SHA384。 在这种情况下,IoT 中心 会尝试遵循客户端的偏好,但最终会与 ServerHello 就密码套件进行降级协商。
SDK 和IoT Edge的 TLS 配置
使用以下链接在IoT 中心客户端 SDK 中配置 TLS 1.2 并允许使用密码。
| 语言 | 支持 TLS 1.2 的版本 | 文档 |
|---|---|---|
| C | 标记 2019-12-11 或更新的标记 | 链接。 |
| Python | 版本 2.0.0 或更高版本 | 链接。 |
| C# | 版本 1.21.4 或更高版本 | 链接。 |
| Java | 版本 1.19.0 或更高版本 | 链接。 |
| Node.js | 版本 1.12.2 或更高版本 | 链接。 |
IoT Edge设备可在与IoT 中心通信时配置为使用 TLS 1.2。 为此,请使用 IoT Edge 文档页。
证书钉扎
证书锁定和过滤与 IoT 中心 终结点关联的 TLS 服务器证书和中间证书,这样做是强烈不推荐的,因为 Microsoft 经常更换这些证书,并且很少有通知。 如有必要,请仅固定根证书,如这篇 Azure IoT 博客文章中所述。
后续步骤
- 若要详细了解 IoT 中心 的安全性和访问控制,请参阅 控制对 IoT 中心 的访问。
- 若要详细了解如何使用 X509 证书进行设备身份验证,请参阅 使用 X.509 CA 证书进行设备身份验证。