次の方法で共有


IoT Hub でのトランスポート層セキュリティ (TLS) のサポート

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

Note

Azure サービス全体での TLS 1.0 および 1.1 の廃止に関する発表に合わせて、Azure IoT Hub では、2025 年 8 月 31 日をもって TLS 1.0 および 1.1 のサポートを終了します。 さらに、IoT Hub では、2025 年 8 月 31 日の時点で脆弱な暗号スイートはサポートされなくなります。 既存の IoT Hub と新しい IoT Hub の両方で、推奨される強力な暗号スイートのみがサポートされます。

したがって、"すべて" の IoT デバイスおよびサービスが、TLS 1.2 および推奨される暗号と互換性があることを、事前に適切にテストし、検証する必要があります。 テストとコンプライアンスのメカニズムとして 、最小限の TLS 強制機能 を使用することを強くお勧めします。

Important

TLS 1.2 のサポートと TLS 1.2適用を区別することが重要です。 TLS 1.2 はすべての IoT Hub でサポートされています。つまり、IoT Hubs は TLS 1.2 プロトコルを使用して接続を処理できます。 一方、TLS 1.2 の適用により、IoT Hub が TLS 1.2 以降を使用した接続 のみを 受け入れることが保証されます。 TLS 1.2 の適用が有効になっている場合、サービスでは 強力な暗号スイートの使用も強制されます。

現在、TLS 1.2 の適用は、一部のリージョンでのみサポートされています。

  • すべてのパブリック クラウド リージョン
  • US Gov アリゾナ
  • US Gov バージニア (TLS 1.0/1.1 のサポートはこのリージョンでは利用できません。TLS 1.2 強制を有効にするか、IoT Hub の作成に失敗する必要があります)。

IoT Hub デバイスが実行されている TLS のバージョンを確認するには、 TLS 1.0 および 1.1 のサポート 終了ガイドを参照してください。

相互 TLS のサポート

相互 TLS 認証では、クライアントでサーバー (IoT Hub) 証明書を "認証" し、サーバー (IoT Hub) で X.509 クライアント証明書または X.509 拇印を使用してクライアントを "認証" する必要があります。 "認証" が完了すると、IoT Hub によって "認可" が実行されます。

Advanced Message Queuing Protocol (AMQP) および Message Queuing Telemetry Transport (MQTT) プロトコルの場合、IoT Hub は最初の TLS ハンドシェイクでクライアント証明書を要求します。 クライアント証明書が提供されると、IoT Hub はそれを "認証" し、クライアントは IoT Hub 証明書を "認証" します。 このプロセスを相互 TLS 認証と呼ばれています。 IoT Hub が MQTT 接続パケットを受信するか、AMQP リンクが開くと、IoT Hub は要求元クライアントのための "権限付与" を実行し、クライアントに X.509 認証が必要か判断します。 相互 TLS 認証が完了し、クライアントに対して、デバイスとして接続することが認可されると、接続が許可されます。 ただし、クライアントが X.509 認証を必要としており、TLS ハンドシェイク中にクライアント認証が完了しなかった場合、IoT Hub は接続を拒否します。

HTTP プロトコルの場合、クライアントが最初の要求を行うと、IoT Hub はクライアントが X.509 認証を必要とするか確認し、クライアント認証が完了していた場合、IoT Hub は権限を付与します。 クライアント認証が完了しなかった場合、IoT Hub は接続を拒否します

TLS ハンドシェイクに成功すると、IoT Hub では、対称キーか X.509 証明書を利用してデバイスを認証できます。 証明書ベースの認証の場合、IoT Hub では、指定した拇印または認証機関 (CA) に対して証明書を検証します。 詳細については、「X.509 証明書を使用して ID を認証する」を参照してください。

IoT Hub のサーバー TLS 証明書

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

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

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

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

ルート CA の移行はまれにしか行われません。 ルート CA が侵害され、緊急のルート CA 移行が必要になる事態はほとんど発生しませんが、その場合に備えて、IoT ソリューションを常に準備しておく必要があります。

暗号スイート

2025 年 8 月 31 日より、IoT Hub では、既存および新規のすべての IoT Hub に対して、推奨される強力な暗号スイートの使用が強制されます。 推奨されない (弱い) 暗号スイートは、この日付を過ぎてもサポートされていません。

セキュリティで保護された接続に関する Azure セキュリティ ポリシーに準拠するために、IoT Hub では次の RSA および ECDSA 暗号スイートのみがサポートされます。

  • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • 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 Hub では、 ECDHE-ECDSA-AES256-GCM-SHA384などの一部がサポートされていない場合があります。 この場合、IoT Hub はクライアントの設定に従おうとしますが、最終的には ServerHello を使用して暗号スイートをネゴシエートします。

IoT Hub を TLS 1.2 サポートに更新する

IoT Hub が作成されたら、Azure portal、CLI、または SDK を使用して、 minTlsVersion プロパティを更新できます。 TLS 1.2 と強力な暗号スイート (選択したリージョンでのみ許可) を使用するように IoT Hub を適用するか、TLS 1.2 のサポート (すべてのリージョンでサポート) を設定するように更新する必要がある場合は、次の手順に従って行うことができます。

Tls 1.2 をサポートするように IoT Hub を更新したり、Azure portal で強力な暗号スイートを適用したりするには:

  1. Azure portal で既存の IoT Hub に移動します。

  2. 左側のメニューの [ 概要 ] タブで、[要点] セクションの [最小 TLS バージョン] リンク をクリックします。

    TLS サポートの最小バージョンを選択する方法を示すスクリーンショット。

  3. [最小 TLS バージョン] ウィンドウで 1.2 を選択し、TLS 1.2 以降をサポートするデバイスのみが接続できるようにします。

  4. [更新] をクリックします。

    TLS 1.2 のサポートを有効にする方法を示すスクリーンショット。

Note

IoT Hub は、すべてのパブリック リージョンで TLS 1.2 に更新できます。 ただし、選択したリージョン (米国東部、米国中南部、米国西部 2、US Gov アリゾナ、US Gov バージニア) のいずれかで IoT Hub を更新すると、より強力な暗号スイートが適用されます。

TLS 1.2 と強力な暗号スイートを使用するように IoT Hub を強制する

IoT デバイスの TLS 1.2 および強力な暗号スイートへのコンプライアンスを確保するために、Azure IoT Hub の最小限の TLS 適用機能を使用してコンプライアンスを強制できます。

現在、この機能は、次のリージョンと IoT Hub の作成時にのみ使用できます。

  • パブリック クラウド リージョン:
  • US Gov アリゾナ
  • US Gov バー ジニア (TLS 1.0/1.1 のサポートはこのリージョンでは利用できません - TLS 1.2 の強制を有効にする必要があります。そうしないと、IoT ハブの作成は失敗します)

Azure portal で TLS 1.2 と強力な暗号スイートの強制を有効にするには、次の手順を実行します。

  1. Azure portal で IoT Hub 作成ウィザードに移動します。

  2. サポートされている リージョン の一覧からリージョンを選択します。

  3. [管理] -> [詳細設定] -> [トランスポート層セキュリティ (TLS)] -> [TLS の最小バージョン] で、1.2 を選択します。 この設定は、サポートされているリージョンで作成された IoT ハブにのみ表示されます。

    IoT ハブの作成時に TLS 1.2 の強制を有効にする方法を示すスクリーンショット。

  4. を選択し を作成する

  5. IoT デバイスをこの IoT Hub に接続します。

ARM テンプレートを使用して作成するには、サポートされているリージョンのいずれかに新しい IoT ハブをプロビジョニングし、次のリソース仕様で minTlsVersion プロパティを 1.2 に設定します。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.Devices/IotHubs",
            "apiVersion": "2020-01-01",
            "name": "<provide-a-valid-resource-name>",
            "location": "<any-of-supported-regions-below>",
            "properties": {
                "minTlsVersion": "1.2"
            },
            "sku": {
                "name": "<your-hubs-SKU-name>",
                "tier": "<your-hubs-SKU-tier>",
                "capacity": 1
            }
        }
    ]
}

この構成を使用して作成された IoT ハブ リソースは、TLS バージョン 1.0 と 1.1 を使用して接続を試みるデバイスおよびサービス クライアントを拒否します。 同様に、ClientHello メッセージに推奨される暗号が示されていない場合、TLS ハンドシェイクは拒否されます。

Note

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

IoT Hub デバイスの TLS バージョンと暗号スイートの確認

Azure IoT Hub には、IOT デバイスのセキュリティを監視するのに役立つ TLS バージョン、暗号スイート、およびその他のデバイス接続メトリックを確認する機能が用意されています。 IoT Hub メトリックまたは診断ログを使用して、TLS バージョンの使用状況と 、暗号スイートなどのその他の関連プロパティを追跡できます。

IoT Hub メトリックを使用した TLS バージョンと暗号スイートの確認

IoT Hub へのデバイス トラフィックが TLSv1.2 と強力な暗号スイートを利用していることを検証する場合は、IoT Hub のメトリックを確認できます。 これにより、TLS バージョンまたは暗号スイートでフィルター処理し、成功した接続の数を確認できます。

  1. Azure portal で IoT Hub に移動します。

  2. 左側のメニューの [ 監視] で、[ メトリック] を選択します。

  3. メトリック成功した接続を追加します。

    成功した接続メトリックを追加する方法を示すスクリーンショット。

  4. [ フィルターの追加] ボタンを選択し、適切なプロパティ、TLS バージョンまたは暗号スイート、演算子 (例: "=")、値 (TLSv1.2 など) を選択して、TLS バージョンまたは暗号スイートでフィルター処理します。

    TLS バージョンまたは暗号スイートでフィルター処理する方法を示すスクリーンショット。

  5. フィルターを適用すると、フィルター処理されたプロパティと値に基づいて、IoT Hub 接続が成功したデバイスの合計が表示されます。

IoT Hub 診断ログを使用した TLS バージョンと暗号スイートの確認

Azure IoT Hub は、Azure Monitor ログを使用して分析できる複数のカテゴリの診断ログを提供できます。 接続ログには、IoT Hub デバイスの TLS バージョンと暗号スイートがあります。

これらのログを表示するには、次の手順を実行します。

  1. Azure portal で IoT Hub に移動します。

  2. 左側のメニューの [ 監視] で、[ 診断設定] を選択します。 診断設定で [接続] がオンになっていることを確認します。

  3. 左側のメニューの [ 監視] で、[ログ] を選択 します

  4. 次のクエリを入力します。

    AzureDiagnostics
    | where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
    | where Category == "Connections"
    | where OperationName == "deviceConnect"
    | extend props_json = parse_json(properties_s)
    | project DeviceId = props_json.deviceId, TLSVersion = props_json.tlsVersion
    
  5. クエリ結果の例を次に示します。

    デバイス TLS バージョンのクエリを示す図。

Note

TLS バージョンのクエリは、HTTPS 接続を使用するデバイスでは使用できません。

SDK および IoT Edge 用の TLS 構成

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

Language TLS 1.2 をサポートするバージョン Documentation
C タグ 2019-12-11 以降 Link
Python バージョン 2.0.0 以降 Link
C# バージョン 1.21.4 以降 Link
Java バージョン 1.19.0 以降 Link
Node.js バージョン 1.12.2 以降 Link

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

楕円曲線暗号 (ECC) サーバー TLS 証明書

ECC 証明書の検証 (ECC のみの暗号スイートを使用) を使用すると、RSA 証明書と同様のセキュリティが提供されると同時に、コンピューティング、メモリ、および帯域幅の使用が最大 40% 削減されます。 このような削減は、IoT デバイスにとって重要です。そのプロファイルおよびメモリのサイズが小さくなるためであり、ネットワーク帯域幅が制限された環境でのユース ケースに対応することができます。

IoT Hub の ECC サーバー証明書を使用するには、次の手順を実行します。

  1. すべてのデバイスで、次のルート CA が信頼されていることを確認します。
    • DigiCert Global G2 ルート CA
    • Microsoft RSA ルート CA 2017
  2. ECDSA の暗号スイート "のみ" を含め、RSA のものについてはいずれも "除外" するように、クライアントを構成してください。 ECC 証明書でサポートされている暗号スイートは、次のとおりです。
    • TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
    • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
    • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  3. クライアントを IoT Hub に接続します。

TLS 最大フラグメント長ネゴシエーション

IoT Hub では、TLS 最大フラグメント長ネゴシエーションもサポートされています。これは、TLS フレーム サイズ ネゴシエーションと呼ばれることもあります。 この機能はパブリック プレビュー段階にあります。

この機能を使用すると、プレーンテキストの最大フラグメント長を、既定の 2^14 バイトより小さい値に指定できます。 ネゴシエートされると、IoT Hub とクライアントによってメッセージのフラグメント化が開始され、すべてのフラグメントがネゴシエートされた長さよりも確実に小さくなります。 この動作は、コンピューティングまたはメモリに制約があるデバイスに役立ちます。 詳細については、公式の TLS 拡張機能仕様を参照してください。

このパブリック プレビュー機能の公式 SDK サポートはまだ利用できません。 作業を開始するには

  1. IoT Hub を作成します。
  2. OpenSSL を使用する場合は、SSL_CTX_set_tlsext_max_fragment_length を呼び出して、フラグメントのサイズを指定します。
  3. クライアントを IoT Hub に接続します。

証明書のピン留め

IoT Hub エンドポイントに関連付けられた TLS サーバー証明書および中間証明書は、Microsoft がほとんどまたはまったく予告なしに頻繁に切り替えるため、これらの証明書のピン留めやフィルター処理を行わないことを強くお勧めします。 必要な場合は、この Azure IoT ブログ記事の説明に従ってルート証明書のみをピン留めしてください。

次のステップ