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
Während eines TLS-Handshakes präsentiert IoT Hub RSA-schlüsselgebundene Serverzertifikate zum Verbinden von Clients. Alle IoT-Hubs in der globalen Azure-Cloud verwenden das TLS-Zertifikat, das vom DigiCert Global Root G2 ausgestellt wird.
Außerdem wird empfohlen, die Zertifikate der Microsoft-RSA-Stammzertifizierungsstelle 2017 zu Ihren Geräten hinzuzufügen, um Unterbrechungen zu verhindern, falls das DigiCert Global Root G2 unerwartet eingestellt wird. Obwohl Migrationen von Stammzertifizierungsstellen 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 notfallbedingte Migration der Stammzertifizierungsstelle erforderlich ist.
Es wird dringend empfohlen, dass alle Geräte den folgenden Stamm-ZS vertrauen:
- DigiCert Global G2
- Microsoft RSA 2017
Links zum Herunterladen dieser Zertifikate finden Sie unter Details zur Azure-Zertifizierungsstelle.
Zertifikatsvertrauen in den SDKs
Die Azure IoT-Geräte-SDKs verbinden und authentifizieren Geräte mit Azure IoT-Diensten. Die verschiedenen SDKs verwalten Zertifikate je nach Sprache und Version unterschiedlich, verlassen sich jedoch am meisten auf den vertrauenswürdigen Zertifikatspeicher des Geräts, anstatt Zertifikate direkt in der Codebasis anheften zu müssen. Dieser Ansatz bietet Flexibilität und Resilienz zur Behandlung zukünftiger Änderungen in Stammzertifikaten.
In der folgenden Tabelle wird zusammengefasst, welche SDK-Versionen den vertrauenswürdigen Zertifikatspeicher unterstützen:
Azure IoT-Geräte-SDK | Unterstützte Versionen |
---|---|
K | Alle derzeit unterstützten Versionen |
C# | Alle derzeit unterstützten Versionen |
Java | Version 2.x.x und höher |
Node.js | Alle derzeit unterstützten Versionen |
Python | Alle derzeit unterstützten Versionen |
Anheften von Zertifikaten
Vom Anheften von Zertifikaten sowie vom Filtern der TLS-Serverzertifikate (auch als Blattzertifikate bezeichnet) und Zwischenzertifikate, die mit IoT Hub-Endpunkten verknüpft sind, wird abgeraten, da Microsoft diese Zertifikate ohne oder mit nur geringer Vorankündigung ändert. Wenn Sie müssen, heften Sie nur die Stammzertifikate an.
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 Stammzertifizierungsstellen vertrauen:
- DigiCert Global G3
- Microsoft RSA 2017
Links zum Herunterladen dieser Zertifikate finden Sie unter Details zur Azure-Zertifizierungsstelle.
So können Sie die Vorschau des ECC-Serverzertifikats für IoT Hub anzeigen:
- Erstellen Sie einen neuen IoT-Hub mit aktiviertem Vorschaumodus.
- 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
- 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, folgen Sie den Schritten in Erstellen von IoT-Hubs im Azure-Portal, außer
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.
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, lehnt Geräte- und Dienstclients ab, 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 keines der empfohlenen Verschlüsselungsverfahren 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 Sammlungen an empfohlenen Verschlüsselungsverfahren:
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 1.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 Sammlung an Verschlüsselungsverfahren 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üsselungsverfahren 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.
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
- Erstellen Sie einen neuen IoT-Hub mit aktiviertem Vorschaumodus.
- Wenn Sie OpenSSL verwenden, rufen Sie SSL_CTX_set_tlsext_max_fragment_length auf, um die Fragmentgröße anzugeben.
- Verbinden Sie Ihren Client mit dem Vorschau-IoT Hub.
Nächste Schritte
- Weitere Informationen zur IoT Hub-Sicherheit und -Zugriffssteuerung finden Sie unter Steuern des Zugriffs auf IoT Hub.
- Weitere Informationen zum Verwenden des X.509-Zertifikats für die Geräteauthentifizierung finden Sie unter Geräteauthentifizierung mit X.509-ZS-Zertifikaten.