共用方式為

IoT 中心的传输层安全性 (TLS) 支持

IoT 中心使用传输层安全性 (TLS) 保护来自 IoT 设备和服务的连接。

注释

Azure IoT 中心将终止对 TLS 1.0 和 1.1 的支持,与 2025 年 8 月 31TLS 1.0 和 1.1 停用的 Azure 范围服务公告一致。 此外,截至 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 链接打开时,IoT 中心对请求客户端执行授权,并确定客户端是否需要 X.509 身份验证。 如果已完成相互 TLS 身份验证,并且客户端被授权作为设备进行连接,则系统会允许其进行连接。 但如果客户端需要 X.509 身份验证,而客户端身份验证在 TLS 握手期间未完成,则 IoT 中心会拒绝连接。

对于 HTTP 协议,当客户端发出第一个请求时,IoT 中心会检查客户端是否需要 X.509 身份验证,如果客户端身份验证已完成,则 IoT 中心会执行授权。 如果客户端身份验证未完成,则 IoT 中心会拒绝连接

成功进行 TLS 握手后,IoT 中心可以使用对称密钥或 X.509 证书对设备进行身份验证。 对于基于证书的身份验证,IoT 中心会根据你提供的指纹或证书颁发机构 (CA) 对证书进行验证。 若要了解详细信息,请参阅 使用 X.509 证书对标识进行身份验证

IoT 中心的服务器 TLS 证书

在 TLS 握手期间,IoT 中心会提供 RSA 加密的服务器证书以连接客户端。 全局 Azure 云中的所有 IoT 中心均使用由 DigiCert Global Root G2 颁发的 TLS 证书。

强烈建议所有设备信任以下三个根 CA:

  • DigiCert Global G2 根 CA
  • Microsoft RSA 根 CA 2017

如需下载这些证书的链接,请参阅 Azure 证书颁发机构详细信息

根 CA 迁移很少见。 你应该始终为根 CA 被泄露和需要紧急根 CA 迁移的不太可能的情况准备 IoT 解决方案。

密码套件

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 文档页

证书固定

强烈建议不要进行证书固定,不要筛选 TLS 服务器证书,不要使用与 IoT 中心终结点关联的中间证书,因为 Microsoft 经常滚动更新这些证书,但很少进行通知,或者根本就不进行通知。 如果必须这样做,请按照此 Azure IoT 博客文章中的描述仅固定根证书。

后续步骤