Autenticare un dispositivo downstream sull'hub IoT di Azure

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 uno scenario di gateway trasparente, i dispositivi downstream (talvolta detti dispositivi figlio) necessitano di identità nell'hub IoT come qualsiasi altro dispositivo. Questo articolo illustra le opzioni per l'autenticazione di un dispositivo downstream nell'hub IoT e spiega quindi come dichiarare la connessione gateway.

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 secondo 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.
  3. Connettere il dispositivo downstream al dispositivo gateway e iniziare a inviare messaggi. Per questi passaggi, vedere Connettere un dispositivo downstream a un gateway Azure IoT Edge.

I dispositivi downstream possono eseguire l'autenticazione nell'hub IoT usando uno dei tre metodi seguenti: chiavi simmetriche (talvolta dette chiavi di accesso condiviso), certificati X.509 autofirmati o certificati X.509 firmati dall'autorità di certificazione (CA). I passaggi di autenticazione sono simili a quelli usati per configurare qualsiasi dispositivo non IoT Edge con l'hub IoT, con piccole differenze per dichiarare la relazione del gateway.

Il provisioning automatico dei dispositivi downstream con il servizio Device Provisioning in hub IoT di Azure non è supportato.

Prerequisiti

Completare i passaggi in Configurare un dispositivo IoT Edge come gateway trasparente.

Se si usa l'autenticazione X.509, verranno generati certificati per il dispositivo downstream. Tenete a disposizione certificato della CA radice e lo script di generazione del certificato usato per l'articolo sul gateway trasparente.

Questo articolo si riferisce al nome host del gateway in diversi punti. Il nome host del gateway viene dichiarato nel parametro hostname del file di configurazione nel dispositivo gateway IoT Edge. Viene fatto riferimento a tale valore nella stringa di connessione del dispositivo downstream. Il nome host del gateway deve essere risolvibile in un indirizzo IP, tramite DNS o una voce di file host nel dispositivo downstream.

Registrare un dispositivo con l'hub IoT

Scegliere la modalità di autenticazione del dispositivo downstream con l'hub IoT:

  • Autenticazione con chiave simmetrica: l'hub IoT crea una chiave inserita nel dispositivo downstream. Quando il dispositivo esegue l'autenticazione, l'hub IoT verifica che le due chiavi corrispondano. Non è necessario creare certificati aggiuntivi per usare l'autenticazione con chiave simmetrica.

    Questo metodo è più rapido per iniziare a testare i gateway in uno scenario di sviluppo o di test.

  • Autenticazione autofirmata X.509: talvolta denominata autenticazione di identificazione personale, perché si condivide l'identificazione personale dal certificato X.509 del dispositivo con l'hub IoT.

    L'autenticazione del certificato è consigliata per i dispositivi negli scenari di produzione.

  • Autenticazione con firma CA X.509: caricare il certificato della CA radice nell'hub IoT. Quando i dispositivi presentano il certificato X.509 per l'autenticazione, l'hub IoT verifica che appartenga a una catena di attendibilità firmata dallo stesso certificato della CA radice.

    L'autenticazione del certificato è consigliata per i dispositivi negli scenari di produzione.

Autenticazione con chiavi simmetriche

L'autenticazione tramite chiave simmetrica, o autenticazione tramite chiave di accesso condiviso, è il modo più semplice per eseguire l'autenticazione nell'hub IoT. Con l'autenticazione tramite chiave simmetrica, una chiave Base64 viene associata all'ID dispositivo IoT nell'hub IoT. Questa chiave viene inclusa nelle applicazioni IoT, in modo che il dispositivo possa presentarla quando si connette all'hub IoT.

Aggiungere un nuovo dispositivo IoT nell'hub IoT usando il portale di Azure, l'interfaccia della riga di comando di Azure o l'estensione IoT per Visual Studio Code. Tenere presente che i dispositivi downstream devono essere identificati nell'hub IoT come normali dispositivi IoT, non come dispositivi IoT Edge.

Quando si crea la nuova identità del dispositivo, fornire le informazioni seguenti:

  • Creare un ID per il dispositivo.

  • Selezionare Chiave simmetrica come tipo di autenticazione.

  • Selezionare Imposta un dispositivo padre e selezionare il dispositivo gateway IoT Edge tramite cui si connetterà il dispositivo downstream. È sempre possibile modificare l’elemento padre in un secondo momento.

    Screenshot di come creare un ID dispositivo con autorizzazione con chiave simmetrica nel portale di Azure.

    Nota

    L’impostazione del dispositivo padre usato per essere un passaggio facoltativo per i dispositivi downstream che usano l'autenticazione con chiave simmetrica. Tuttavia, a partire da IoT Edge versione 1.1.0 ogni dispositivo downstream deve essere assegnato a un dispositivo padre.

    È possibile configurare l'hub IoT Edge per tornare al comportamento precedente impostando la variabile di ambiente AuthenticationMode sul valore CloudAndScope.

Inoltre, è possibile usare l'estensione IoT per l'interfaccia della riga di comando di Azure per completare la stessa operazione. L'esempio seguente usa il comando di az iot hub device-identity per creare un nuovo dispositivo IoT con autenticazione con chiave simmetrica e assegnare un dispositivo padre:

az iot hub device-identity create -n {iothub name} -d {new device ID} --device-scope {deviceScope of parent device}

Suggerimento

È possibile elencare le proprietà del dispositivo, incluso l'ambito del dispositivo usando az iot hub device-identity list --hub-name {iothub name}.

Successivamente, recuperare e modificare la stringa di connessione in modo che il dispositivo disponga delle informazioni per la connessione tramite il gateway.

Autenticazione autofirmata X.509

Per l'opzione di autenticazione autofirmata X.509, detta anche autenticazione tramite identificazione personale, è necessario creare certificati da inserire nel dispositivo downstream. Questi certificati hanno un'identificazione personale che viene condivisa con l'hub IoT per l'autenticazione.

  1. Usando il certificato della CA, creare due certificati del dispositivo (primario e secondario) per il dispositivo downstream.

    Se non si dispone di un'autorità di certificazione per creare certificati X.509, è possibile usare gli script di certificato demo di IoT Edge per Creare certificati di dispositivo downstream. Seguire la procedura per la creazione di certificati autofirmati. Usare lo stesso certificato della CA radice che ha generato i certificati per il dispositivo gateway.

    Se si creano certificati personalizzati, assicurarsi che il nome soggetto del certificato del dispositivo sia impostato sull'ID dispositivo che si userà per la registrazione del dispositivo IoT nell'hub IoT di Azure. Questa impostazione è obbligatoria per l'autenticazione.

  2. Recuperare l'impronta digitale SHA1 (detta identificazione personale nell'interfaccia dell'hub IoT) di ogni certificato, costituita da una stringa esadecimale di 40 caratteri. Usare il comando OpenSSL seguente per visualizzare il certificato e trovare l'impronta digitale:

    • Windows:

      openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprint
      
    • Linux:

      openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprint | sed 's/[:]//g'
      

    Eseguire questo comando due volte, una volta per il certificato primario e una per il certificato secondario. Si forniscono le impronte digitali per entrambi i certificati quando si registra un nuovo dispositivo IoT usando certificati X.509 autofirmati.

  3. Passare all'hub IoT nel portale di Azure e creare una nuova identità del dispositivo IoT con i valori seguenti:

    • Fornire l'ID dispositivo corrispondente al nome soggetto dei certificati del dispositivo.
    • Selezionare X.509 autofirmato come tipo di autenticazione.
    • Incollare le stringhe esadecimali copiate dai certificati primario e secondario del dispositivo.
    • Selezionare Imposta un dispositivo padre e scegliere il dispositivo gateway IoT Edge tramite cui si connetterà il dispositivo downstream. È sempre possibile modificare l’elemento padre in un secondo momento.

    Screenshot che illustra come creare un ID dispositivo con un'autorizzazione autofirmata X.509 nel portale di Azure.

  4. Copiare i certificati del dispositivo primario e secondario e le relative chiavi in qualsiasi posizione nel dispositivo downstream. Spostare inoltre una copia del certificato CA radice condiviso che ha generato sia il certificato del dispositivo gateway che i certificati dei dispositivi downstream.

    Si farà riferimento a questi file di certificato in tutte le applicazioni nei dispositivi downstream che si connettono all'hub IoT. È possibile usare un servizio come Azure Key Vault o una funzione come il protocollo Secure Copy per spostare i file di certificato.

  5. A seconda del linguaggio preferito, vedere gli esempi di come fare riferimento ai certificati X.509 nelle applicazioni IoT:

Inoltre, è possibile usare l'estensione IoT per l'interfaccia della riga di comando di Azure per completare la stessa operazione di creazione del dispositivo. L'esempio seguente usa il comando di az iot hub device-identity per creare un nuovo dispositivo IoT con l'opzione di autenticazione autofirmata X.509 dall'Autorità di certificazione e assegna un dispositivo padre:

az iot hub device-identity create -n {iothub name} -d {device ID} --device-scope {deviceScope of gateway device} --am x509_thumbprint --ptp {primary thumbprint} --stp {secondary thumbprint}

Suggerimento

È possibile elencare le proprietà del dispositivo, incluso l'ambito del dispositivo usando az iot hub device-identity list --hub-name {iothub name}.

Successivamente, recuperare e modificare la stringa di connessione in modo che il dispositivo disponga delle informazioni per la connessione tramite il gateway.

Autenticazione con firma CA X.509

Per l'opzione di autenticazione X.509 firmato dall'Autorità di certificazione, è necessario un certificato della CA radice registrato nell'hub IoT che si usa per firmare i certificati per il dispositivo downstream. Qualsiasi dispositivo che usa un certificato che è stato rilasciato tramite il certificato CA radice o qualsiasi certificato intermedio sarà autorizzato a eseguire l'autenticazione.

Questa sezione si basa sulla serie di esercitazioni sui certificati X.509 dell'hub IoT. Per l'introduzione di questa serie, vedere Informazioni sulla crittografia a chiave pubblica e sull'infrastruttura a chiave pubblica X.509.

  1. Usando il certificato della CA, creare due certificati del dispositivo (primario e secondario) per il dispositivo downstream.

    Se non si dispone di un'autorità di certificazione per creare certificati X.509, è possibile usare gli script di certificato demo di IoT Edge per Creare certificati di dispositivo downstream. Seguire la procedura per la creazione di certificati firmati dalla CA. Usare lo stesso certificato della CA radice che ha generato i certificati per il dispositivo gateway.

  2. Seguire le istruzioni nella sezione Dimostrazione del possesso di Configurare la sicurezza X.509 nell'hub IoT di Azure. In tale sezione si eseguono i passaggi seguenti:

    1. Aggiornare un certificato CA radice. Se si usano i certificati demo, la CA radice è il <percorso>/certs/azure-iot-test-only.root.ca.cert.pem.

    2. Verificare di possedere il certificato CA radice.

  3. Seguire le istruzioni riportate nella sezione Creare un dispositivo nell'hub IoT dell'articolo Configurare la sicurezza X.509 nell'hub IoT di Azure. In tale sezione si eseguono i passaggi seguenti:

    1. Aggiungere un nuovo dispositivo. Specificare un nome in lettere minuscole per ID dispositivo e scegliere il tipo di autenticazione X.509 firmato dall'Autorità di certificazione.

    2. Impostare un dispositivo padre. Selezionare Imposta un dispositivo padre e scegliere il dispositivo gateway IoT Edge che consentirà la connessione all'hub IoT.

  4. Creare una catena di certificati per il dispositivo downstream. Usare lo stesso certificato CA radice caricato nell'hub IoT per creare la catena. Usare lo stesso ID dispositivo in lettere minuscole assegnato all'identità del dispositivo nel portale.

  5. Copiare il certificato e le chiavi del dispositivo in qualsiasi posizione nel dispositivo downstream. Spostare inoltre una copia del certificato CA radice condiviso che ha generato sia il certificato del dispositivo gateway che i certificati dei dispositivi downstream.

    Si farà riferimento a questi file in tutte le applicazioni nei dispositivi downstream che si connettono all'hub IoT. È possibile usare un servizio come Azure Key Vault o una funzione come il protocollo Secure Copy per spostare i file di certificato.

  6. A seconda del linguaggio preferito, vedere gli esempi di come fare riferimento ai certificati X.509 nelle applicazioni IoT:

Inoltre, è possibile usare l'estensione IoT per l'interfaccia della riga di comando di Azure per completare la stessa operazione di creazione del dispositivo. L'esempio seguente usa il comando di az iot hub device-identity per creare un nuovo dispositivo IoT con l'opzione di autenticazione X.509 firmato dall'Autorità di certificazione e assegna un dispositivo padre:

az iot hub device-identity create -n {iothub name} -d {device ID} --device-scope {deviceScope of gateway device} --am x509_ca

Suggerimento

È possibile elencare le proprietà del dispositivo, incluso l'ambito del dispositivo usando az iot hub device-identity list --hub-name {iothub name}.

Successivamente, recuperare e modificare la stringa di connessione in modo che il dispositivo disponga delle informazioni per la connessione tramite il gateway.

Recuperare e modificare la stringa di connessione

Dopo aver creato un'identità del dispositivo IoT nel portale, è possibile recuperare le relative chiavi primaria e secondaria. Una di queste chiavi deve essere inclusa nella stringa di connessione usata dalle applicazioni per comunicare con l'hub IoT. Per l'autenticazione tramite chiave simmetrica, l'hub IoT fornisce la stringa di connessione completa nei dati del dispositivo, per praticità. È necessario aggiungere ulteriori informazioni sul dispositivo gateway nella stringa di connessione.

Per le stringhe di connessione per i dispositivi downstream sono necessari i componenti seguenti:

  • Hub IoT a cui il dispositivo si connette: Hostname={iothub name}.azure-devices.net
  • ID dispositivo registrato nell'hub: DeviceID={device ID}
  • Metodo di autenticazione, che si tratti di certificati con chiave simmetrica o X.509
    • Se si usa l'autenticazione con chiave simmetrica, specificare la chiave primaria o secondaria: SharedAccessKey={key}
    • Se si usa l'autenticazione del certificato X.509, specificare un flag: x509=true
  • Dispositivo gateway attraverso cui il dispositivo si connette. Fornire il valore di hostname presente nel file di configurazione del dispositivo gateway IoT Edge: GatewayHostName={gateway hostname}

Nel complesso, una stringa di connessione completa ha un aspetto simile al seguente:

HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz;GatewayHostName=myGatewayDevice

Oppure:

HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;x509=true;GatewayHostName=myGatewayDevice

Grazie alla relazione padre/figlio, è possibile semplificare la stringa di connessione chiamando il gateway direttamente come host della connessione. Ad esempio:

HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz

Questa stringa di connessione modificata verrà usata nell'articolo successivo della serie di gateway trasparenti.

Passaggi successivi

A questo punto, è disponibile un dispositivo IoT Edge registrato con l'hub IoT e configurato come gateway trasparente. Si disporrà anche di un dispositivo downstream registrato con l’hub IoT e che punta al relativo dispositivo gateway.

Sarà quindi necessario configurare il dispositivo downstream per considerare attendibile il dispositivo gateway e connettersi in modo sicuro. Continuare con l'articolo successivo della serie dedicata a gateway trasparenti Connettere un dispositivo downstream a un gateway Azure IoT Edge.