Tls-ondersteuning (Transport Layer Security) in IoT Hub

IoT Hub gebruikt Transport Layer Security (TLS) om verbindingen van IoT-apparaten en -services te beveiligen. Momenteel worden drie versies van het TLS-protocol ondersteund, namelijk versie 1.0, 1.1 en 1.2.

TLS 1.0 en 1.1 worden beschouwd als verouderd en zijn gepland voor afschaffing. Zie TLS 1.0 en 1.1 voor IoT Hub voor meer informatie. Gebruik TLS 1.2 als enige TLS-versie wanneer u verbinding maakt met IoT Hub om toekomstige problemen te voorkomen.

TLS-certificaat van de server van IoT Hub

Tijdens een TLS-handshake geeft IoT Hub RSA-servercertificaten weer om clients te verbinden. De hoofdmap is de Baltimore Cybertrust Root CA. Omdat de Baltimore-hoofdmap aan het einde van het leven is, migreren we naar een nieuwe hoofdmap met de naam DigiCert Global G2. Deze wijziging heeft invloed op alle apparaten die momenteel verbinding maken met IoT Hub. Als u zich wilt voorbereiden op deze migratie en voor alle andere details, raadpleegt u de update van het IoT TLS-certificaat.

ELLIPTIC Curve Cryptography-server (ECC) TLS-certificaat (preview)

IoT Hub TLS-certificaat van ECC-server is beschikbaar voor openbare preview. Hoewel het biedt vergelijkbare beveiliging als RSA-certificaten, gebruikt ECC-certificaatvalidatie (met alleen ECC-coderingssuites) tot 40% minder rekenkracht, geheugen en bandbreedte. Deze besparingen zijn belangrijk voor IoT-apparaten vanwege hun kleinere profielen en geheugen en ter ondersteuning van use cases in beperkte omgevingen met netwerkbandbreedte. De hoofdmap van het ECC-servercertificaat is DigiCert Global Root G3.

Ga als volgt te werk om een voorbeeld te bekijken van het ECC-servercertificaat van IoT Hub:

  1. Maak een nieuwe IoT-hub met de preview-modus aan.
  2. Configureer uw client zodanig dat alleen ECDSA-coderingssuites worden opgenomen en eventuele RSA-suites worden uitgesloten . Dit zijn de ondersteunde coderingssuites voor de openbare preview van het ECC-certificaat:
    • 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. Verbinding maken uw client naar de preview-IoT-hub.

TLS 1.2-afdwinging beschikbaar in bepaalde regio's

Voor extra beveiliging configureert u uw IoT Hubs zodat alleen clientverbindingen met TLS-versie 1.2 zijn toegestaan en om het gebruik van coderingssuites af te dwingen. Deze functie wordt alleen ondersteund in deze regio's:

  • VS - oost
  • VS - zuid-centraal
  • VS - west 2
  • VS (overheid) - Arizona
  • Ondersteuning voor US Gov Virginia (TLS 1.0/1.1-ondersteuning is niet beschikbaar in deze regio- TLS 1.2-afdwinging moet zijn ingeschakeld of het maken van IoT-hub mislukt)

Als u TLS 1.2-afdwinging wilt inschakelen, volgt u de stappen in IoT-hub maken in Azure Portal, met uitzondering van

  • Kies een regio uit een regio in de bovenstaande lijst.

  • Selecteer onder Beheer -> Geavanceerd -> Transport Layer Security (TLS) -> Minimale TLS-versie1.2. Deze instelling wordt alleen weergegeven voor IoT Hub die is gemaakt in de ondersteunde regio.

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

Als u een ARM-sjabloon wilt gebruiken voor het maken, richt u een nieuwe IoT Hub in een van de ondersteunde regio's in en stelt u de minTlsVersion eigenschap 1.2 in op in de resourcespecificatie:

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

De gemaakte IoT Hub-resource die deze configuratie gebruikt, weigert apparaat- en serviceclients die verbinding proberen te maken met TLS-versies 1.0 en 1.1. Op dezelfde manier wordt de TLS-handshake geweigerd als het ClientHello bericht geen van de aanbevolen coderingen vermeldt.

Notitie

De minTlsVersion eigenschap heeft het kenmerk Alleen-lezen en kan niet worden gewijzigd zodra uw IoT Hub resource is gemaakt. Daarom is het essentieel dat u uw IoT-apparaten en -services goed test en valideert dat deze compatibel zijn met TLS 1.2 en de aanbevolen coderingen vooraf.

Na failovers blijft de minTlsVersion eigenschap van uw IoT Hub effectief in de geografisch gekoppelde regio na failover.

Coderingssuites

IoT Hubs die zijn geconfigureerd om alleen TLS 1.2 te accepteren, dwingt ook het gebruik van de volgende aanbevolen coderingssuites af:

  • 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

Voor IoT Hubs die niet zijn geconfigureerd voor AFdwinging van TLS 1.2, werkt TLS 1.2 nog steeds met de volgende coderingssuites:

  • 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

Een client kan een lijst met hogere coderingssuites voorstellen die tijdens ClientHellohet gebruik moeten worden gebruikt. Sommige hiervan worden echter mogelijk niet ondersteund door IoT Hub (bijvoorbeeldECDHE-ECDSA-AES256-GCM-SHA384). In dit geval zal IoT Hub proberen de voorkeur van de client te volgen, maar uiteindelijk onderhandelen over de coderingssuite met ServerHello.

TLS-configuratie voor SDK en IoT Edge

Gebruik de onderstaande koppelingen om TLS 1.2 en toegestane coderingen te configureren in IoT Hub client-SDK's.

Taal Versies die TLS 1.2 ondersteunen Documentatie
C Tag 2019-12-11 of hoger Koppeling
Python Versie 2.0.0 of hoger Koppeling
C# Versie 1.21.4 of hoger Koppeling
Java Versie 1.19.0 of hoger Koppeling
Node.js Versie 1.12.2 of hoger Koppeling

IoT Edge apparaten kunnen worden geconfigureerd voor het gebruik van TLS 1.2 tijdens de communicatie met IoT Hub. Gebruik hiervoor de IoT Edge documentatiepagina.

Apparaatverificatie

Na een geslaagde TLS-handshake kan IoT Hub een apparaat verifiëren met behulp van een symmetrische sleutel of een X.509-certificaat. Voor verificatie op basis van certificaten kan dit elk X.509-certificaat zijn, inclusief ECC. IoT Hub valideert het certificaat met de vingerafdruk of certificeringsinstantie (CA) die u opgeeft. Zie Ondersteunde X.509-certificaten voor meer informatie.

Tls maximale fragmentlengteonderhandeling (preview)

IoT Hub biedt ook ondersteuning voor de onderhandeling over maximale fragmentlengte van TLS, ook wel tls-framegrootteonderhandeling genoemd. Deze functie is beschikbaar voor openbare preview.

Gebruik deze functie om de maximale lengte van tekst zonder tekstfragment op te geven tot een waarde die kleiner is dan de standaardwaarde 2^14 bytes. Zodra er is onderhandeld, beginnen IoT Hub en de client berichten te fragmenteren om ervoor te zorgen dat alle fragmenten kleiner zijn dan de onderhandelde lengte. Dit gedrag is handig voor het berekenen of geheugenbeperkingen van apparaten. Zie de officiële tls-extensiespecificatie voor meer informatie.

Officiële SDK-ondersteuning voor deze openbare preview-functie is nog niet beschikbaar. Aan de slag

  1. Maak een nieuwe IoT-hub met de preview-modus aan.
  2. Wanneer u OpenSSL gebruikt, roept u SSL_CTX_set_tlsext_max_fragment_length aan om de fragmentgrootte op te geven.
  3. Verbinding maken uw client naar de preview-IoT Hub.

Volgende stappen