你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure IoT 中心设备预配服务 (DPS) 中的 TLS 支持

DPS 使用传输层安全性 (TLS) 保护来自 IoT 设备的连接。

DPS 支持的当前 TLS 协议版本如下:

  • TLS 1.2

限制最低 TLS 版本的连接

可将 DPS 实例配置为仅允许使用最低 TLS 版本或更高版本的设备客户端连接

重要

目前,DPS 仅支持 TLS 1.2,因此在创建 DPS 实例时无需指定最低 TLS 版本。 此功能是为将来的扩展提供的。

为此,请预配一个新的 DPS 资源设置,并在 Azure 资源管理器模板的 DPS 资源规范中,将 minTlsVersion 属性设置为 1.2。 以下示例模板 JSON 为新的 DPS 实例指定 minTlsVersion 属性。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Devices/ProvisioningServices",
            "apiVersion": "2020-01-01",
            "name": "<provide-a-valid-DPS-resource-name>",
            "location": "<any-region>",
            "properties": {
                "minTlsVersion": "1.2"
            },
            "sku": {
                "name": "S1",
                "capacity": 1
            },
        }     
    ]
}

可以使用以下 Azure CLI 命令来部署模板。

az deployment group create -g <your resource group name> --template-file template.json

若要详细了解如何使用资源管理器模板来创建 DPS 资源,请参阅使用 Azure 资源管理器模板设置 DPS

使用此配置创建的 DPS 资源会拒绝那些尝试使用 TLS 版本 1.0 和 1.1 进行连接的设备。

注意

minTlsVersion 属性是只读的,创建 DPS 资源后,便不能再更改该属性。 因此,必须事先正确测试并验证你的所有 IoT 设备是否与 TLS 1.2 和建议的密码兼容。

注意

故障转移后,DPS 的 minTlsVersion 属性会在故障转移后的异地配对区域中保持有效。

DPS 实例强制要求使用以下建议的旧版密码套件:

建议的 TLS 1.2 密码套件
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

旧密码套件

DPS 目前仍支持这些密码套件,但未来将弃用。 如果可能,请使用上面建议的密码套件。

选项 1(安全性更好)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1)
TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
选项 2(性能更好)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256 (uses SHA-1)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384 (uses SHA-1)
TLS_RSA_WITH_AES_128_GCM_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_GCM_SHA384 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA256 (lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_128_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)
TLS_RSA_WITH_AES_256_CBC_SHA (uses SHA-1, lack of Perfect Forward Secrecy)

相互 TLS 支持

为 X.509 身份验证配置 DPS 注册时,DPS 支持相互 TLS (mTLS)。

证书固定

强烈建议不要固定证书,也不要筛选 TLS 服务器证书(又名“叶证书”)和与 DPS 终结点关联的中间证书,因为 Microsoft 会经常滚动更新这些证书,但很少或没有通知。 如果必须执行相关操作,请仅按照此 Azure IoT 博客文章中所述固定根证书。

在 IoT SDK 中使用 TLS 1.2

使用以下链接在 Azure IoT 客户端 SDK 中配置 TLS 1.2 和允许的密码。

语言 支持 TLS 1.2 的版本 文档
C 标记 2019-12-11 或更新的标记 链接
Python 版本 2.0.0 或更高版本 链接
C# 版本 1.21.4 或更高版本 链接
Java 版本 1.19.0 或更高版本 链接
NodeJS 版本 1.12.2 或更高版本 链接

将 TLS 1.2 与 IoT 中心配合使用

IoT 中心可以配置为在与设备通信时使用 TLS 1.2。 有关详细信息,请参阅 IoT 中心弃用 TLS 1.0 和 1.1

将 TLS 1.2 与 IoT Edge 配合使用

IoT Edge 设备可以配置为在与 IoT 中心和 DPS 通信时使用 TLS 1.2。 有关详细信息,请参阅 IoT Edge 文档页