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.
Nota
hub IoT di Azure terminerà il supporto per TLS 1.0 e 1.1 in linea con l'annuncio del servizio wide di Azure per Tls 1.0 e 1.1 ritiro il 31 agosto 2025.
È quindi 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à
Per informazioni sulla versione di TLS in cui sono in esecuzione i dispositivi hub IoT, vedere la guida alla fine del supporto per TLS 1.0 e 1.1.
Supporto TLS reciproco
L'autenticazione TLS reciproca garantisce che il client autentica il certificato del server (hub IoT) e il server (hub IoT) autentica il client usando il certificato client X.509 o l'identificazione personale X.509. hub IoT esegue l'autorizzazione al termine dell'autenticazione.
Per i protocolli AMQP (Advanced Message Queuing Protocol) e Message Queuing Telemetry Transport (MQTT), hub IoT richiede un certificato client nell'handshake TLS iniziale. Se ne viene specificato uno, hub IoT autentica il certificato client e il client autentica il certificato 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, 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, hub IoT convalida il certificato rispetto all'identificazione personale o all'autorità di certificazione (CA) specificata. Per altre informazioni, vedere Certificati X.509 supportati.
Certificato TLS del server dell'hub IoT
Durante un handshake TLS, 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.
È consigliabile che tutti i dispositivi considerino attendibili i tre CA radice seguenti:
- 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 ca radice sono rare. È consigliabile preparare sempre la soluzione IoT per l'evento improbabile che una CA radice sia compromessa e che sia necessaria una migrazione ca radice di emergenza.
Pacchetti di crittografia
Per rispettare i criteri di sicurezza di Azure per una connessione sicura, hub IoT supporta le suite di crittografia RSA ed ECDSA seguenti per TLS 1.2:
- 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
Le suite di crittografia seguenti sono attualmente consentite in hub IoT. Tuttavia, queste suite di crittografia non sono più consigliate dalle linee guida per la sicurezza di Azure.
Pacchetti di crittografia | Supporto della versione TLS |
---|---|
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 |
Un client può suggerire un elenco di pacchetti di crittografia superiori da usare durante ClientHello
. Tuttavia, alcuni di essi potrebbero non essere supportati dall'hub IoT (ad esempio, ECDHE-ECDSA-AES256-GCM-SHA384
). In questo caso, hub IoT tenta di seguire la preferenza del client, ma alla fine negoziare la suite di crittografia con ServerHello
.
Applicare hub IoT per l'uso di TLS 1.2 e pacchetti di crittografia avanzata
Per garantire che i dispositivi IoT siano TLS 1.2 e la conformità avanzata delle suite di crittografia, è possibile applicare la conformità usando la funzionalità minima di imposizione TLS in hub IoT di Azure.
Attualmente questa funzionalità è disponibile solo nelle aree seguenti e durante la creazione di hub IoT (altre aree di Azure saranno supportate nel 2025):
- Stati Uniti orientali
- Stati Uniti centro-meridionali
- West US 2
- US Gov Arizona
- US Gov Virginia (il supporto TLS 1.0/1.1 non è disponibile in questa area: l'imposizione di TLS 1.2 deve essere abilitata o la creazione dell'hub IoT non riesce)
Per abilitare l'imposizione di pacchetti di crittografia TLS 1.2 e sicuri in portale di Azure:
Creazione guidata hub IoT in portale di Azure
Scegliere un'area da una nell'elenco precedente.
In Gestione -> Avanzata -> Transport Layer Security (TLS) -> Versione minima di TLS selezionare 1.2. Questa impostazione viene visualizzata solo per l'hub IoT creato nell'area supportata.
Fare clic su Crea
Connettere i dispositivi IoT a questa hub IoT
Per usare il modello di Resource Manager per la creazione, effettuare il provisioning di un nuovo hub IoT in una delle aree 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 hub IoT creata usando questa configurazione rifiuta i client di dispositivi e servizi che tentano di connettersi con TLS versioni 1.0 e 1.1. Analogamente, l'handshake TLS viene rifiutato se il ClientHello
messaggio non elenca alcuna delle crittografie consigliate.
Nota
La minTlsVersion
proprietà è di sola lettura e non può essere modificata dopo la creazione della risorsa hub IoT. È quindi 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.
In caso di failover, la minTlsVersion
proprietà del hub IoT rimane effettiva nell'area geografica associata dopo il failover.
Controllo delle versioni di TLS per i dispositivi hub IoT
hub IoT di Azure può fornire log di diagnostica per diverse categorie che possono essere analizzate usando i log di Monitoraggio di Azure. Nel log delle connessioni è possibile trovare la versione TLS per i dispositivi hub IoT.
Per visualizzare questi registri, eseguire la procedura seguente:
- Nel portale di Azure passare all'hub IoT.
- Nel menu delle risorse in Monitoraggio selezionare Impostazioni di diagnostica. Verificare che le impostazioni di diagnostica abbiano il segno di spunta "Connessioni".
- Nel menu delle risorse in Monitoraggio selezionare Log.
- 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
- Un esempio dei risultati della query è simile al seguente:
- Nota: la query della versione 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.
Lingua | Versioni che supportano TLS 1.2 | Documentazione |
---|---|---|
A | Tag 2019-12-11 o versioni successive | Collegamento |
Python | Versione 2.0.0 o successive | Collegamento |
C# | Versione 1.21.4 o successive | Collegamento |
Java | Versione 1.19.0 o successive | Collegamento |
NodeJS | Versione 1.12.2 o successive | Collegamento |
È 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 di hub IoT:
- Verificare che tutti i dispositivi considerino attendibili le ca radice seguenti:
- Radice CA DigiCert Global G2
- Radice CA Microsoft RSA 2017
- Configurare il client in modo che includa solo pacchetti di crittografia ECDSA ed escludere quelli RSA. Questi sono i pacchetti di crittografia supportati 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
- Connettere il client all'hub IoT.
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
- Creare un hub IoT.
- Quando si usa OpenSSL, chiamare SSL_CTX_set_tlsext_max_fragment_length per specificare le dimensioni del frammento.
- Connettere il client al hub IoT.
Aggiunta di certificati
L'aggiunta e il filtro dei certificati del server TLS e dei certificati intermedi associati agli endpoint hub IoT è fortemente sconsigliato perché Microsoft esegue spesso il rollback di questi certificati senza preavviso. Se necessario, aggiungere solo i certificati radice come descritto in questo post di blog di Azure IoT.
Passaggi successivi
- Per altre informazioni sulla sicurezza e il controllo di accesso dell'hub IoT, vedere Controllare l'accesso all'hub IoT.
- Per altre informazioni sull'uso del certificato X509 per l'autenticazione del dispositivo, vedere Autenticazione del dispositivo con certificati CA X.509