Supporto TLS (Transport Layer Security) nell'hub IoT

L'hub IoT usa il protocollo Transport Layer Security (TLS) per la protezione delle connessioni dai dispositivi e dai servizi IoT.

Note

hub IoT di Azure cesserà il supporto per TLS 1.0 e 1.1 in linea con l'annuncio relativo ai servizi Azure per il ritiro di TLS 1.0 e 1.1 il 31 agosto 2025. Inoltre, hub IoT non supporta più suite di crittografia deboli a partire dal 31 agosto 2025. Sono supportati solo i pacchetti di crittografia sicuri consigliati sia per gli hub IoT esistenti che per i nuovi hub IoT.

È essenziale testare e verificare correttamente che tutti i dispositivi e i servizi IoT siano compatibili con TLS 1.2 e le crittografie consigliate in anticipo. È consigliabile usare la funzionalità minima di imposizione TLS come meccanismo per il test e la conformità.

Important

È importante distinguere tra il supporto TLS 1.2 e l'imposizione di TLS 1.2. Tutti gli hub IoT supportano TLS 1.2, ovvero gli hub IoT possono gestire le connessioni usando il protocollo TLS 1.2. D'altra parte, l'imposizione di TLS 1.2 garantisce che l'hub IoT accetti solo le connessioni che usano TLS 1.2 o versione successiva. Quando l'imposizione di TLS 1.2 è abilitata, il servizio applica anche l'uso di suite di crittografia complesse.

Attualmente, l'imposizione di TLS 1.2 è supportata solo nelle aree del cloud pubblico.

Per scoprire la versione di TLS in cui sono in esecuzione i dispositivi dell'hub IoT, vedere la guida alla fine del supporto di TLS 1.0 e 1.1.

Supporto TLS reciproco

L'autenticazione TLS reciproca garantisce che il client autentichi il certificato del server (hub IoT) e che il server (hub IoT) autentichi il client usando il certificato client X.509 o l'identificazione personale X.509. L'hub IoT concede l'autorizzazione al termine dell'autenticazione.

L'hub IoT richiede un certificato client nell'hanshake TLS iniziale per i protocolli AMQP (Advanced Message Queuing Protocol) e MQTT (Message Queuing Telemetry Transport). Se ne viene specificato uno, l'hub IoT autentica il certificato client e il client autentica il certificato dell'hub IoT. Questo processo è detto autenticazione TLS reciproca. Quando l'hub IoT riceve un pacchetto di connessione MQTT o viene aperto un collegamento AMQP, l'hub IoT esegue l'autorizzazione per il client richiedente e determina se il client richiede l'autenticazione X.509. Se l'autenticazione TLS reciproca è stata completata e il client è autorizzato a connettersi come dispositivo, è consentito. Tuttavia, se il client richiede l'autenticazione X.509 e l'autenticazione client non è stata completata durante l'handshake TLS, l'hub IoT rifiuta la connessione.

Per il protocollo HTTP, quando il client effettua la prima richiesta, l'hub IoT verifica se il client richiede l'autenticazione X.509 e se l'autenticazione client è stata completata, l'hub IoT esegue l'autorizzazione. Se l'autenticazione client non è stata completata, hub IoT rifiuta la connessione.

Dopo un handshake TLS riuscito, l'hub IoT può autenticare un dispositivo usando una chiave simmetrica o un certificato X.509. Per l'autenticazione basata su certificati, l'hub IoT convalida il certificato rispetto all'identificazione personale o all'autorità di certificazione (CA) specificata. Per altre informazioni, vedere Autenticare le identità con certificati X.509.

Certificato TLS del server dell'hub IoT

Durante un handshake TLS l'hub IoT presenta i certificati server con chiave RSA per la connessione dei client. Tutti gli hub IoT nel cloud globale di Azure usano il certificato TLS rilasciato da DigiCert Global Root G2.

Considera attendibili le due CA radice seguenti per tutti i dispositivi:

  • CA radice CA DigiCert Global G2
  • Radice CA Microsoft RSA 2017

Per i collegamenti per scaricare questi certificati, vedere Dettagli dell'autorità di certificazione di Azure.

Le migrazioni delle CA radice sono rare. Preparate sempre la vostra soluzione IoT all'improbabile eventualità che una CA radice venga compromessa e che si renda necessaria una migrazione d'emergenza della CA radice.

Pacchetti di crittografia

A partire dal 31 agosto 2025, l'hub IoT applica l'uso di suite di crittografia avanzate consigliate per tutti gli hub IoT nuovi e esistenti. Le suite di crittografia non consigliate (deboli) non sono supportate dopo questa data.

Per rispettare i criteri di sicurezza di Azure per una connessione sicura, l'hub IoT supporta solo le suite di crittografia RSA ed ECDSA seguenti:

  • 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

Note

I pacchetti di crittografia ECDSA sono disponibili solo nelle aree del cloud pubblico.

I pacchetti di crittografia non consigliati seguenti sono consentiti negli hub senza minTlsVersion:1.2 fino al 31 agosto 2025:

  • 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_128_CBC_SHA
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA

Un client può suggerire un elenco di pacchetti di crittografia superiori da usare durante ClientHello. Tuttavia, l'hub IoT potrebbe non supportare alcuni di essi, ad esempio ECDHE-ECDSA-AES256-GCM-SHA384. In questo caso, hub IoT tenta di seguire la preferenza del client, ma alla fine negozia la suite di crittografia con ServerHello.

Note

Quando si usa una crittografia ECDSA o ECDHE, il client deve fornire l'estensione supported_groups in ClientHello con un gruppo valido. Quando ci si connette con un certificato client, il client deve includere la curva usata nel certificato client nella relativa supported_groups estensione.

Aggiornare l'hub IoT al supporto tls 1.2

Dopo aver creato un hub IoT, aggiornare la proprietà minTlsVersion usando il portale di Azure, l'interfaccia della riga di comando o gli SDK. Per aggiornare il hub IoT per applicare i pacchetti di crittografia TLS 1.2 e sicuri (consentiti solo nelle aree selezionate) o per impostare il supporto tls 1.2 (supportato in tutte le aree), seguire questa procedura.

Per aggiornare l'hub IoT per supportare TLS 1.2 e/o applicare pacchetti di crittografia avanzata nel portale di Azure:

  1. Accedere all'hub IoT esistente nel portale di Azure.

  2. Nella scheda Panoramica del menu a sinistra selezionare il collegamento Versione minima TLS dalla sezione Informazioni di base.

    Screenshot che mostra come scegliere la versione minima del supporto TLS.

  3. Nella finestra laterale Versione minima di TLS selezionare 1.2 per assicurarsi che solo i dispositivi che supportano TLS 1.2 o versione successiva possano connettersi.

  4. Selezionare Aggiorna.

    Screenshot che mostra come attivare il supporto TLS 1.2.

Note

È possibile aggiornare l'hub IoT a TLS 1.2 in tutte le aree del cloud pubblico.

Applicare l'hub IoT per l'uso di TLS 1.2 e le suite di crittografia avanzata

Per garantire che i tuoi dispositivi IoT siano conformi a TLS 1.2 e alle suite di crittografia avanzate, imponi la conformità usando la funzionalità di imposizione della versione minima di TLS in hub IoT di Azure.

Note

Attualmente, questa funzionalità è disponibile solo nelle aree del cloud pubblico.

Per abilitare l'applicazione rigorosa di TLS 1.2 e delle suite di algoritmi di crittografia avanzate nel portale Azure:

  1. Passare alla creazione guidata dell'hub IoT nel portale di Azure.

  2. Scegliere un'area dall'elenco delle aree supportate.

  3. In Gestione -> Avanzata -> Transport Layer Security (TLS) -> Versione minima di TLS selezionare 1.2. Questa impostazione viene visualizzata solo per gli hub IoT creati nelle aree supportate.

    Screenshot che mostra come attivare l'imposizione di TLS 1.2 durante la creazione dell'hub IoT.

  4. Fare clic su Crea.

  5. Connettere i dispositivi IoT a questo hub IoT.

Per usare un modello ARM per la creazione, eseguire il provisioning di un nuovo hub IoT in una delle aree geografiche supportate e impostare la proprietà minTlsVersion su 1.2 nella specifica della risorsa:

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

La risorsa dell'hub IoT creata rifiuta i client di dispositivi e servizi che tentano di connettersi tramite TLS versioni 1.0 e 1.1. Analogamente, l'handshake TLS viene rifiutato se il messaggio ClientHello non elenca alcuna delle crittografie consigliate.

Note

In caso di failover, la proprietà minTlsVersion del hub IoT rimane effettiva nell'area geografica associata dopo il failover.

Controllare le versioni e i pacchetti di crittografia TLS per i dispositivi hub IoT

L'hub IoT di Azure offre la possibilità di controllare la versione TLS, i pacchetti di crittografia e altre metriche di connessione del dispositivo per monitorare la sicurezza dei dispositivi IoT. È possibile usare metriche hub IoT o log di diagnostica per tenere traccia dell'utilizzo della versione tls e di altre proprietà correlate, ad esempio Cipher Suites.

Note

Attualmente, questa funzionalità è disponibile solo nelle aree del cloud pubblico.

Controllare le versioni di TLS e le suite di crittografia usando le metriche di hub IoT

Per verificare che il traffico del dispositivo verso hub IoT utilizzi TLSv1.2 e suite di crittografia sicure, controllare le metriche di hub IoT. È possibile filtrare in base alla versione o alla suite di crittografia TLS e controllare il numero di connessioni riuscite.

  1. Nel portale di Azure passare all'hub IoT.

  2. Nel menu a sinistra in Monitoraggio selezionare Metriche.

  3. Aggiungere la metrica Successful Connects.

    Screenshot che mostra come aggiungere la metrica Successful Connects.

  4. Filtrare in base alla versione TLS o alla suite di crittografia selezionando il pulsante Aggiungi filtro e scegliendo la proprietà appropriata, la versione TLS o la suite di crittografia, l'operatore, ad esempio "=" e il valore, ad esempio TLSv1.2.

    Screenshot che mostra come filtrare in base alla versione TLS o alla suite di crittografia.

  5. Dopo aver applicato il filtro, vedi il numero totale dei dispositivi con connessioni riuscite a hub IoT in base alla proprietà e ai valori filtrati.

Controllare le versioni e i pacchetti di crittografia TLS usando i log di diagnostica hub IoT

hub IoT di Azure può fornire log di diagnostica per diverse categorie che è possibile analizzare usando Monitoraggio di Azure Log. Nel log delle connessioni è possibile trovare la versione e la suite di crittografia TLS per i dispositivi hub IoT.

Per visualizzare questi registri, eseguire la procedura seguente:

  1. Nel portale di Azure passare all'hub IoT.

  2. Nel menu a sinistra in Monitoraggio selezionare Impostazioni di diagnostica. Verificare che le impostazioni di diagnostica abbiano selezionato Connessioni .

  3. Nel menu a sinistra in Monitoraggio selezionare Log.

  4. Immettere la query seguente:

    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
    
  5. Un esempio dei risultati della query è simile al seguente:

    Diagramma che mostra la query per la versione TLS del dispositivo.

Note

La query sulla versione di TLS non è disponibile per i dispositivi che usano connessioni HTTPS.

Configurazione TLS per SDK e IoT Edge

Usare i collegamenti seguenti per configurare TLS 1.2 e le crittografie consentite negli SDK client hub IoT.

Language Versioni che supportano TLS 1.2 Documentation
C Tag 2019-12-11 o versioni successive Link
Python Versione 2.0.0 o successive Link
C# Versione 1.21.4 o successive Link
Java Versione 1.19.0 o successive Link
Node.js Versione 1.12.2 o successive Link

È possibile configurare l'uso di TLS 1.2 da parte dei dispositivi IoT Edge durante la comunicazione con l'hub IoT. A tale scopo, vedere la pagina della documentazione di IoT Edge.

Certificato TLS del server ECC (Elliptic Curve Cryptography)

Pur offrendo una sicurezza simile ai certificati RSA, la convalida dei certificati ECC (con pacchetti di crittografia solo ECC) usa fino al 40% meno calcolo, memoria e larghezza di banda. Questi risparmi sono importanti per i dispositivi IoT grazie ai profili e alla memoria più piccoli e supportano i casi d'uso in ambienti con larghezza di banda di rete limitata.

Per usare il certificato server ECC dell'hub IoT:

  1. Assicurarsi che tutti i dispositivi considerino attendibili le seguenti autorità di certificazione radice:
    • CA radice CA DigiCert Global G2
    • Radice CA Microsoft RSA 2017
  2. Configurare il client in modo che includa solo pacchetti di crittografia ECDSA ed escludere quelli RSA. Questi sono le suite di crittografia supportate per il certificato ECC:
    • 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. Connettere il client all'hub IoT.

Note

Attualmente, questa funzionalità è disponibile solo nelle aree del cloud pubblico.

Negoziazione della lunghezza massima del frammento TLS

L'hub IoT supporta anche la negoziazione della lunghezza massima del frammento TLS, talvolta nota come negoziazione delle dimensioni dei frame TLS. Questa funzionalità è disponibile in anteprima pubblica.

Utilizzare questa funzionalità per specificare la lunghezza massima del frammento di testo non crittografato su un valore inferiore al valore predefinito di 2^14 byte. Dopo la negoziazione, l'hub IoT e il client iniziano a frammentare i messaggi per garantire che tutti i frammenti siano inferiori alla lunghezza negoziata. Questo comportamento è utile per calcolare o limitare la memoria dei dispositivi. Per altre informazioni, vedere la specifica ufficiale dell'estensione TLS.

Il supporto ufficiale dell'SDK per questa funzionalità di anteprima pubblica non è ancora disponibile. Attività iniziali

  1. Creare un hub IoT.
  2. Quando si usa OpenSSL, chiamare SSL_CTX_set_tlsext_max_fragment_length per specificare le dimensioni del frammento.
  3. Connettere il client all'hub IoT.

Note

Attualmente, questa funzionalità è disponibile solo nelle aree del cloud pubblico.

Associazione del certificato

L'associazione del certificato e il filtro dei certificati del server TLS e dei certificati intermedi associati agli endpoint dell'hub IoT sono fortemente sconsigliati, perché Microsoft esegue spesso il rollback di questi certificati con poco preavviso o senza preavviso. Se necessario, aggiungere solo i certificati radice come descritto in questo post di blog di Azure IoT.

Supporto TLS 1.3 (anteprima)

hub IoT di Azure supporta TLS 1.3 tramite nuovi endpoint di dispositivi e servizi disponibili insieme all'endpoint classico esistente. Questi endpoint sono provisionati automaticamente su tutti gli hub IoT e possono essere adottati al tuo ritmo.

Endpoints

Punto finale Hostname Supporto TLS
Classic <hub>.azure-devices.net TLS 1.2
Dispositivo (anteprima) <hub>.device.azure-devices.net TLS 1.2 (cifrari limitati) + TLS 1.3
Servizio (anteprima) <hub>.service.azure-devices.net TLS 1.2 (cifrari limitati) + TLS 1.3

L'endpoint classico rimane completamente supportato e continua a essere il predefinito per i carichi di lavoro esistenti.

Requisiti

I nuovi endpoint hanno requisiti più severi rispetto al classico endpoint:

  • È richiesto l'SNI. I client devono inviare l'estensione Server Name Indication (SNI) nel handshake TLS.
  • Suite di cifratura limitate. Sono supportate solo le suite di cifrature conformi alla sicurezza. I dispositivi che dipendono da suite di cifrature non presenti in questo set non riescono a connettersi. Per l'elenco delle suite di cifrari supportate, vedi Suite di cifrature.
  • I dispositivi che utilizzano TLS 1.2 possono connettersi ai nuovi endpoint se supportano le suite di cifratura richieste.

Usa i nuovi endpoint

Per recuperare le stringhe di connessione per i nuovi endpoint, usa il --hostname-type parametro:

# Device connection string using the TLS 1.3-capable device endpoint
az iot hub device-identity connection-string show \
  --hub-name <hub-name> \
  --resource-group <resource-group> \
  --device-id <device-id> \
  --hostname-type device

# Hub connection string using the service endpoint
az iot hub connection-string show \
  --hub-name <hub-name> \
  --resource-group <resource-group> \
  --hostname-type service

Per verificare gli endpoint disponibili sul tuo hub:

az iot hub show --name <hub-name> --resource-group <resource-group> \
  --query "{classic:properties.hostName, device:properties.deviceHostName}" \
  --output json

Note

Il service tipo di nome host non è valido per le stringhe di connessione di dispositivi o moduli. Usa device o classic per le connessioni sul lato dispositivo.

Passa agli endpoint TLS 1.3

L'adozione dei nuovi endpoint è opzionale e controllata dal cliente. Per eseguire una migrazione:

  1. Verifica che i tuoi dispositivi e client supportino SNI e le suite di cifratura necessarie.
  2. Testa la connettività utilizzando l'endpoint del dispositivo in un ambiente di staging.
  3. Aggiorna le stringhe di connessione del dispositivo per usare <hub>.device.azure-devices.net.
  4. Per i servizi backend, aggiornare le stringhe di connessione per utilizzare <hub>.service.azure-devices.net.

Per tornare indietro, aggiorna le stringhe di connessione per usare il nome host originale <hub>.azure-devices.net .

Se il tuo hub IoT viene raggiunto tramite un endpoint privato (collegamento privato di Azure), i nuovi host di dispositivi e servizi devono anche risolversi in un indirizzo IP privato nella tua rete virtuale. Nella maggior parte dei casi ciò avviene automaticamente, ma l'assegnazione IP statica o una subnet completa possono richiedere un'azione manuale. Vedi Aggiornare gli endpoint privati per abilitare TLS 1.3.

Important

Non usare l'endpoint di servizio (<hub>.service.azure-devices.net) per le connessioni dei dispositivi. È destinato esclusivamente ai servizi backend.

Per informazioni sull'uso dei nuovi endpoint con il Device Provisioning Service (DPS), vedi Gestire hub IoT collegati in DPS.

Passaggi successivi