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. Attualmente sono supportate tre versioni del protocollo TLS, ovvero le versioni 1.0, 1.1 e 1.2.
Le versioni 1.0 e 1.1 di TLS sono considerate legacy e ne è prevista la deprecazione. Per altre informazioni, vedere Deprecazione di TLS 1.0 e 1.1 nell'hub IoT. Per evitare problemi futuri, usare TLS 1.2 come unica versione TLS durante la connessione all'hub IoT.
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.
È anche consigliabile aggiungere i certificati Microsoft RSA Root Certificate Authority 2017 ai dispositivi per evitare interruzioni nel caso in cui DigiCert Global Root G2 venga ritirato in modo imprevisto. Anche se le migrazioni ca radice sono rare, per la resilienza nel panorama di sicurezza moderno è necessario preparare lo scenario IoT per l'improbabile evento in cui una CA radice è compromessa o è necessaria una migrazione CA radice di emergenza.
È consigliabile che tutti i dispositivi considerino attendibili le 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.
Attendibilità dei certificati negli SDK
Gli SDK per dispositivi Azure IoT si connettono e autenticano i dispositivi ai servizi Azure IoT. I diversi SDK gestiscono i certificati in modi diversi a seconda della lingua e della versione, ma la maggior parte si basa sull'archivio certificati attendibile del dispositivo anziché aggiungere i certificati direttamente nella codebase. Questo approccio offre flessibilità e resilienza per gestire le modifiche future nei certificati radice.
La tabella seguente riepiloga le versioni dell'SDK che supportano l'archivio certificati attendibile:
Azure IoT SDK per dispositivi | Versioni supportate |
---|---|
A | Tutte le versioni attualmente supportate |
C# | Tutte le versioni attualmente supportate |
Java | Versione 2.x.x e successive |
Node.js | Tutte le versioni attualmente supportate |
Python | Tutte le versioni attualmente supportate |
Aggiunta di certificati
L'aggiunta e il filtro dei certificati server TLS (noti anche come certificati foglia) e i certificati intermedi associati agli endpoint hub IoT sono sconsigliati perché Microsoft esegue spesso il rollback di questi certificati senza preavviso. Se necessario, aggiungere solo i certificati radice.
Certificato TLS server ECC (Elliptic Curve Cryptography) (anteprima)
Il certificato TLS del server ECC dell'hub IoT è disponibile per l'anteprima pubblica. 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.
È consigliabile che tutti i dispositivi che usano ECC considerino attendibili i due ca radice seguenti:
- Ca radice DigiCert Global G3
- Radice CA Microsoft RSA 2017
Per i collegamenti per scaricare questi certificati, vedere Dettagli dell'autorità di certificazione di Azure.
Per visualizzare in anteprima il certificato del server ECC dell'hub IoT:
- Creare un nuovo hub IoT con la modalità di anteprima attivata.
- Configurare il client in modo che includa solo pacchetti di crittografia ECDSA ed escludere quelli RSA. Questi sono i pacchetti di crittografia supportati per l'anteprima pubblica del 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 di anteprima.
Imposizione di TLS 1.2 disponibile nelle aree selezionate
Per ulteriore sicurezza, configurare gli hub IoT per consentire soltanto le connessioni client che usano la versione 1.2 di TLS e per applicare l'uso delle crittografie consigliate. Questa funzionalità è supportata solo in queste aree:
- 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 TLS 1.2, seguire la procedura descritta in Creare un hub IoT nel portale di Azure, ad eccezione di
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.
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 proprietà minTlsVersion
è di sola lettura e non è possibile modificarla in seguito alla creazione della risorsa dell'hub IoT. È pertanto essenziale testare e convalidare anticipatamente e in modo adeguato la compatibilità di tutti i dispositivi e i servizi IoT con TLS 1.2 e con le crittografie consigliate.
Al momento del failover, la proprietà minTlsVersion
dell'hub IoT rimarrà valida nell'area abbinata in seguito al failover.
Pacchetti di crittografia
hub IoT configurati per accettare solo TLS 1.2 applicano anche l'uso delle suite di crittografia consigliate seguenti:
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
Per gli hub IoT non configurati per l'applicazione di tutela TLS 1.2, quest'ultimo funziona comunque con le suite di crittografia seguenti:
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
(Questa crittografia verrà deprecata il 10/01/2022 e non verrà più usata per gli handshake TLS)
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
.
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.
Autenticazione del dispositivo
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 certificato, questo può essere qualsiasi certificato X.509, incluso ECC. L'hub IoT convalida il certificato rispetto all'identificazione personale o all'autorità di certificazione (CA) specificata. Per altre informazioni, vedere Certificati X.509 supportati.
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 certificato client X.509 o l'identificazione personale X.509. L'autorizzazione viene eseguita dall'hub IoT al termine dell'autenticazione.
Per i protocolli AMQP e MQTT, l'hub IoT richiede un certificato client nell'handshake TLS iniziale. Se ne viene fornito 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, l'hub IoT rifiuta la connessione
Negoziazione della lunghezza massima del frammento TLS (anteprima)
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 nuovo hub IoT con la modalità di anteprima attivata.
- Quando si usa OpenSSL, chiamare SSL_CTX_set_tlsext_max_fragment_length per specificare le dimensioni del frammento.
- Connettere il client all'hub IoT di anteprima.
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