Transport Layer Security (TLS) support 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 versies 1.0, 1.1 en 1.2.

TLS 1.0 en 1.1 worden beschouwd als verouderd en worden gepland voor afschaffing. Zie Voor meer informatie TLS 1.0 en 1.1afvangen voor IoT Hub. Als u toekomstige problemen wilt voorkomen, gebruikt u TLS 1.2 als de enige TLS-versie wanneer u verbinding maakt met IoT Hub.

IoT Hub server-TLS-certificaat

Tijdens een TLS-handshake geeft IoT Hub servercertificaten met RSA-sleutel aan om clients te verbinden. De hoofdmap is de Baltimore Cybertrust Root CA. Onlangs hebben we een wijziging in ons TLS-servercertificaat uitgerold, zodat het nu wordt uitgegeven door nieuwe tussenliggende certificeringsinstanties (ICA). Zie TLS-certificaatupdate IoT Hub meer informatie.

TLS-certificaat voor ecc-server (Elliptic Curve Cryptography) (preview)

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

Een voorbeeld van IoT Hub ECC-servercertificaat bekijken:

  1. Maak een nieuwe IoT-hub met preview-modus op.
  2. Configureer uw client zodanig dat alleen ECDSA-coderingssuites worden gebruikt en sluit eventuele RSA-suites uit. 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 client naar de preview-IoT-hub.

Afdwinging van TLS 1.2 is beschikbaar in bepaalde regio's

Configureer voor extra beveiliging uw IoT Hubs zodanig dat alleen clientverbindingen worden toegestaan die gebruikmaken van TLS-versie 1.2 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
  • US Gov - Virginia (TLS 1.0/1.1-ondersteuning is niet beschikbaar in deze regio- TLS 1.2 afdwingen moet zijn ingeschakeld of het maken van een IoT-hub mislukt)

Als u TLS 1.2-afdwinging wilt inschakelen, volgt u de stappen in IoT-hubmaken in Azure Portal , behalve

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

  • Selecteer onder Management -> Advanced -> Transport Layer Security (TLS) -> Minimum TLS version de optie 1.2. Deze instelling wordt alleen weergegeven voor IoT-hub die is gemaakt in de ondersteunde regio.

    Schermopname die laat zien hoe U TLS 1.2-afdwinging in kunt zetten tijdens het maken van de IoT-hub

Als u een ARM-sjabloon wilt gebruiken voor het maken, moet IoT Hub in een van de ondersteunde regio's inrichten en de eigenschap minTlsVersion instellen op in de 1.2 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 met behulp van deze configuratie weigert apparaat- en service-clients die verbinding proberen te maken met behulp van TLS-versies 1.0 en 1.1. Op dezelfde manier wordt de TLS-handshake geweigerd als in het bericht geen van ClientHello de aanbevolen coderingen wordt vermeld.

Notitie

De minTlsVersion eigenschap is alleen-lezen en kan niet worden gewijzigd nadat IoT Hub resource is gemaakt. Het is daarom essentieel dat u op de juiste manier test en valideert dat al uw IoT-apparaten en -services vooraf compatibel zijn met TLS 1.2 en de aanbevolen coderingen.

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

Coderingssuites

IoT Hubs die zijn geconfigureerd om alleen TLS 1.2 te accepteren, dwingen 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 TLS 1.2-afdwinging, 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 moeten worden ClientHello gebruikt. Sommige hiervan worden echter mogelijk niet ondersteund door IoT Hub (bijvoorbeeld ECDHE-ECDSA-AES256-GCM-SHA384 ). In dit geval probeert IoT Hub de voorkeur van de client te volgen, maar uiteindelijk onderhandelt u 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 nieuwer Koppeling
Java Versie 1.19.0 of hoger Koppeling
Node.js Versie 1.12.2 of nieuwer Koppeling

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

Apparaatverificatie

Na een geslaagde TLS-handshake kan IoT Hub 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 certificaat wordt gevalideerd op de vingerafdruk of certificeringsinstantie (CA) die u op geeft. Zie Ondersteunde X.509-certificaten voor meer informatie.

TLS-onderhandeling voor maximale fragmentlengte (preview)

IoT Hub ondersteunt ook TLS-onderhandeling met maximale fragmentlengte, ook wel bekend als TLS-framegrootteonderhandeling. Deze functie is beschikbaar voor openbare preview.

Gebruik deze functie om de maximale fragmentlengte voor tekst zonder tekst op te geven tot een waarde die kleiner is dan de standaardwaarde 2^14 bytes. Na de onderhandeling beginnen IoT Hub en de client berichten te fragmenteren om ervoor te zorgen dat alle fragmenten kleiner zijn dan de overeengekomen lengte. Dit gedrag is handig voor compute- of geheugen-beperkte apparaten. Zie de officiële specificaties van de TLS-extensie 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 preview-modus op.
  2. Wanneer u OpenSSL gebruikt, roept u SSL_CTX_set_tlsext_max_fragment_length om de fragmentgrootte op te geven.
  3. Verbinding maken client naar de preview-versie IoT Hub.

Volgende stappen