Connettere un dispositivo downstream a un gateway Azure IoT Edge

Si applica a: Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS raggiungerà il fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

In questo articolo vengono fornite istruzioni per stabilire una connessione attendibile tra i dispositivi downstream e i gateway trasparenti IoT Edge. In uno scenario basato su gateway trasparente uno o più dispositivi possono passare i propri messaggi attraverso un unico dispositivo gateway che gestisce la connessione all'hub IoT. A tale riguardo, i termini gateway e gateway IoT Edge si riferiscono a un dispositivo IoT Edge configurato come gateway trasparente.

Nota

Un dispositivo downstream genera dati direttamente in Internet o nei dispositivi gateway, abilitati o meno per IoT Edge. Un dispositivo figlio può essere un dispositivo downstream o un dispositivo gateway in una topologia annidata.

Ci sono tre passaggi generali per configurare correttamente una connessione gateway trasparente. Questo articolo illustra il terzo passaggio.

  1. Configurare il dispositivo gateway come server in modo che i dispositivi downstream possano connettersi in modo sicuro. Configurare il gateway per ricevere messaggi dai dispositivi downstream e instradarli alla destinazione corretta. Per questi passaggi, vedere Configurare un dispositivo IoT Edge in modo che funga da gateway trasparente.

  2. Creare un'identità del dispositivo per il dispositivo downstream in modo che possa eseguire l'autenticazione con l'hub IoT. Configurare il dispositivo downstream per inviare messaggi tramite il dispositivo gateway. Per questi passaggi, vedere Autenticare un dispositivo downstream nell'hub IoT di Azure.

  3. Connettere il dispositivo downstream al dispositivo gateway e iniziare a inviare messaggi.

Questo articolo illustra i componenti di connessione dei dispositivi downstream, ad esempio:

  • Nozioni fondamentali relativi al protocollo Transport Layer Security (TLS) e ai certificati.
  • Le librerie TLS possono essere usate da sistemi operativi diversi che gestiscono i certificati in maniera differente.

Si esaminano quindi gli esempi di Azure IoT nella lingua scelta, al fine di consentire al dispositivo di inviare messaggi al gateway.

Prerequisiti

Per preparare il dispositivo downstream, è necessario dotarsi degli elementi seguenti:

  • Un dispositivo downstream.

    Tale dispositivo può essere qualsiasi applicazione o piattaforma la cui identità sia stata creata con il servizio cloud dell’hub IoT di Azure. In molti casi, queste applicazioni usano Azure IoT SDK per dispositivi. Un dispositivo downstream può anche essere un'applicazione in esecuzione nel dispositivo gateway IoT Edge stesso.

    Successivamente, in questo articolo vengono illustrati i passaggi per la connessione di un dispositivo IoT come dispositivo downstream. Se si preferisce usare un dispositivo IoT Edge come dispositivo downstream, vedere Connettere i dispositivi Azure IoT Edge per creare una gerarchia (edge annidato).

  • Un file di certificato CA radice.

    Questo file è stato usato per generare il certificato ca Edge in Configurare un dispositivo IoT Edge per fungere da gateway trasparente, disponibile nel dispositivo downstream.

    Il dispositivo downstream usa questo certificato per convalidare l'identità del dispositivo gateway. Tale certificato attendibile convalida le connessioni Transport Layer Security (TLS) al dispositivo gateway. Vedere i dettagli di utilizzo nella sezione Specificare il certificato della CA radice.

  • Una stringa di connessione modificata che punta al dispositivo gateway.

    La modalità di modifica della stringa di connessione viene illustrata in Autenticare un dispositivo downstream nell'hub IoT di Azure.

Nota

I dispositivi IoT registrati con l'hub IoT possono usare moduli gemelli per isolare processi, hardware o funzioni diversi in un singolo dispositivo. I gateway IoT Edge supportano le connessioni dei moduli downstream tramite l'autenticazione con chiave simmetrica, ma non con certificato X.509.

Informazioni sulle nozioni fondamentali relative al protocollo TLS e ai certificati

La sfida di connettere in modo sicuro dispositivi downstream a IoT Edge viene gestita esattamente come per le altre comunicazioni client/server sicure che hanno luogo tramite internet. Un client e un server comunicano in modo sicuro tramite Internet usando il protocollo Transport Layer Security (TLS). TLS viene integrato tramite costrutti di infrastruttura a chiave pubblica (PKI) denominati certificati. TLS è una specifica piuttosto complessa relativa a un'ampia gamma di argomenti correlati alla protezione di due endpoint. Nella sezione seguente vengono riepilogati i requisiti per connettere in modo sicuro i dispositivi a un gateway IoT Edge.

Quando un client si connette a un server, il server presenta una catena di certificati, denominata catena di certificati server. Una catena di certificati è in genere costituita da un certificato dell'autorità di certificazione (CA) radice, uno o più certificati della CA intermedia e infine il certificato del server stesso. Un client stabilisce relazioni di trust con un server verificando crittograficamente l'intera catena di certificati server. La convalida client della catena di certificati del server è denominata convalida della catena del server. Il client sfida il server nel tentativo di dimostrare il possesso della chiave privata associata al certificato del server tramite un processo denominato dimostrazione del possesso. La combinazione di convalida della catena di server e dimostrazione del possesso viene denominata autenticazione del server. Per convalidare una catena di certificati server, un client richiede una copia del certificato della CA radice che è stato usato per creare (o rilasciare) il certificato del server. Nel caso di connessione a siti Web, in genere un browser viene preconfigurato con certificati della CA di uso comune in modo da fornire al client un processo semplificato.

Quando un dispositivo si connette all'hub IoT di Azure, il dispositivo è il client e il servizio cloud hub IoT è il server. Il servizio cloud hub IoT è supportato da un certificato della CA radice denominato Baltimore CyberTrust Root, disponibile a livello pubblico e ampiamente utilizzato. Poiché il certificato della CA dell'hub IoT è già installato nella maggior parte dei dispositivi, molte implementazioni di TLS (OpenSSL, Schannel, LibreSSL) lo usano automaticamente durante la convalida del certificato server. Tuttavia, un dispositivo che si connette correttamente all'hub IoT può avere problemi quando tenta di connettersi a un gateway IoT Edge.

Quando un dispositivo si connette al gateway IoT Edge, il dispositivo downstream è il client, mentre il dispositivo gateway è il server. Azure IoT Edge consente di creare catene di certificati del gateway in base alle esigenze. È possibile scegliere di usare un certificato della CA pubblico, come Baltimore, o un certificato della CA radice autofirmato (o interno). I certificati della CA pubblici prevedono costi associati e di conseguenza vengono usati in genere in scenari di produzione. I certificati della CA autofirmati vengono scelti per scenari di sviluppo e test. I certificati demo sono certificati della CA radice autofirmati.

Quando si usa un certificato della CA radice autofirmato per un gateweay IoT Edge, questo deve essere installato su o fornito a tutti i dispositivi downstream che tentano di connettersi al gateway.

Screenshot della configurazione del certificato del gateway.

Per altre informazioni sui certificati di IoT Edge e su alcune implicazioni correlate alla produzione, vedere Dettagli sull'utilizzo di certificati di IoT Edge.

Fornire il certificato della CA radice

Per verificare i certificati del dispositivo gateway, il dispositivo downstream necessita della propria copia del certificato della CA radice. Se sono stati usati gli script forniti nel repository Git di IoT Edge per creare certificati di test, il certificato della CA radice è denominato azure-iot-test-only.root.ca.cert.pem.

Se non è già stato fatto, spostare questo file di certificato in qualsiasi directory nel dispositivo downstream. È possibile spostare il file installando il certificato della CA nell'archivio certificati del sistema operativo o, per alcune lingue, facendo riferimento al certificato all'interno delle applicazioni tramite gli SDK di Azure IoT.

È possibile usare un servizio come Azure Key Vault o una funzione come il protocollo Secure Copy per spostare i file di certificato.

Installare i certificati nel sistema operativo

Una volta che il certificato della CA radice si trova nel dispositivo downstream, assicurarsi che le applicazioni che si connettono al gateway possano accedere al certificato.

L'installazione del certificato della CA radice nell'archivio certificati del sistema operativo consente in genere alla maggior parte delle applicazioni di usare il certificato della CA radice. Esistono alcune eccezioni, ad esempio le applicazioni NodeJS che non usano l'archivio certificati del sistema operativo, bensì l'archivio certificati interno del runtime Node. Se non è possibile installare il certificato a livello di sistema operativo, passare a Usare i certificati con gli SDK di Azure IoT.

Installare il certificato della CA radice in Ubuntu o Windows.

I comandi seguenti offrono un esempio di come installare un certificato della CA in un host Ubuntu. In questo esempio si presuppone che venga usato il certificato azure-iot-test-only.root.ca.cert.pem indicato negli articoli relativi ai prerequisiti e che il certificato sia stato copiato in una posizione nel dispositivo downstream.

sudo cp <file path>/azure-iot-test-only.root.ca.cert.pem /usr/local/share/ca-certificates/azure-iot-test-only.root.ca.cert.pem.crt
sudo update-ca-certificates

Verrà visualizzato un messaggio simile al seguente: "Aggiornamento dei certificati in /etc/ssl/certs... 1 aggiunto, 0 rimossi; operazione completata".

Usare i certificati con gli SDK di Azure IoT

GliSDK di Azure IoT si connettono a un dispositivo IoT Edge tramite semplici applicazioni di esempio. L'obiettivo degli esempi consiste nel connettere il client del dispositivo e inviare messaggi di telemetria al gateway, quindi chiudere la connessione e uscire.

Prima di usare gli esempi a livello di applicazione, ottenere gli elementi seguenti:

  • Stringa di connessione dell'hub IoT del dispositivo downstream, modificata in modo da puntare al dispositivo gateway.

  • Tutti i certificati necessari per autenticare il dispositivo downstream nell'hub IoT. Per altre informazioni, vedere Autenticare un dispositivo downstream nell'hub IoT di Azure.

  • Percorso completo del certificato della CA radice copiato e salvato in una posizione nel dispositivo downstream.

    Ad esempio: <file path>/azure-iot-test-only.root.ca.cert.pem.

Si è ora pronti per usare i certificati con un esempio nella lingua scelta:

Questa sezione fornisce un'applicazione di esempio per la connessione di un client dispositivo NodeJS Azure IoT a un gateway IoT Edge. Per le applicazioni NodeJS, è necessario installare il certificato della CA radice a livello di applicazione, come illustrato di seguito. Le applicazioni NodeJS non usano l'archivio certificati del sistema.

  1. Ottenere l'esempio per edge_downstream_device.js nel repository degli esempi di Azure IoT SDK per dispositivi per Node.js.
  2. Assicurarsi di avere predisposto tutti i prerequisiti per eseguire l'esempio esaminando il file readme.md.
  3. Nel file edge_downstream_device.js aggiornare le variabili connectionString e edge_ca_cert_path.
  4. Vedere la documentazione dell'SDK per istruzioni su come eseguire l'esempio nel dispositivo.

Per informazioni sull'esempio in esecuzione, il frammento di codice seguente mostra in che modo il client SDK legge il file del certificato e lo usa per stabilire una connessione TLS sicura:

// Provide the Azure IoT device client via setOptions with the X509
// Edge root CA certificate that was used to setup the Edge runtime
var options = {
    ca : fs.readFileSync(edge_ca_cert_path, 'utf-8'),
};

Testare la connessione al gateway

Usare questo comando di esempio nel dispositivo downstream per verificare che possa connettersi al dispositivo gateway:

openssl s_client -connect mygateway.contoso.com:8883 -CAfile <CERTDIR>/certs/azure-iot-test-only.root.ca.cert.pem -showcerts

Questo comando verifica la connessione tramite MQTTS (porta 8883). Se si usa un protocollo diverso, regolare il comando in base alle esigenze per AMQPS (5671) o HTTPS (443).

L'output di questo comando può essere lungo, includendo informazioni su tutti i certificati nella catena. Se la connessione ha esito positivo, viene visualizzata una riga simile a Verification: OK o Verify return code: 0 (ok).

Screenshot della modalità di verifica di una connessione del gateway.

Risolvere i problemi di connessione del gateway

Se la connessione del dispositivo downstream al dispositivo gateway è instabile, prendere in considerazione queste domande per una risoluzione.

  • Il nome host del gateway nella stringa di connessione corrisponde al valore del nome host nel file config di IoT Edge nel dispositivo gateway?
  • Il nome host del gateway può essere risolto con un indirizzo IP? È possibile risolvere le connessioni intermittenti tramite DNS o aggiungendo una voce di file host nel dispositivo downstream.
  • Le porte di comunicazione sono aperte nel firewall? Tra il dispositivo downstream e l'IoT Edge trasparente deve essere possibile la comunicazione basata sul protocollo usato MQTTS:8883/AMQPS:5671/HTTPS:433.

Passaggi successivi

Informazioni sull'estensione delle funzionalità offline ai dispositivi downstream in IoT Edge.