次の方法で共有


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

サーバー TLS 証明書

TLS ハンドシェイク中には、DPS から RSA キー付きサーバー証明書が接続元のクライアントに提示されます。 グローバル Azure クラウド内のすべての DPS インスタンスでは、DigiCert Global Root G2 証明書によって発行された TLS 証明書が使用されます。

また、DigiCert Global Root G2 が予期せず廃止された場合の中断を防ぐために、Microsoft RSA Root Certificate Authority 2017 証明書をデバイスに追加することもお勧めします。 ルート CA の移行はまれですが、最新のセキュリティ環境での回復性のために、ルート CA が侵害されたり、緊急でルート CA の移行が必要な場合に備えて IoT シナリオを準備する必要があります。

すべてのデバイスで、次のルート CA を信頼することを強くお勧めします。

  • DigiCert Global G2 ルート CA
  • Microsoft RSA ルート CA 2017

これらの証明書をダウンロードするためのリンクについては、「Azure 証明機関の詳細」を参照してください。

SDK での証明書の信頼

Azure IoT device SDK は、デバイスを Azure IoT サービスに接続して認証します。 さまざまな SDK は、言語とバージョンに応じてさまざまな方法で証明書を管理しますが、ほとんどの場合、コードベースで証明書を直接ピン留めするのではなく、デバイスの信頼された証明書ストアに依存します。 この方法では、ルート証明書の今後の変更に対応するための柔軟性と回復性が提供されます。

次の表は、信頼された証明書ストアをサポートする SDK のバージョンをまとめたものです。

Azure IoT device SDK サポートされているバージョン
C 現在サポートされているすべてのバージョン
C# 現在サポートされているすべてのバージョン
Java バージョン 2.x.x 以降
Node.js 現在サポートされているすべてのバージョン
Python 現在サポートされているすべてのバージョン

証明書のピン留め

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

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 ドキュメントのページを参照してください。