Tls-ondersteuning (Transport Layer Security) in IoT Hub
IoT Hub maakt gebruik van Transport Layer Security (TLS) om verbindingen van IoT-apparaten en -services te beveiligen.
Notitie
Azure IoT Hub beëindigt de ondersteuning voor TLS 1.0 en 1.1 in overeenstemming met de aankondiging van de Azure-service voor tls 1.0 en 1.1 buiten gebruik op 31 augustus 2025.
Het is daarom essentieel dat u uw IoT-apparaten en -services goed test en valideert dat ze compatibel zijn met TLS 1.2 en de aanbevolen coderingen van tevoren. Het wordt ten zeerste aanbevolen om de minimale TLS-afdwingingsfunctie te gebruiken als het mechanisme voor testen en naleving
Als u wilt weten welke versie van TLS uw IoT Hub-apparaten worden uitgevoerd, raadpleegt u tls 1.0 en 1.1 einde van de ondersteuningshandleiding.
Wederzijdse TLS-ondersteuning
Wederzijdse TLS-verificatie zorgt ervoor dat de client het servercertificaat (IoT Hub) verifieert en de server (IoT Hub) de client verifieert met behulp van X.509-clientcertificaat of X.509-vingerafdruk. IoT Hub voert autorisatie uit nadat de verificatie is voltooid.
Voor de protocollen Advanced Message Queuing Protocol (AMQP) en Message Queuing Telemetry Transport (MQTT) vraagt IoT Hub een clientcertificaat aan in de eerste TLS-handshake. Als er een is opgegeven, verifieert IoT Hub het clientcertificaat en verifieert de client het IoT Hub-certificaat. Dit proces wordt wederzijdse TLS-verificatie genoemd. Wanneer IoT Hub een MQTT-verbindingspakket ontvangt of een AMQP-koppeling wordt geopend, voert IoT Hub autorisatie uit voor de aanvragende client en bepaalt of de client X.509-verificatie vereist. Als wederzijdse TLS-verificatie is voltooid en de client gemachtigd is om verbinding te maken als het apparaat, is dit toegestaan. Als de client echter X.509-verificatie vereist en clientverificatie niet is voltooid tijdens de TLS-handshake, weigert IoT Hub de verbinding.
Wanneer de client voor het eerst een aanvraag indient, controleert IoT Hub bij HTTP-protocol of voor de client X.509-verificatie is vereist en of clientverificatie is voltooid, dan voert IoT Hub autorisatie uit. Als clientverificatie niet is voltooid, weigert IoT Hub de verbinding
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 valideert IoT Hub het certificaat op basis van de vingerafdruk of certificeringsinstantie (CA) die u opgeeft. Zie Ondersteunde X.509-certificaten voor meer informatie.
TLS-certificaat van ioT Hub-server
Tijdens een TLS-handshake presenteert IoT Hub RSA-servercertificaten om clients te verbinden. Alle IoT-hubs in de globale Azure-cloud gebruiken het TLS-certificaat dat is uitgegeven door de Global Root G2 van DigiCert.
We raden u ten zeerste aan dat alle apparaten de volgende drie basis-CA's vertrouwen:
- DigiCert Global G2-basis-CA
- Microsoft RSA root CA 2017
Zie de details van de Azure-certificeringsinstantie voor koppelingen om deze certificaten te downloaden.
Basis-CA-migraties zijn zeldzaam. U moet uw IoT-oplossing altijd voorbereiden op het onwaarschijnlijke geval dat een basis-CA is aangetast en dat er een nood-CA-migratie nodig is.
Suites met coderingsmethoden
IoT Hub ondersteunt de volgende RSA- en ECDSA-coderingssuites voor TLS 1.2 om te voldoen aan het Azure-beveiligingsbeleid voor een beveiligde verbinding:
- 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
De volgende coderingssuites zijn momenteel toegestaan in IoT Hub. Deze coderingssuites worden echter niet meer aanbevolen door de Azure-beveiligingsrichtlijnen.
Suites met coderingsmethoden | Ondersteuning voor TLS-versie |
---|---|
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | TLS 1.2 |
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 | TLS 1.2 |
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_256_GCM_SHA384 | TLS 1.2 |
TLS_RSA_WITH_AES_128_GCM_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA256 | TLS 1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA256 | TLS 1.2 |
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_AES_128_CBC_SHA | TLS 1.0/1.1/1.2 |
TLS_RSA_WITH_AES_256_CBC_SHA | TLS 1.0/1.1/1.2 |
Een client kan een lijst met hogere coderingssuites voorstellen die tijdens ClientHello
het gebruik moeten worden 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 te onderhandelen over de coderingssuite met ServerHello
.
IoT Hub afdwingen voor het gebruik van TLS 1.2 en sterke coderingssuites
Om ervoor te zorgen dat uw IoT-apparaten TLS 1.2 en naleving van sterke coderingssuites zijn, kunt u naleving afdwingen met behulp van minimale TLS-afdwingingsfunctie in Azure IoT Hub.
Deze functie is momenteel alleen beschikbaar in de volgende regio's en tijdens het maken van IoT Hub (andere Azure-regio's worden in 2025 ondersteund):
- VS - oost
- VS - zuid-centraal
- VS - west 2
- US Gov - Arizona
- 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-hubs mislukt)
Tls 1.2 en sterke coderingssuites afdwingen in Azure Portal:
Staring with the IoT Hub create wizard in Azure Portal
Kies een regio in de bovenstaande lijst.
Selecteer onder Beheer -> Geavanceerd -> Transport Layer Security (TLS) -> Minimale TLS-versie 1.2. Deze instelling wordt alleen weergegeven voor De IoT-hub die is gemaakt in de ondersteunde regio.
Klik op Maken
Uw IoT-apparaten verbinden met deze IoT Hub
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 met deze configuratie 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 in het ClientHello
bericht geen van de aanbevolen coderingen wordt vermeld.
Notitie
De minTlsVersion
eigenschap heeft het kenmerk Alleen-lezen en kan niet worden gewijzigd zodra uw IoT Hub-resource is gemaakt. Het is daarom essentieel dat u uw IoT-apparaten en -services goed test en valideert dat ze compatibel zijn met TLS 1.2 en de aanbevolen coderingen van tevoren.
Na failovers blijft de minTlsVersion
eigenschap van uw IoT Hub effectief in de geografisch gekoppelde regio na een failover.
TLS-versies controleren op IoT Hub-apparaten
Azure IoT Hub kan diagnostische logboeken bieden voor verschillende categorieën die kunnen worden geanalyseerd met behulp van Azure Monitor-logboeken. In het logboek met verbindingen vindt u de TLS-versie voor uw IoT Hub-apparaten.
Volg deze stappen om deze logboeken weer te geven:
- Ga in Azure Portal naar uw IoT-hub.
- Selecteer diagnostische instellingen in het resourcemenu onder Bewaking. Zorg ervoor dat diagnostische instellingen 'Verbindingen' zijn ingeschakeld.
- Selecteer Logboeken in het resourcemenu onder Bewaking.
- Voer de volgende query in:
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
- Een voorbeeld van de queryresultaten ziet er als volgt uit:
- Opmerking: TLS-versiequery is niet beschikbaar voor apparaten die HTTPS-verbindingen gebruiken.
TLS-configuratie voor SDK en IoT Edge
Gebruik de volgende koppelingen om TLS 1.2 en toegestane coderingen te configureren in SDK's van de IoT Hub-client.
Taal | Versies die TLS 1.2 ondersteunen | Documentatie |
---|---|---|
E | 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 |
NodeJS | 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 documentatiepagina van IoT Edge.
TLS-certificaat voor Elliptic Curve Cryptography (ECC)-server
Ecc-certificaatvalidatie (met alleen ECC-coderingssuites) biedt een vergelijkbare beveiliging als RSA-certificaten en maakt gebruik van maximaal 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.
Het ECC-servercertificaat van IoT Hub gebruiken:
- Zorg ervoor dat alle apparaten de volgende basis-CA's vertrouwen:
- DigiCert Global G2-basis-CA
- Microsoft RSA root CA 2017
- Configureer uw client om alleen ECDSA-coderingssuites op te nemen en RSA-suites uit te sluiten. Dit zijn de ondersteunde coderingssuites voor 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
- Verbind uw client met de IoT-hub.
Tls-maximale onderhandelingen over lengte van fragmenten
IoT Hub ondersteunt ook onderhandeling over maximale fragmentlengte van TLS, ook wel onderhandelingen over DE TLS-framegrootte genoemd. Deze functie is beschikbaar voor openbare preview.
Gebruik deze functie om de maximale lengte van tekstfragmenten zonder opmaak 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 apparaten met beperkte rekenkracht of geheugen. 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
- Een IoT Hub maken.
- Wanneer u OpenSSL gebruikt, roept u SSL_CTX_set_tlsext_max_fragment_length aan om de fragmentgrootte op te geven.
- Verbind uw client met de IoT Hub.
Certificaat vastmaken
Het vastmaken en filteren van certificaten en tussenliggende certificaten die zijn gekoppeld aan IoT Hub-eindpunten wordt sterk afgeraden, omdat Microsoft deze certificaten regelmatig met weinig of geen kennisgeving implementeert. Als u dat wilt, moet u alleen de basiscertificaten vastmaken zoals beschreven in dit Azure IoT-blogbericht.