您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

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

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

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

  • TLS 1.2

将连接限制为 TLS 1.2

为了提高安全性,建议将 DPS 实例配置为仅允许那些使用 TLS 版本 1.2 的设备客户端连接,并强制使用建议的密码

为此,请预配一个新的 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 进行连接的设备。 同样,如果设备客户端的 HELLO 消息未列出任何建议的密码,TLS 握手会被拒绝。

备注

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

备注

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

配置为仅接受 TLS 1.2 的 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)

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