Avvio rapido: Effettuare il provisioning di un dispositivo simulato con certificato X.509

In questa guida introduttiva si crea un dispositivo simulato nel computer Windows. Il dispositivo simulato è configurato per l'uso dell'attestazione del certificato X.509 per l'autenticazione. Dopo aver configurato il dispositivo, eseguirne il provisioning nell'hub IoT usando il servizio Device Provisioning hub IoT di Azure.

Se non si ha familiarità con il processo di provisioning, vedere la panoramica del provisioning . È anche necessario aver completato la procedura descritta in Configurare il servizio Device Provisioning in hub IoT con il portale di Azure prima di continuare.

Questa guida introduttiva illustra una soluzione per una workstation basata su Windows. Tuttavia, è anche possibile eseguire le procedure in Linux. Per un esempio di Linux, vedere Esercitazione: Effettuare il provisioning per la latenza geografica.

Prerequisiti

I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.

  • Installare Visual Studio 2022 con il carico di lavoro "Sviluppo di applicazioni desktop con C++". Sono supportati anche Visual Studio 2015, Visual Studio 2017 e Visual Studio 19. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.

  • Installare il sistema di compilazione CMake più recente. Assicurarsi di selezionare l'opzione che aggiunge il file eseguibile CMake al percorso.

    Importante

    Verificare che i prerequisiti di Visual Studio (Visual Studio e il carico di lavoro "Sviluppo di applicazioni desktop con C++") siano installati nel computer prima di avviare l'installazione CMake . Quando i prerequisiti sono pronti e il download è stato verificato, installare il sistema di compilazione CMake. Tenere inoltre presente che le versioni precedenti del sistema di compilazione CMake non riescono a generare il file di soluzione usato in questo articolo. Assicurarsi di usare la versione più recente di CMake.

I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.

  • Installare .NET SDK 6.0 o versione successiva nel computer basato su Windows. Per controllare la versione, è possibile usare il comando seguente.

    dotnet --info
    

I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.

I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows.

I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.

  • Installare la versione più recente di Git. Assicurarsi che Git venga aggiunto alle variabili di ambiente accessibili alla finestra di comando. Vedere Strumenti client Git di Software Freedom Conservancy per la versione più recente degli strumenti da installare, che include Git Bash, l'app da riga di git comando che è possibile usare per interagire con il repository Git locale.

  • Assicurarsi che OpenSSL sia installato nel computer. In Windows l'installazione di Git include un'installazione di OpenSSL. È possibile accedere a OpenSSL dal prompt di Git Bash. Per verificare che OpenSSL sia installato, aprire un prompt di Git Bash e immettere openssl version.

    Nota

    A meno che non si abbia familiarità con OpenSSL e che sia già installato nel computer Windows, è consigliabile usare OpenSSL dal prompt di Git Bash. In alternativa, è possibile scegliere di scaricare il codice sorgente e compilare OpenSSL. Per altre informazioni, vedere la pagina Download openSSL. In alternativa, è possibile scaricare OpenSSL predefinito da una terza parte. Per altre informazioni, vedere il wiki di OpenSSL. Microsoft non garantisce la validità dei pacchetti scaricati da terze parti. Se si sceglie di compilare o scaricare OpenSSL, assicurarsi che il file binario OpenSSL sia accessibile nel percorso e che la OPENSSL_CNF variabile di ambiente sia impostata sul percorso del file openssl.cnf .

  • Aprire un prompt dei comandi di Windows e un prompt di Git Bash.

    I passaggi descritti in questa guida introduttiva presuppongono che si stia usando un computer Windows e l'installazione di OpenSSL installata come parte di Git. Usare il prompt di Git Bash per eseguire comandi OpenSSL e il prompt dei comandi di Windows per tutto il resto. Se si usa Linux, è possibile eseguire tutti i comandi da una shell Bash.

Preparare l'ambiente di sviluppo

In questa sezione viene preparato un ambiente di sviluppo usato per compilare Azure IoT C SDK. Il codice di esempio tenta di effettuare il provisioning del dispositivo durante la sequenza di avvio del dispositivo.

  1. Aprire un Web browser e passare alla pagina Versione di Azure IoT C SDK.

  2. Selezionare la scheda Tag nella parte superiore della pagina.

  3. Copiare il nome del tag per la versione più recente di Azure IoT C SDK.

  4. Nel prompt dei comandi di Windows eseguire i comandi seguenti per clonare la versione più recente del repository GitHub azure IoT Device SDK per C . Sostituire <release-tag> con il tag copiato nel passaggio precedente, ad esempio : lts_01_2023.

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    Il completamento di questa operazione potrebbe richiedere alcuni minuti.

  5. Al termine dell'operazione, eseguire i comandi seguenti dalla azure-iot-sdk-c directory :

    mkdir cmake
    cd cmake
    
  6. L'esempio di codice usa un certificato X.509 per fornire l'attestazione tramite l'autenticazione X.509. Eseguire il comando seguente per compilare una versione dell'SDK specifica per la piattaforma di sviluppo che include il client di provisioning di dispositivi. Viene generata una soluzione di Visual Studio per il dispositivo simulato nella directory cmake.

    Quando si specifica il percorso usato con -Dhsm_custom_lib nel comando seguente, assicurarsi di usare il percorso assoluto della libreria nella cmake directory creata in precedenza. Il percorso mostrato presuppone che sia stato clonato L'SDK C nella directory radice dell'unità C. Se è stata usata un'altra directory, modificare il percorso di conseguenza.

    cmake -Duse_prov_client:BOOL=ON -Dhsm_custom_lib=c:/azure-iot-sdk-c/cmake/provisioning_client/samples/custom_hsm_example/Debug/custom_hsm_example.lib ..
    

Suggerimento

Se cmake non trova il compilatore C++, è possibile che si verifichino errori di compilazione durante l'esecuzione del comando precedente. In tal caso, provare a eseguire il comando nel prompt dei comandi di Visual Studio.

  1. Quando la compilazione ha esito positivo, le ultime righe di output sono simili all'output seguente:

    -- Building for: Visual Studio 17 2022
    -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000.
    -- The C compiler identification is MSVC 19.32.31329.0
    -- The CXX compiler identification is MSVC 19.32.31329.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/azure-iot-sdk-c/cmake
    

Nel prompt dei comandi di Windows clonare il repository GitHub azure IoT SDK per C# usando il comando seguente:

git clone https://github.com/Azure/azure-iot-sdk-csharp.git

Nel prompt dei comandi di Windows clonare Azure IoT SDK per Node.js repository GitHub usando il comando seguente:

git clone https://github.com/Azure/azure-iot-sdk-node.git

Nel prompt dei comandi di Windows clonare il repository GitHub azure IoT Device SDK per Python usando il comando seguente:

git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive

Nota

Gli esempi usati in questa esercitazione si trovano nel ramo v2 del repository azure-iot-sdk-python. La versione 3 di Python SDK è disponibile per l'uso nella versione beta.

  1. Nel prompt dei comandi di Windows clonare il repository Azure IoT Samples for Java GitHub usando il comando seguente:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Passare alla directory radice azure-iot-sdk-java e compilare il progetto per scaricare tutti i pacchetti necessari.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    

Creare un certificato per un dispositivo X.509 autofirmato

In questa sezione si usa OpenSSL per creare un certificato X.509 autofirmato e una chiave privata. Questo certificato viene caricato nell'istanza del servizio di provisioning e verificato dal servizio.

Attenzione

Usare i certificati creati con OpenSSL in questa guida introduttiva solo per i test di sviluppo. Non usare questi certificati nell'ambiente di produzione. Questi certificati scadono dopo 30 giorni e possono contenere password hardcoded, ad esempio 1234. Per informazioni su come ottenere certificati adatti per l'uso nell'ambiente di produzione, vedere Come ottenere un certificato CA X.509 nella documentazione di hub IoT di Azure.

Eseguire i passaggi descritti in questa sezione nel prompt di Git Bash.

  1. Nel prompt di Git Bash passare a una directory in cui si vogliono creare i certificati.

  2. Esegui questo comando:

    winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
    

    Importante

    La barra aggiuntiva specificata per il nome soggetto (//CN=my-x509-device) è necessaria solo per eseguire l'escape della stringa con Git nelle piattaforme Windows.

  3. Quando viene chiesto di immettere la pass phrase PEM: usare la pass phrase 1234.

  4. Quando viene chiesto Verifica : immettere pem pass phrase:, usare di nuovo la pass phrase 1234 .

    Un file di certificato di chiave pubblica (device-cert.pem) e un file di chiave privata (device-key.pem) devono ora essere generati nella directory in cui è stato eseguito il openssl comando.

    Il nome comune del soggetto del file di certificato è impostato su my-x509-device. Per le registrazioni basate su X.509, l'ID registrazione è impostato sul nome comune. L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole di caratteri alfanumerici più i caratteri speciali: '-', '.''_', , ':'. L'ultimo carattere deve essere alfanumerico o trattino ('-'). Il nome comune deve essere conforme a questo formato. DPS supporta ID di registrazione fino a 128 caratteri; Tuttavia, la lunghezza massima del nome comune del soggetto in un certificato X.509 è di 64 caratteri. L'ID registrazione, pertanto, è limitato a 64 caratteri quando si usano certificati X.509.

  5. Il file di certificato è codificato in Base 64. Per visualizzare il nome comune del soggetto (CN) e altre proprietà del file di certificato, immettere il comando seguente:

    winpty openssl x509 -in device-cert.pem -text -noout
    
    Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-x509-device
        Validity
            Not Before: May  5 21:41:42 2022 GMT
            Not After : Jun  4 21:41:42 2022 GMT
        Subject: CN = my-x509-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7:
                    e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29:
                    ...
                    23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f:
                    9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85:
                    0e:cd:53
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
            X509v3 Authority Key Identifier:
                keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
    
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
    Signature Algorithm: sha256WithRSAEncryption
         82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a:
         ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1:
         ...
         cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c:
         ac:d2:49:b9:36:d2:b0:21
    
  1. Il codice di esempio richiede una chiave privata non crittografata. Eseguire il comando seguente per creare una chiave privata non crittografata:

    winpty openssl rsa -in device-key.pem -out unencrypted-device-key.pem
    
  2. Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza, 1234.

Mantenere aperto il prompt di Git Bash. Sarà necessario più avanti in questo argomento di avvio rapido.

Il codice di esempio C# è configurato per l'uso di certificati X.509 archiviati in un file in formato PKCS#12 protetto da password (certificate.pfx). È ancora necessario il file di certificato con chiave pubblica formattata PEM (device-cert.pem) appena creato per creare una singola voce di registrazione più avanti in questa guida introduttiva.

  1. Per generare il file formattato PKCS12 previsto dall'esempio, immettere il comando seguente:

    winpty openssl pkcs12 -inkey device-key.pem -in device-cert.pem -export -out certificate.pfx
    
  2. Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza, 1234.

  3. Quando viene chiesto di immettere Export Password:, usare la password 1234.

  4. Quando viene richiesto Verifica: immettere Export Password:, usare di nuovo la password 1234 .

    Un file di certificato formattato PKCS12 (certificate.pfx) dovrebbe ora essere generato nella directory in cui è stato eseguito il openssl comando.

  5. Copiare il file di certificato formattato PKCS12 nella directory del progetto per l'esempio di provisioning di dispositivi X.509. Il percorso specificato è relativo al percorso in cui è stato scaricato il repository di esempio.

    cp certificate.pfx ./azure-iot-sdk-csharp/provisioning/device/samples/"Getting Started"/X509Sample
    

Non è necessario il prompt di Git Bash per il resto di questa guida introduttiva. Tuttavia, è possibile mantenerlo aperto per controllare il certificato in caso di problemi nei passaggi successivi.

  1. Il codice di esempio richiede una chiave privata non crittografata. Eseguire il comando seguente per creare una chiave privata non crittografata:

    winpty openssl rsa -in device-key.pem -out unencrypted-device-key.pem
    
  2. Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza, 1234.

  3. Copiare il certificato del dispositivo e la chiave privata non crittografata nella directory del progetto per l'esempio di provisioning dei dispositivi X.509. Il percorso specificato è relativo al percorso in cui è stato scaricato l'SDK.

    cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples
    cp unencrypted-device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
    

Non è necessario il prompt di Git Bash per il resto di questa guida introduttiva. Tuttavia, è possibile mantenerlo aperto per controllare il certificato in caso di problemi nei passaggi successivi.

  1. Copiare il certificato del dispositivo e la chiave privata nella directory del progetto per l'esempio di provisioning di dispositivi X.509. Il percorso specificato è relativo al percorso in cui è stato scaricato l'SDK.

    cp device-cert.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
    cp device-key.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
    

Non è necessario il prompt di Git Bash per il resto di questa guida introduttiva. Tuttavia, è possibile mantenerlo aperto per controllare il certificato in caso di problemi nei passaggi successivi.

  1. Il codice di esempio Java richiede una chiave privata non crittografata. Eseguire il comando seguente per creare una chiave privata non crittografata:

    winpty openssl pkey -in device-key.pem -out unencrypted-device-key.pem
    
  2. Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza, 1234.

Mantenere aperto il prompt di Git Bash. Sarà necessario più avanti in questo argomento di avvio rapido.

Creare una registrazione dei dispositivi

Il servizio Device Provisioning in Azure IoT supporta due tipi di registrazione:

Questo articolo illustra una registrazione singola per un singolo dispositivo di cui eseguire il provisioning con un hub IoT.

  1. Accedere al portale di Azure e aprire l'istanza del servizio Device Provisioning.

  2. Selezionare Gestisci registrazioni nella sezione Impostazioni del menu di spostamento.

  3. Selezionare la scheda Registrazioni singole, quindi selezionare Aggiungi registrazione singola.

    Screenshot che mostra l'opzione aggiungi registrazione singola.

  4. Nella pagina Registrazione e provisioning della pagina Aggiungi registrazione specificare le informazioni seguenti per configurare i dettagli della registrazione:

    Campo Descrizione
    Attestazione Selezionare Certificati client X.509 come meccanismo di attestazione.
    Impostazioni certificato X.509 Caricare uno o due certificati che verranno usati per verificare il dispositivo per questa registrazione.
    Stato del provisioning Selezionare la casella Abilita questa registrazione se si vuole che la registrazione sia disponibile per effettuare il provisioning del dispositivo. Deselezionare questa casella se si vuole disabilitare la registrazione. È possibile modificare questa impostazione in un secondo momento.
    Criteri di reprovisioning Scegliere un criterio di reprovisioning che rifletta il modo in cui si vuole che il servizio Device Provisioning gestisca i dispositivi che richiedono il provisioning. Per altre informazioni, vedere Criteri di reprovisioning.
  5. Selezionare Avanti: Hub IoT.

  6. Nella scheda Hub IoT della pagina Aggiungi registrazione specificare le informazioni seguenti per determinare gli hub IoT a cui la registrazione può effettuare il provisioning dei dispositivi:

    Campo Descrizione
    Hub IoT di destinazione Selezionare uno o più hub IoT collegati oppure aggiungere un nuovo collegamento a un hub IoT. Per altre informazioni sul collegamento degli hub IoT all'istanza del servizio Device Provisioning, vedere Come collegare e gestire hub IoT.
    Criteri di allocazione Se sono stati selezionati più hub IoT collegati, selezionare la modalità di assegnazione dei dispositivi ai diversi hub. Per altre informazioni sui criteri di allocazione, vedere Come usare i criteri di allocazione.

    Se è stato selezionato un solo hub IoT collegato, è consigliabile usare i criteri di distribuzione ponderati in modo uniforme.
  7. Selezionare Avanti: Impostazioni dispositivo

  8. Nella scheda Impostazioni dispositivo della pagina Aggiungi registrazione specificare le informazioni seguenti per definire la modalità di configurazione dei dispositivi di cui è stato appena effettuato il provisioning:

    Campo Descrizione
    ID dispositivo Specificare un ID dispositivo che verrà assegnato al dispositivo di cui è stato effettuato il provisioning in hub IoT. Se non si specifica un ID dispositivo, verrà usato l'ID di registrazione.
    IoT Edge Selezionare Abilita IoT Edge nei dispositivi di cui è stato effettuato il provisioning se il dispositivo di cui è stato effettuato il provisioning eseguirà Azure IoT Edge. Deselezionare questa casella se questa registrazione è per un dispositivo non abilitato per IoT Edge.
    Tag del dispositivo Usare questa casella di testo per specificare i tag da applicare al dispositivo gemello del dispositivo di cui è stato effettuato il provisioning.
    Proprietà desiderate Usare questa casella di testo per specificare le proprietà desiderate che si desidera applicare al dispositivo gemello del dispositivo di cui è stato effettuato il provisioning.

    Per altre informazioni, vedere Comprendere e usare dispositivi gemelli nell'hub IoT.

  9. Selezionare Avanti: Rivedi e crea.

  10. Nella scheda Rivedi e crea verificare tutti i valori e quindi selezionare Crea.

Preparare ed eseguire il codice di provisioning del dispositivo

In questa sezione si aggiorna il codice di esempio per inviare la sequenza di avvio del dispositivo all'istanza del servizio Device Provisioning. Questa sequenza di avvio fa sì che il dispositivo venga riconosciuto e assegnato a un hub IoT collegato all'istanza del servizio Device Provisioning.

In questa sezione si usa il prompt di Git Bash e l'IDE di Visual Studio.

Configurare il codice del dispositivo di provisioning

In questa sezione si aggiorna il codice di esempio con le informazioni sull'istanza del servizio Device Provisioning.

  1. Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.

  2. Copiare il valore ambito ID.

    Screenshot dell'ambito ID in portale di Azure.

  3. Avviare Visual Studio e aprire il nuovo file di soluzione che è stato creato nella directory cmake creata nella radice del repository Git azure-iot-sdk-c. Il nome del file di soluzione è azure_iot_sdks.sln.

  4. In Esplora soluzioni per Visual Studio passare a Provision_Samples prov_dev_client_sample >> File di origine e aprire prov_dev_client_sample.c.

  5. Trovare la id_scope costante e sostituire il valore con il valore di ambito ID copiato nel passaggio 2.

    static const char* id_scope = "0ne00000A0A";
    
  6. Trovare la definizione per la funzione main() nello stesso file. Assicurarsi che la hsm_type variabile sia impostata su SECURE_DEVICE_TYPE_X509.

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    hsm_type = SECURE_DEVICE_TYPE_X509;
    //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. Salva le modifiche.

  8. Fare clic con il pulsante destro del mouse sul progetto prov_dev_client_sample e scegliere Imposta come progetto di avvio.

Configurare il codice stub del modulo di protezione hardware personalizzato

Le specifiche di interazione con uno spazio di archiviazione sicuro reale basato su hardware variano a seconda dell'hardware. Di conseguenza, il certificato e la chiave privata usati dal dispositivo simulato in questa guida introduttiva sono hardcoded nel codice stub del modulo di protezione hardware personalizzato.

Per aggiornare il codice stub del modulo di protezione hardware personalizzato per simulare l'identità del dispositivo con ID my-x509-device:

  1. In Esplora soluzioni per Visual Studio passare a Provision_Samples file di origine custom_hsm_example >> e aprire custom_hsm_example.c.

  2. Aggiornare il valore stringa della COMMON_NAME costante stringa usando il nome comune usato durante la generazione del certificato del dispositivo, my-x509-device.

    static const char* const COMMON_NAME = "my-x509-device";
    
  3. Aggiornare il valore stringa della CERTIFICATE stringa costante usando il certificato del dispositivo, device-cert.pem, generato in precedenza.

    La sintassi del testo del certificato nell'esempio deve seguire il modello seguente senza spazi aggiuntivi o analisi eseguiti da Visual Studio.

    static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n"
    "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n"
        ...
    "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n"
    "-----END CERTIFICATE-----";        
    

    L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il CERTIFICATE valore costante stringa e la scrive nell'output.

    sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
    

    Copiare e incollare il testo del certificato di output per il valore costante.

  4. Aggiornare il valore stringa della PRIVATE_KEY costante con la chiave privata non crittografata per il certificato del dispositivo, unencrypted-device-key.pem.

    La sintassi del testo della chiave privata deve seguire il modello seguente senza spazi aggiuntivi o analisi eseguiti da Visual Studio.

    static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n"
    "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n"
        ...
    "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n"
    "-----END RSA PRIVATE KEY-----";
    

    L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il PRIVATE_KEY valore costante stringa e la scrive nell'output.

    sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
    

    Copiare e incollare il testo della chiave privata di output per il valore costante.

  5. Salva le modifiche.

  6. Fare clic con il pulsante destro del mouse sul progetto custom_hsm_-_example e scegliere Compila.

    Importante

    È necessario compilare il progetto custom_hsm_example prima di compilare il resto della soluzione nella sezione successiva.

Eseguire l'esempio

  1. Nel menu di Visual Studio selezionare Debug>Avvia senza eseguire debug per eseguire la soluzione. Se viene richiesto di ricompilare il progetto, selezionare per ricompilare il progetto prima dell'esecuzione.

    L'output seguente è un esempio dell'avvio corretto del dispositivo my-x509-device simulato e della connessione al servizio di provisioning. Il dispositivo viene assegnato a un hub IoT e registrato:

    Provisioning API Version: 1.8.0
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-iot-hub-2.azure-devices.net, deviceId: my-x509-device
    Press enter key to exit:
    

In questa sezione si usa il prompt dei comandi di Windows.

  1. Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.

  2. Copiare il valore ambito ID.

    Screenshot dell'ambito ID in portale di Azure.

  3. Nel prompt dei comandi di Windows passare alla directory X509Sample. Questa directory si trova nella directory .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample dalla directory in cui sono stati clonati gli esempi nel computer.

  4. Immettere il comando seguente per compilare ed eseguire l'esempio di provisioning dei dispositivi X.509 (sostituire il <IDScope> valore con l'ambito ID copiato nella sezione precedente. Per impostazione predefinita, il file di certificato è ./certificate.pfx e richiede la password pfx.

    dotnet run -- -s <IDScope>
    

    Se si vuole passare il certificato e la password come parametro, è possibile usare il formato seguente.

    Nota

    È possibile passare parametri aggiuntivi durante l'esecuzione dell'applicazione per modificare TransportType (-t) e GlobalDeviceEndpoint (-g).

    dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
    
  5. Il dispositivo si connette al servizio Device Provisioning e viene assegnato a un hub IoT. Il dispositivo invia quindi un messaggio di telemetria all'hub IoT.

    Loading the certificate...
    Enter the PFX password for certificate.pfx:
    ****
    Found certificate: A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device; PrivateKey: True
    Using certificate A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device
    Initializing the device provisioning client...
    Initialized for registration Id my-x509-device.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device my-x509-device registered to MyExampleHub.azure-devices.net.
    Creating X509 authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

In questa sezione si usa il prompt dei comandi di Windows.

  1. Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.

  2. Copiare il valore ambito ID.

    Screenshot dell'ambito ID in portale di Azure.

  3. Nel prompt dei comandi di Windows passare alla directory di esempio e installare i pacchetti necessari per l'esempio. Il percorso visualizzato è relativo alla posizione in cui è stato clonato l'SDK.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    

    L'esempio usa cinque variabili di ambiente per autenticare ed effettuare il provisioning di un dispositivo IoT tramite DPS. Queste variabili di ambiente sono:

    Nome variabile Descrizione
    PROVISIONING_HOST Endpoint da usare per la connessione all'istanza del servizio Device Provisioning. Per questa guida introduttiva, usare l'endpoint globale , global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE Ambito ID per l'istanza del servizio Device Provisioning.
    PROVISIONING_REGISTRATION_ID ID di registrazione per il dispositivo. Deve corrispondere al nome comune del soggetto nel certificato del dispositivo.
    CERTIFICATE_FILE Percorso del file del certificato del dispositivo.
    KEY_FILE Percorso del file di chiave privata del dispositivo.
  4. Aggiungere variabili di ambiente per l'endpoint del dispositivo globale e l'ambito ID. Sostituire <id-scope> con il valore copiato nel passaggio 2.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  5. Impostare la variabile di ambiente per l'ID registrazione del dispositivo. L'ID di registrazione per il dispositivo IoT deve corrispondere al nome comune del soggetto nel certificato del dispositivo. Se sono stati eseguiti i passaggi descritti in questa guida introduttiva per generare un certificato di test autofirmato, my-x509-device il nome del soggetto e l'ID di registrazione per il dispositivo.

    set PROVISIONING_REGISTRATION_ID=my-x509-device
    
  6. Impostare le variabili di ambiente per i file di chiave privata del dispositivo e (non crittografati).

    set CERTIFICATE_FILE=.\device-cert.pem
    set KEY_FILE=.\unencrypted-device-key.pem
    
  7. Eseguire l'esempio e verificare che il provisioning del dispositivo sia stato eseguito correttamente.

    node register_x509.js
    

    L'output dovrebbe essere simile all'esempio seguente:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=my-x509-device
    Client connected
    send status: MessageEnqueued
    

In questa sezione si usa il prompt dei comandi di Windows.

  1. Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.

  2. Copiare i valori dell'ambito ID e dell'endpoint del dispositivo globale.

    Screenshot dell'ambito ID e dell'endpoint del dispositivo globale in portale di Azure.

  3. Nel prompt dei comandi di Windows passare alla directory dell'esempio di provision_x509.py . Il percorso visualizzato è relativo alla posizione in cui è stato clonato l'SDK.

    cd ./azure-iot-sdk-python/samples/async-hub-scenarios
    

    Questo esempio usa sei variabili di ambiente per autenticare ed effettuare il provisioning di un dispositivo IoT tramite DPS. Queste variabili di ambiente sono:

    Nome variabile Descrizione
    PROVISIONING_HOST Endpoint globale usato per la connessione all'istanza del servizio Device Provisioning.
    PROVISIONING_IDSCOPE Ambito ID per l'istanza del servizio Device Provisioning.
    DPS_X509_REGISTRATION_ID ID di registrazione per il dispositivo. Deve corrispondere anche al nome del soggetto nel certificato del dispositivo.
    X509_CERT_FILE Percorso del file del certificato del dispositivo.
    X509_KEY_FILE Percorso del file di chiave privata del certificato del dispositivo.
    PASS_PHRASE La pass phrase usata per crittografare il certificato e il file di chiave privata (1234).
  4. Aggiungere le variabili di ambiente per l'endpoint del dispositivo globale e l'ambito ID.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Impostare la variabile di ambiente per l'ID registrazione. L'ID di registrazione per il dispositivo IoT deve corrispondere al nome del soggetto nel certificato del dispositivo. Se sono stati eseguiti i passaggi descritti in questa guida introduttiva per generare un certificato di test autofirmato, my-x509-device il nome del soggetto e l'ID di registrazione per il dispositivo.

    set DPS_X509_REGISTRATION_ID=my-x509-device
    
  6. Impostare le variabili di ambiente per il file di certificato, il file di chiave privata e la pass phrase.

    set X509_CERT_FILE=./device-cert.pem
    set X509_KEY_FILE=./device-key.pem
    set PASS_PHRASE=1234
    
  7. Esaminare il codice per provision_x509.py. Se non si usa Python versione 3.7 o successiva, apportare la modifica del codice indicata qui per sostituire asyncio.run(main()) e salvare le modifiche.

  8. Eseguire l'esempio. L'esempio si connette al servizio Device Provisioning, che effettua il provisioning del dispositivo a un hub IoT. Dopo il provisioning del dispositivo, l'esempio invia alcuni messaggi di test all'hub IoT.

    $ python azure-iot-sdk-python/samples/async-hub-scenarios/provision_x509.py
    RegistrationStage(RequestAndResponseOperation): Op will transition into polling after interval 2.  Setting timer.
    The complete registration result is
    my-x509-device
    TestHub12345.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #4
    sending message #7
    sending message #2
    sending message #8
    sending message #5
    sending message #9
    sending message #1
    sending message #6
    sending message #10
    sending message #3
    done sending message #4
    done sending message #7
    done sending message #2
    done sending message #8
    done sending message #5
    done sending message #9
    done sending message #1
    done sending message #6
    done sending message #10
    done sending message #3
    

In questa sezione si usano sia il prompt dei comandi di Windows che il prompt di Git Bash.

  1. Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.

  2. Copiare i valori dell'ambito ID e dell'endpoint del dispositivo globale.

    Screenshot dell'ambito ID e dell'endpoint del dispositivo globale in portale di Azure.

  3. Nel prompt dei comandi di Windows passare alla cartella del progetto di esempio. Il percorso visualizzato è relativo alla posizione in cui è stato clonato l'SDK

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Immettere le informazioni sull'identità del servizio di provisioning e X.509 nel codice di esempio. Queste informazioni vengono usate durante il provisioning, per l'attestazione del dispositivo simulato, prima della registrazione del dispositivo.

    1. Aprire il file .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java nell'editor preferito.

    2. Aggiornare i valori seguenti con l'ambito ID e l'endpointglobale del servizio di provisioning copiati in precedenza.

      private static final String idScope = "[Your ID scope here]";
      private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
      
    3. Aggiornare il valore della leafPublicPem stringa costante con il valore del certificato device-cert.pem.

      La sintassi del testo del certificato deve seguire il modello seguente senza spazi o caratteri aggiuntivi.

      private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" +
      "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" +
          ...
      "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" +
      "-----END CERTIFICATE-----";        
      

      L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il leafPublicPem valore costante stringa e la scrive nell'output.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
      

      Copiare e incollare il testo del certificato di output per il valore costante.

    4. Aggiornare il valore stringa della leafPrivateKey costante con la chiave privata non crittografata per il certificato del dispositivo, unencrypted-device-key.pem.

      La sintassi del testo della chiave privata deve seguire il modello seguente senza spazi o caratteri aggiuntivi.

      private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" +
      "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" +
          ...
      "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" +
      "-----END PRIVATE KEY-----";
      

      L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il leafPrivateKey valore costante stringa e la scrive nell'output.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
      

      Copiare e incollare il testo della chiave privata di output per il valore costante.

    5. Salva le modifiche.

  5. Compilare l'esempio e quindi passare alla target cartella .

    mvn clean install
    cd target
    
  6. La compilazione restituisce .jar file nella target cartella con il formato di file seguente: provisioning-x509-sample-{version}-with-deps.jar; ad esempio: provisioning-x509-sample-1.8.1-with-deps.jar. Eseguire il file .jar. Potrebbe essere necessario sostituire la versione nel comando seguente.

    java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
    

    L'esempio si connette al servizio Device Provisioning, che effettua il provisioning del dispositivo a un hub IoT. Dopo il provisioning del dispositivo, l'esempio invia alcuni messaggi di test all'hub IoT.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-05-11 09:42:05,025 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.0
    2022-05-11 09:42:05,027 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-05-11 09:42:05,030 INFO (global.azure-devices-provisioning.net-6255a8ba-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-05-11 09:42:05,252 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message
    2022-05-11 09:42:05,286 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates
    2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    Waiting for Provisioning Service to register
    2022-05-11 09:42:15,685 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : MyExampleHub.azure-devices.net
    Device ID : java-device-01
    2022-05-11 09:42:25,057 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-05-11 09:42:25,080 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-05-11 09:42:25,087 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.0.3
    2022-05-11 09:42:25,129 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-05-11 09:42:25,150 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-05-11 09:42:25,982 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-05-11 09:42:25,983 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/#
    2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# was acknowledged
    2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-05-11 09:42:26,070 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-05-11 09:42:26,073 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-05-11 09:42:26,074 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-05-11 09:42:26,075 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-05-11 09:42:26,077 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    Press any key to exit...
    2022-05-11 09:42:26,079 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    2022-05-11 09:42:26,422 DEBUG (MQTT Call: java-device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    2022-05-11 09:42:26,425 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] ) with status OK
    Message sent!
    

Confermare la registrazione del provisioning dei dispositivi

Per visualizzare l'hub IoT a cui è stato effettuato il provisioning del dispositivo, esaminare i dettagli di registrazione della registrazione singola creata in precedenza:

  1. In portale di Azure passare al servizio Device Provisioning.

  2. Nel menu Impostazioni selezionare Gestisci registrazioni.

  3. Selezionare Registrazioni singole. La voce di registrazione X.509 creata in precedenza, my-x509-device, dovrebbe essere visualizzata nell'elenco.

  4. Selezionare la voce di registrazione. L'hub IoT a cui è stato assegnato il dispositivo e il relativo ID dispositivo viene visualizzato in Stato registrazione.

Per verificare il dispositivo nell'hub IoT:

  1. In portale di Azure passare all'hub IoT a cui è stato assegnato il dispositivo.

  2. Nel menu Gestione dei dispositivi selezionare Dispositivi.

  3. Se il provisioning del dispositivo è stato eseguito correttamente, il relativo ID dispositivo, my-x509-device, dovrebbe essere visualizzato nell'elenco, con Stato impostato come abilitato. Se il dispositivo non è visualizzato, selezionare Aggiorna.

    Screenshot che mostra che il dispositivo è registrato con l'hub IoT in portale di Azure.

Importante

Se si è modificato lo stato iniziale del dispositivo gemello rispetto al valore predefinito della voce di registrazione del dispositivo, è possibile eseguire il pull dello stato del dispositivo desiderato dall'hub e agire di conseguenza. Per altre informazioni, vedere Comprendere e usare dispositivi gemelli nell'hub IoT

Pulire le risorse

Se si prevede di continuare a lavorare ed esplorare l'esempio client del dispositivo, non pulire le risorse create in questa guida introduttiva. Se non si prevede di continuare, seguire questa procedura per eliminare tutte le risorse create da questa guida introduttiva.

Eliminare la registrazione del dispositivo

  1. Chiudere la finestra di output di esempio di client del dispositivo sul computer.

  2. Nel menu a sinistra nella portale di Azure selezionare Tutte le risorse.

  3. Selezionare il servizio Device Provisioning.

  4. Nel menu Impostazioni selezionare Gestisci registrazioni.

  5. Selezionare la scheda Registrazioni singole.

  6. Selezionare la casella di controllo accanto all'ID di registrazione del dispositivo registrato in questa guida introduttiva.

  7. Nella parte superiore della pagina selezionare Elimina.

Eliminare la registrazione del dispositivo da hub IoT

  1. Nel menu a sinistra nella portale di Azure selezionare Tutte le risorse.

  2. Selezionare l'hub IoT.

  3. Nel menu Explorer selezionare Dispositivi IoT.

  4. Selezionare la casella di controllo accanto all'ID dispositivo del dispositivo registrato in questa guida introduttiva.

  5. Nella parte superiore della pagina selezionare Elimina.

Passaggi successivi

In questa guida introduttiva è stato effettuato il provisioning di un singolo dispositivo nell'hub IoT usando una registrazione singola. Successivamente, informazioni su come effettuare il provisioning di più dispositivi tra più hub.