Azure IoT Hub Device Provisioning Service (DPS) の TLS サポート

DPS では、トランスポート層セキュリティ (TLS) を使用して IoT デバイスからの接続をセキュリティで保護します。

現在 DPS でサポートされている TLS プロトコルのバージョンは次のとおりです。

  • TLS 1.2

接続を最小 TLS バージョンに制限する

最小 TLS バージョン以上を使用するデバイス クライアント接続のみを許可するように DPS インスタンスを構成できます。

重要

現在、DPS では TLS 1.2 のみがサポートされているため、DPS インスタンスを作成するときに最小 TLS バージョンを指定する必要はありません。 この機能は、今後の拡張のために提供されています。

これを行うには、新しい DPS リソースをプロビジョニングし、Azure Resource Manager テンプレートの 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

Resource Manager テンプレートで DPS リソースを作成する詳細については、Azure Resource Manager テンプレートで DPS を設定する方法に関するページを参照してください。

この構成を使用して作成された DPS リソースは、TLS バージョン 1.0 および 1.1 を使用して接続を試みるデバイスを拒否します。

Note

minTlsVersion プロパティは読み取り専用であり、DPS リソースの作成後は変更できません。 したがって、すべての IoT デバイスが TLS 1.2 および推奨される暗号と互換性があることを、事前に適切にテストし、検証する必要があります。

Note

フェールオーバー時、DPS の minTlsVersion プロパティは、フェールオーバー後に geo ペア リージョンで有効なままになります。

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) がサポートされます。

証明書のピン留め

DPS エンドポイントに関連する TLS サーバー証明書 (別名、リーフ証明書) および中間証明書の証明書ピン留めやフィルター処理は、Microsoft がこれらの証明書をほとんどあるいは全く予告なしに頻繁にロールするため、推奨されません。 必要な場合は、この Azure IoT ブログ記事の説明に従ってルート証明書のみをピン留めしてください。

IoT SDK で TLS 1.2 を使用する

次のリンクを使用して、Azure IoT クライアント SDK で TLS 1.2 および許可されている暗号を構成します。

Language TLS 1.2 をサポートするバージョン ドキュメント
C タグ 2019-12-11 以降 リンク
Python バージョン 2.0.0 以降 リンク
C# バージョン 1.21.4 以降 リンク
Java バージョン 1.19.0 以降 リンク
NodeJS バージョン 1.12.2 以降 リンク

IoT Hub と共に TLS 1.2 を使用する

IoT Hub は、デバイスとの通信時に TLS 1.2 を使用するように構成できます。 詳細については、IoT Hub の TLS 1.0 および 1.1 の廃止に関する記事を参照してください。

IoT Edge と共に TLS 1.2 を使用する

IoT Edge デバイスは、IoT Hub および DPS との通信時に TLS 1.2 を使用するように構成できます。 詳しくは、IoT Edge ドキュメントのページを参照してください。