Condividi tramite


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 è di fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

Qui sono disponibili istruzioni per stabilire una connessione attendibile tra i dispositivi downstream e i gateway trasparenti di 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. In questo caso, i termini gateway e gateway IoT Edge fanno riferimento 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 per fungere da gateway trasparente.

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

  3. Connessione 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 sulla sicurezza del livello di trasporto (TLS) e sul certificato.
  • Librerie TLS che funzionano in diversi sistemi operativi che gestiscono i certificati in modo diverso.

Vengono quindi descritti gli esempi di Azure IoT, nella lingua preferita, per ottenere il dispositivo per inviare messaggi al gateway.

Prerequisiti

Acquisire quanto segue per preparare il dispositivo downstream:

  • Un dispositivo downstream.

    Questo dispositivo può essere qualsiasi applicazione o piattaforma con un'identità creata con il servizio cloud 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.

    Più avanti, questo articolo illustra i passaggi per la connessione di un dispositivo IoT come dispositivo downstream. Se si preferisce usare un dispositivo IoT Edge come dispositivo downstream, vedere Connessione dispositivi Azure IoT Edge insieme per creare una gerarchia (arco annidato).

  • Un file di certificato CA radice.

    Questo file è stato usato per generare il certificato della CA del dispositivo 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. Questo certificato attendibile convalida le connessioni TLS (Transport Layer Security) al dispositivo gateway. Vedere i dettagli di utilizzo nella sezione Specificare il certificato CA radice.

  • Un stringa di connessione modificato che punta al dispositivo gateway.

    Come modificare il stringa di connessione è illustrato in Autenticare un dispositivo downstream per hub IoT di Azure.

Nota

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

Informazioni sui concetti fondamentali su TLS e sui 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. Questa convalida client della catena di certificati server è denominata convalida della catena di server. Il client sfida il server a dimostrare il possesso della chiave privata associata al certificato del server in un processo denominato prova di possesso. La combinazione di convalida della catena di server e di verifica del possesso è detta autenticazione 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. In genere, quando ci si connette ai siti Web, un browser viene preconfigurato con certificati CA comunemente usati in modo che il client abbia un processo semplice.

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 a hub IoT potrebbe avere problemi durante il tentativo di connessione 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, ma si adattano. È possibile scegliere di usare un certificato CA pubblico, ad esempio Baltimore, o usare un certificato 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 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 dell'installazione 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 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 CA nell'archivio certificati del sistema operativo o (per determinate lingue) facendo riferimento al certificato all'interno delle applicazioni usando gli SDK di Azure IoT.

È possibile usare un servizio come Azure Key Vault o una funzione come Il protocollo di copia sicura per spostare il file di certificato.

Installare i certificati nel sistema operativo

Quando il certificato 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 Azure IoT SDK.

Installare il certificato 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

Gli SDK di Azure IoT si connettono a un dispositivo IoT Edge usando semplici applicazioni di esempio. L'obiettivo degli esempi è 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:

  • Il hub IoT stringa di connessione, dal dispositivo downstream, modificato in modo da puntare al dispositivo gateway.

  • Tutti i certificati necessari per autenticare il dispositivo downstream per hub IoT. Per altre informazioni, vedere Autenticare un dispositivo downstream per 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.

A questo momento è possibile usare i certificati con un esempio nel linguaggio preferito:

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 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, modificare il comando in base alle esigenze per AMQPS (5671) o HTTPS (443).

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

Screenshot di come verificare una connessione 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 nel stringa di connessione uguale al valore hostname nel file di configurazione di IoT Edge nel dispositivo gateway?
  • Il nome host del gateway è risolvibile in un indirizzo IP? È possibile risolvere le connessioni intermittenti usando DNS o aggiungendo una voce di file host nel dispositivo downstream.
  • Le porte di comunicazione sono aperte nel firewall? La comunicazione basata sul protocollo usato (MQTTS:8883/AMQPS:5671/HTTPS:433) deve essere possibile tra il dispositivo downstream e transparent IoT Edge.

Passaggi successivi

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