Transport Layer Security (TLS)-Unterstützung in IoT Hub

IoT Hub verwendet Transport Layer Security (TLS) zum Sichern von Verbindungen mit IoT-Geräten und -Diensten. Derzeit werden drei Versionen des TLS-Protokolls unterstützt, nämlich die Versionen 1.0, 1.1 und 1.2.

TLS 1.0 und 1.1 werden als Legacy betrachtet und in Kürze eingestellt. Weitere Informationen finden Sie unter Deprecating TLS 1.0 and 1.1 for IoT Hub (Einstellung von TLS 1.0 and 1.1 für IoT Hub). Verwenden Sie zur Vermeidung zukünftiger Probleme TLS 1.2 als einzige TLS-Version, wenn Sie eine Verbindung mit IoT Hub herstellen.

TLS-Zertifikat des IoT Hub-Servers

Bei einem TLS-Handshake stellt IoT Hub RSA-Keyed-Serverzertifikate für die Verbindung von Clients bereit. In der Vergangenheit waren die Zertifikate alle von der Baltimore Cybertrust Root CA verwurzelt. Da die Baltimore-Wurzel am Ende der Lebensdauer liegt, sind wir dabei, zu einem neuen Stamm namens DigiCert Global G2 zu migrieren. Diese Migration wirkt sich auf alle Geräte aus, die derzeit mit IoT Hub verbunden sind. Weitere Informationen finden Sie unter IoT TLS-Zertifikataktualisierung.

Obwohl Stammzertifizierungsstellenmigrationen selten sind, sollten Sie für resilienz in der modernen Sicherheitslandschaft Ihr IoT-Szenario für das unwahrscheinliche Ereignis vorbereiten, dass eine Stammzertifizierungsstelle kompromittiert ist oder eine Migration der Notfallstammzertifizierungsstelle erforderlich ist. Es wird dringend empfohlen, dass alle Geräte den folgenden drei Stamm-CAs vertrauen:

  • Baltimore CyberTrust-Stammzertifizierungsstelle
  • DigiCert Global G2-Stammzertifizierungsstelle
  • Microsoft RSA-Stammzertifizierungsstelle 2017

Links zum Herunterladen dieser Zertifikate finden Sie unter Azure Certificate Authority Details.

TLS-Zertifikat von ECC-Server (Elliptic Curve Cryptography) (Vorschau)

Das TLS-Zertifikat von ECC-Server für IoT Hub steht für die öffentliche Vorschau zur Verfügung. Während die ECC-Zertifikatüberprüfung (mit Nur-ECC-Verschlüsselungssammlungen) eine ähnliche Sicherheit für RSA-Zertifikate bietet, nutzt sie bis zu 40 % weniger Compute, Arbeitsspeicher und Bandbreite. Diese Einsparungen sind wichtig für IoT-Geräte aufgrund ihrer kleineren Profile und des kleineren Arbeitsspeichers und zur Unterstützung von Anwendungsfällen in Umgebungen mit eingeschränkter Netzwerkbandbreite.

Es wird dringend empfohlen, dass alle Geräte, die ECC verwenden, den folgenden beiden Stamm-CAs vertrauen:

  • DigiCert Global G3 root CA
  • Microsoft RSA-Stammzertifizierungsstelle 2017

Links zum Herunterladen dieser Zertifikate finden Sie unter Azure Certificate Authority Details.

So können Sie die Vorschau des ECC-Serverzertifikats für IoT Hub anzeigen:

  1. Erstellen Sie einen neuen IoT-Hub mit aktiviertem Vorschaumodus.
  2. Konfigurieren Sie Ihren Client so, dass er nur ECDSA-Verschlüsselungssammlungen enthält und RSA-Verschlüsselungssammlungen ausschließt. Dies sind die unterstützten Verschlüsselungssammlungen für die öffentliche VORSCHAU des ECC-Zertifikats:
    • 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. Verbinden Sie Ihren Client mit dem Vorschau-IoT Hub.

Erzwingen von TLS 1.2 in ausgewählten Regionen verfügbar

Wenn Sie die Sicherheit erhöhen möchten, konfigurieren Sie Ihre IoT Hubs so, dass nur Clientverbindungen zugelassen werden, die TLS-Version 1.2 verwenden, und dass die Verwendung von Verschlüsselungssammlungen erzwungen wird. Diese Funktion wird nur in diesen Regionen unterstützt:

  • East US
  • USA Süd Mitte
  • USA, Westen 2
  • US Gov Arizona
  • US Gov Virginia (Unterstützung für TLS 1.0/1.1 ist in dieser Region nicht verfügbar. TLS 1.2-Erzwingung muss aktiviert werden, sonst führt die Erstellung des IoT-Hubs zu einem Fehler)

Um die TLS 1.2-Erzwingung zu aktivieren, führen Sie die Schritte in Erstellen von IoT-Hubs im Azure-Portal mit den folgenden Ausnahmen aus:

  • Wählen Sie eine Region in der in der obigen Liste aus.

  • Wählen Sie unter Verwaltung > Erweitert > Transport Layer Security (TLS) > TLS-Mindestversion die Option 1.2 aus. Diese Einstellung wird nur bei IoT-Hubs angezeigt, die in einer unterstützten Region erstellt wurden.

    Screenshot showing how to turn on TLS 1.2 enforcement during IoT hub creation

Stellen Sie für die Verwendung einer ARM-Vorlage für die Erstellung einen neuen IoT-Hub in einer der unterstützten Regionen bereit, und legen Sie die minTlsVersion-Eigenschaft in der Ressourcenspezifikation auf 1.2 fest:

{
    "$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
            }
        }
    ]
}

Die erstellte IoT Hub-Ressource, die diese Konfiguration verwendet, wird Geräte- und Dienstclients ablehnen, die versuchen, eine Verbindung mit den TLS-Versionen 1.0 und 1.1 herzustellen. Analog dazu wird der TLS-Handshake abgelehnt, wenn die ClientHello-Nachricht keine der empfohlenen Verschlüsselungen enthält.

Hinweis

Die Eigenschaft minTlsVersion ist schreibgeschützt und kann nach Erstellung Ihrer IoT Hub-Ressource nicht mehr geändert werden. Daher ist es von entscheidender Bedeutung, dass Sie im Voraus ordnungsgemäß testen und überprüfen, ob alle Ihre IoT-Geräte und -Dienste mit TLS 1.2 und den empfohlenen Verschlüsselungen kompatibel sind.

Nach einem Failover bleibt die Eigenschaft minTlsVersion Ihres IoT Hubs in der geografisch gekoppelten Region wirksam.

Verschlüsselungssammlungen

IoT Hubs, die so konfiguriert wurden, dass nur TLS 1.2 akzeptiert wird, erzwingen auch die Verwendung der folgenden empfohlenen Verschlüsselungssammlungen:

  • 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

Bei IoT Hubs, die nicht zum Erzwingen von TLS 1.2 konfiguriert wurden, funktioniert TLS 1.2 weiterhin bei den folgenden Verschlüsselungssammlungen:

  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • 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_256_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_3DES_EDE_CBC_SHA(Dieses Verschlüsselungsverfahren ist ab dem 01.10.2022 veraltet und wird nicht mehr für TLS-Handshakes verwendet.)

Ein Client kann eine Liste von höheren Verschlüsselungssammlungen vorschlagen, die während ClientHello verwendet werden sollen. Einige davon werden jedoch möglicherweise nicht von IoT Hub unterstützt (z. B. ECDHE-ECDSA-AES256-GCM-SHA384). In diesem Fall versucht IoT Hub, die bevorzugte Einstellung des Clients einzuhalten, aber die Verschlüsselungssammlung letztendlich mit ServerHello auszuhandeln.

TLS-Konfiguration für SDK und IoT Edge

Verwenden Sie die nachstehenden Links zum Konfigurieren von TLS 1.2 und zulässigen Verschlüsselungen in IoT Hub-Client-SDKs.

Sprache Versionen mit Unterstützung von TLS 1.2 Dokumentation
C Tag 2019-12-11 oder höher Link
Python Version 2.0.0 oder höher Link
C# Version 1.21.4 oder höher Link
Java Version 1.19.0 oder höher Link
NodeJS Version 1.12.2 oder höher Link

IoT Edge-Geräte können für die Verwendung von TLS 1.2 bei der Kommunikation mit IoT Hub konfiguriert werden. Verwenden Sie dazu die IoT Edge Dokumentationsseite.

Geräte-Authentifizierung

Nach einem erfolgreichen TLS-Handshake kann IoT Hub ein Gerät mithilfe eines symmetrischen Schlüssels oder eines X.509-Zertifikats authentifizieren. Bei der zertifikatbasierten Authentifizierung kann dies ein beliebiges X.509-Zertifikat sein, einschließlich ECC. IoT Hub überprüft das Zertifikat mit dem Fingerabdruck oder der Zertifizierungsstelle (Certificate Authority, CA), den bzw. die Sie bereitstellen. Weitere Informationen finden Sie unter Unterstützte X.509-Zertifikate.

Gegenseitige TLS-Unterstützung

Die gegenseitige TLS-Authentifizierung stellt sicher, dass der Client das Server (IoT Hub)-Zertifikat authentifiziert und der Server (IoT Hub) das X.509-Clientzertifikat oder den X.509-Fingerabdruckauthentifiziert. Die Autorisierung wird von IoT Hub nach Abschluss der Authentifizierung durchgeführt.

Für AMQP- und MQTT-Protokolle fordert IoT Hub beim ersten TLS-Handshake ein Clientzertifikat an. Wird eins bereitgestellt, authentifiziert IoT Hub das Clientzertifikat, und der Client authentifiziert das IoT Hub-Zertifikat. Dieser Prozess wird als gegenseitige TLS-Authentifizierung bezeichnet. Wenn IoT Hub ein MQTT-Verbindungspaket empfängt oder wenn ein AMQP-Link geöffnet wird, führt IoT Hub die Autorisierung für den anfordernden Client durch und ermittelt, ob der Client die X.509-Authentifizierung erfordert. Wenn die gegenseitige TLS-Authentifizierung abgeschlossen wurde und der Client zum Herstellen einer Verbindung als Gerät autorisiert ist, ist dies zulässig. Wenn der Client jedoch die X.509-Authentifizierung erfordert und die Clientauthentifizierung während des TLS-Handshake nicht abgeschlossen wurde, lehnt IoT Hub die Verbindung ab.

Beim HTTP-Protokoll überprüft IoT Hub bei der ersten Anforderung des Clients, ob der Client die X.509-Authentifizierung erfordert und ob die Clientauthentifizierung abgeschlossen ist. Anschließend führt IoT Hub die Autorisierung durch. Wenn die Clientauthentifizierung nicht abgeschlossen wurde, lehnt IoT Hub die Verbindung ab.

Anheften von Zertifikaten

Vom Anheften von Zertifikaten sowie vom Filtern der TLS-Serverzertifikate (Blattzertifikate) und Zwischenzertifikate, die mit IoT Hub-Endpunkten verknüpft sind, wird dringend abgeraten, da Microsoft diese Zertifikate ohne oder mit nur geringer Vorankündigung ändert. Falls erforderlich, heften Sie nur die Stammzertifikate wie in diesem Azure IoT-Blogbeitrag beschrieben an.

Aushandlung der maximalen TLS-Fragmentlänge (Vorschau)

IoT Hub unterstützt auch die Aushandlung der maximalen TLS-Fragmentlänge, die manchmal als „Aushandlung der TLS-Framegröße“ bezeichnet wird. Dieses Feature befindet sich in der Phase der öffentlichen Vorschau.

Mithilfe dieses Features können Sie für die maximale Fragmentlänge des Klartexts einen Wert angeben, der kleiner als der Standardwert von „2^14 Bytes“ ist. Nach dem Aushandeln beginnen IoT Hub und der Client mit der Fragmentierung von Nachrichten, um sicherzustellen, dass alle Fragmente kleiner als die ausgehandelte Länge sind. Dieses Verhalten ist hilfreich für die Berechnung oder den Speicher eingeschränkter Geräte. Weitere Informationen finden Sie in der offiziellen TLS-Erweiterungsspezifikation.

Die offizielle SDK-Unterstützung für dieses Feature der öffentlichen Vorschau steht noch nicht zur Verfügung. Einführung

  1. Erstellen Sie einen neuen IoT-Hub mit aktiviertem Vorschaumodus.
  2. Wenn Sie OpenSSL verwenden, rufen Sie SSL_CTX_set_tlsext_max_fragment_length auf, um die Fragmentgröße anzugeben.
  3. Verbinden Sie Ihren Client mit dem Vorschau-IoT Hub.

Nächste Schritte