Transport Layer Security (TLS) i IoT Hub
IoT Hub använder Transport Layer Security (TLS) för att skydda anslutningar från IoT-enheter och -tjänster. Tre versioner av TLS-protokollet stöds för närvarande, nämligen versionerna 1.0, 1.1 och 1.2.
TLS 1.0 och 1.1 betraktas som äldre och planeras för utfasning. Mer information finns i Föråldrade TLS 1.0 och 1.1 för IoT Hub. Undvik framtida problem genom att använda TLS 1.2 som enda TLS-version vid anslutning till IoT Hub.
IoT Hub serverns TLS-certifikat
Under en TLS-handskakning IoT Hub RSA-nyckelbaserade servercertifikat till anslutande klienter. Roten är Baltimore Cybertrust Root CA. Nyligen distribuerade vi en ändring i vårt TLS-servercertifikat så att det nu utfärdas av nya mellanliggande certifikatutfärdare (ICA). Mer information finns i IoT Hub TLS-certifikatuppdatering.
Elliptic Curve Cryptography (ECC) serverns TLS-certifikat (förhandsversion)
IoT Hub TLS-certifikatet för ECC-servern är tillgängligt för offentlig förhandsversion. EcC-certifikatverifiering (med endast ECC-chiffersviter) erbjuder liknande säkerhet som RSA-certifikat, men använder upp till 40 % mindre beräkning, minne och bandbredd. Dessa besparingar är viktiga för IoT-enheter på grund av deras mindre profiler och minne och för att stödja användningsfall i miljöer med begränsad nätverksbandbredd. ECC-servercertifikatens rot är DigiCert Global Root G3.
Så här förhandsgranskar IoT Hub ECC-servercertifikatet:
- Skapa en ny IoT-hubb med förhandsgranskningsläge på.
- Konfigurera klienten så att den endast inkluderar ECDSA-chiffersviter och exkluderar RSA-chiffersviter. Det här är de chiffersviter som stöds för den offentliga förhandsversionen av ECC-certifikat:
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
- Anslut klienten till förhandsversionen av IoT-hubben.
Tvingande TLS 1.2 är tillgängligt i utvalda regioner
För ökad säkerhet konfigurerar du dina IoT-hubbar så att de endast tillåter klientanslutningar som använder TLS version 1.2 och framtvingar användningen av chiffersviter. Den här funktionen stöds endast i följande regioner:
- East US
- USA, södra centrala
- USA, västra 2
- US Gov, Arizona
- US Gov, Virginia (stöd för TLS 1.0/1.1 är inte tillgängligt i den här regionen – TLS 1.2-tvingande måste vara aktiverat eller så går det inte att skapa IoT-hubben)
Om du vill aktivera tvingande TLS 1.2 följer du stegen i Skapa IoT-hubb i Azure Portal, utom
Välj en Region från en i listan ovan.
Under Hantering -> Advanced -> Transport Layer Security (TLS) -> lägsta TLS-version väljer du 1.2. Den här inställningen visas bara för IoT Hub som skapats i en region som stöds.
Om du vill använda ARM-mallen för att skapa en IoT Hub i någon av de regioner som stöds och anger egenskapen minTlsVersion till 1.2 i resursspecifikationen:
{
"$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
}
}
]
}
Den skapade IoT Hub med den här konfigurationen nekar enhets- och tjänstklienter som försöker ansluta med TLS version 1.0 och 1.1. På samma sätt avvisas TLS-handskakningen om meddelandet inte innehåller någon lista ClientHello över de rekommenderade chifferen.
Anteckning
Egenskapen minTlsVersion är skrivskyddad och kan inte ändras när IoT Hub resurs har skapats. Därför är det viktigt att du testar och verifierar att alla dina IoT-enheter och -tjänster är kompatibla med TLS 1.2 och de rekommenderade chifferen i förväg.
Vid redundans är egenskapen för ditt IoT Hub gällande i minTlsVersion den geo-parkopplade regionen efter redundans.
Chiffersviter
IoT-hubbar som är konfigurerade för att endast godkänna TLS 1.2 framtvingar också användningen av följande rekommenderade chiffersviter:
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
För IoT Hubs som inte har konfigurerats för tvingande TLS 1.2 fungerar TLS 1.2 fortfarande med följande chiffersviter:
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256TLS_DHE_RSA_WITH_AES_256_GCM_SHA384TLS_DHE_RSA_WITH_AES_128_GCM_SHA256TLS_RSA_WITH_AES_256_GCM_SHA384TLS_RSA_WITH_AES_128_GCM_SHA256TLS_RSA_WITH_AES_256_CBC_SHA256TLS_RSA_WITH_AES_128_CBC_SHA256TLS_ECDHE_RSA_WITH_AES_256_CBC_SHATLS_ECDHE_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_AES_256_CBC_SHATLS_RSA_WITH_AES_128_CBC_SHATLS_RSA_WITH_3DES_EDE_CBC_SHA
En klient kan föreslå en lista över högre chiffersviter som ska användas under ClientHello . Vissa av dem kanske dock inte stöds av IoT Hub (till exempel ECDHE-ECDSA-AES256-GCM-SHA384 ). I det här IoT Hub försöker följa klientens önskemål, men kommer så småningom att förhandla ned chiffersviten med ServerHello .
TLS-konfiguration för SDK och IoT Edge
Använd länkarna nedan för att konfigurera TLS 1.2 och tillåtna chiffer IoT Hub klient-SDK:er.
| Språk | Versioner som stöder TLS 1.2 | Dokumentation |
|---|---|---|
| C | Tagg 2019-12-11 eller nyare | Länk |
| Python | Version 2.0.0 eller senare | Länk |
| C# | Version 1.21.4 eller senare | Länk |
| Java | Version 1.19.0 eller senare | Länk |
| NodeJS | Version 1.12.2 eller senare | Länk |
IoT Edge enheter kan konfigureras för att använda TLS 1.2 vid kommunikation med IoT Hub. För detta ändamål använder du IoT Edge på dokumentationssidan.
Enhetsautentisering
Efter en lyckad TLS-handskakning IoT Hub autentisera en enhet med hjälp av en symmetrisk nyckel eller ett X.509-certifikat. För certifikatbaserad autentisering kan detta vara vilket X.509-certifikat som helst, inklusive ECC. IoT Hub verifierar certifikatet mot tumavtrycket eller certifikatutfärdaren som du anger. Mer information finns i X.509-certifikat som stöds.
TLS maximalt fragmentlängdsförhandling (förhandsversion)
IoT Hub också stöd för TLS-förhandling med maximal fragmentlängd, som ibland kallas TLS-ramstorleksförhandling. Den här funktionen är en allmänt tillgänglig förhandsversion.
Använd den här funktionen för att ange maximal längd på fragment i klartext till ett värde som är mindre än standardvärdet 2^14 byte. När detta förhandlats IoT Hub och klienten börjar fragmentera meddelanden för att se till att alla fragment är mindre än den förhandlade längden. Det här beteendet är användbart för beräkning eller minnesbegränsade enheter. Mer information finns i den officiella specifikationen för TLS-tillägg.
Officiellt SDK-stöd för den här offentliga förhandsversionsfunktionen är inte tillgängligt ännu. Så här kommer du igång
- Skapa en ny IoT-hubb med förhandsgranskningsläge på.
- När du använder OpenSSL anropar SSL_CTX_set_tlsext_max_fragment_length för att ange fragmentstorleken.
- Anslut klienten till förhandsversionen IoT Hub.
Nästa steg
- Mer information om IoT Hub och åtkomstkontroll finns i Kontrollera åtkomst till IoT Hub.
- Mer information om hur du använder X509-certifikat för enhetsautentisering finns i Enhetsautentisering med X.509 CA-certifikat