Condividi tramite


Esercitazione: Effettuare il provisioning di più dispositivi X.509 usando i gruppi di registrazione

In questa esercitazione si apprende come effettuare il provisioning di gruppi di dispositivi IoT che usano certificati X.509 per l'autenticazione. Il codice del dispositivo di esempio di Azure IoT SDK viene eseguito nel computer di sviluppo per simulare il provisioning di dispositivi X.509. Nei dispositivi reali il codice del dispositivo viene distribuito ed eseguito dal dispositivo IoT.

Il servizio Device Provisioning in hub IoT di Azure supporta due tipi di registrazioni per i dispositivi di provisioning:

  • Gruppi di registrazioni: usato per registrare più dispositivi correlati. Questa esercitazione illustra il provisioning con i gruppi di registrazione.
  • Registrazioni singole: usato per registrare un singolo dispositivo.

Il servizio Device Provisioning in hub IoT di Azure supporta tre forme di autenticazione per i dispositivi di provisioning:

  • Certificati X.509: questa esercitazione illustra l'attestazione del certificato X.509
  • TPM (Trusted Platform Module)
  • Chiavi simmetriche

Negli scenari di produzione viene usato un modulo di protezione hardware (HSM) per l'archiviazione sicura basata su hardware dei segreti del dispositivo. Può essere usato con una chiave simmetrica, un certificato X.509 o un'attestazione TPM per fornire uno spazio di archiviazione sicuro per i segreti. L'archiviazione basata su hardware dei segreti del dispositivo è consigliabile per proteggere le informazioni riservate come la chiave privata del certificato del dispositivo.

In questa esercitazione vengono completati gli obiettivi seguenti:

  • Creare una catena di certificati di trust per organizzare un gruppo di dispositivi che usano certificati X.509.
  • Creare una nuova registrazione di gruppo che usa la catena di certificati.
  • Configurare l'ambiente di sviluppo.
  • Effettuare il provisioning dei dispositivi usando la catena di certificati mediante il codice di esempio nell’SDK di Azure IoT per dispositivi.

Prerequisiti

I prerequisiti seguenti sono relativi a un ambiente di sviluppo Windows usato per simulare i dispositivi. 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++ abilitato. Sono supportati anche Visual Studio 2015, Visual Studio 2017 e Visual Studio 19.

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

    Importante

    Verificare che nel computer siano installati i prerequisiti di Visual Studio (Visual Studio e il carico di lavoro "Sviluppo per desktop con C++") prima di avviare l'installazione CMake. Quando i prerequisiti sono pronti e il download è stato verificato, installare il sistema di compilazione CMake. Inoltre, le versioni precedenti del sistema di compilazione CMake non riescono a generare il file di soluzione usato in questa esercitazione. 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. È possibile usare il comando seguente per controllare la versione.

    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. Verificare che Git venga aggiunto alle variabili di ambiente accessibili alla finestra di comando.

  • 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.

    Note

    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. Se si sceglie di compilare o scaricare OpenSSL, assicurarsi che il file binario OpenSSL sia accessibile nel percorso e che la variabile di ambiente OPENSSL_CNF sia impostata sul percorso del file openssl.cnf.

Preparare l'ambiente di sviluppo

In questa sezione si prepara un ambiente di sviluppo da usare per creare Azure IoT C SDK. L'SDK include il codice di esempio e strumenti usati dal provisioning dei dispositivi con DPS.

  1. In un browser Web, passare alla pagina Versione di Azure IoT C SDK.

  2. Copiare il nome del tag per la versione più recente di Azure IoT C SDK, ad esempio: lts_03_2025.

  3. Aprire il prompt dei comandi di Windows ed eseguire i comandi seguenti per clonare la versione più recente del repository GitHub di Azure IoT Device SDK per C. Sostituire <release-tag> con il tag copiato nel passaggio precedente.

    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 dell'operazione potrebbe richiedere alcuni minuti.

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

    mkdir cmake
    cd cmake
    
  5. 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.

    Sostituire <path con il percorso assoluto dell'SDK C clonato.

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

    Suggerimento

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

  6. Quando la compilazione ha esito positivo, le ultime righe di output hanno un aspetto simile all'output seguente:

    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 ..
    -- 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
    

Aprire un prompt dei comandi di Windows e clonare il repository GitHub Azure IoT SDK per C# usando il comando seguente:

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

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

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

Aprire un prompt dei comandi di Windows e clonare il repository GitHub Azure IoT SDK per dispositivi per Python usando il comando seguente:

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

Note

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 in versione beta.

  1. Aprire un prompt dei comandi di Windows e clonare il repository GitHub Azure IoT Samples per Java usando il comando seguente:

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

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

Creare una catena di certificati X.509

In questa sezione, viene generata una catena di certificati X.509 di tre certificati per testare ogni dispositivo con questa esercitazione. I certificati hanno la gerarchia seguente.

Diagramma che mostra la relazione tra certificati C A radice, C A intermedio e dispositivo.

Certificato radice Caricare e verificare il certificato radice con DPS. Questa verifica consente a DPS di considerare attendibile il certificato e di verificare i certificati firmati con questo certificato.

Certificato intermedio: è comune usare certificati intermedi per raggruppare i dispositivi logicamente in base alle linee di prodotto, alle divisioni aziendali o ad altri criteri. Questa esercitazione usa una catena di certificati con un certificato intermedio, ma in uno scenario di produzione potrebbero essere presenti diversi certificati. Il certificato intermedio in questa catena è firmato dal certificato radice. Questo certificato viene fornito al gruppo di registrazione creato in DPS. Questa configurazione consente di gestire un intero gruppo di dispositivi i cui certificati del dispositivo sono firmati con lo stesso certificato intermedio.

Certificati del dispositivo: i certificati del dispositivo (talvolta denominati certificato foglia) vengono firmati dal certificato intermedio e archiviati nel dispositivo insieme alla relativa chiave privata. Idealmente, questi elementi sensibili vengono archiviati in modo sicuro con un modulo di protezione hardware. Lo stesso certificato intermedio può firmare più certificati del dispositivo. Ogni dispositivo presenta il certificato e la chiave privata, insieme alla catena di certificati, durante il tentativo di provisioning.

Per altre informazioni sulle catene di certificati, vedere Attestazione del certificato X.509.

Configurare l'ambiente OpenSSL X.509

In questa sezione vengono creati i file di configurazione OpenSSL, la struttura di directory e altri file usati dai comandi OpenSSL.

  1. Aprire un prompt dei comandi Git Bash e passare a una cartella in cui si vogliono generare i certificati e le chiavi X.509 per questa esercitazione.

  2. Creare un file di configurazione OpenSSL denominato openssl_root_ca.cnf per il certificato CA radice. I file di configurazione OpenSSL contengono criteri e definizioni utilizzati dai comandi OpenSSL. Copiare e incollare il testo seguente nel file openssl_root_ca.cnf:

    # OpenSSL root CA configuration file.
    
    [ ca ]
    default_ca = CA_default
    
    [ CA_default ]
    # Directory and file locations.
    dir               = .
    certs             = $dir/certs
    crl_dir           = $dir/crl
    new_certs_dir     = $dir/newcerts
    database          = $dir/index.txt
    serial            = $dir/serial
    RANDFILE          = $dir/private/.rand
    
    # The root key and root certificate.
    private_key       = $dir/private/azure-iot-test-only.root.ca.key.pem
    certificate       = $dir/certs/azure-iot-test-only.root.ca.cert.pem
    
    # For certificate revocation lists.
    crlnumber         = $dir/crlnumber
    crl               = $dir/crl/azure-iot-test-only.intermediate.crl.pem
    crl_extensions    = crl_ext
    default_crl_days  = 30
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md        = sha256
    
    name_opt          = ca_default
    cert_opt          = ca_default
    default_days      = 375
    preserve          = no
    policy            = policy_loose
    
    [ policy_strict ]
    # The root CA should only sign intermediate certificates that match.
    countryName             = optional
    stateOrProvinceName     = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ policy_loose ]
    # Allow the intermediate CA to sign a more diverse range of certificates.
    countryName             = optional
    stateOrProvinceName     = optional
    localityName            = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ req ]
    default_bits        = 2048
    distinguished_name  = req_distinguished_name
    string_mask         = utf8only
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md          = sha256
    
    # Extension to add when the -x509 option is used.
    x509_extensions     = v3_ca
    
    [ req_distinguished_name ]
    # See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
    countryName                     = Country Name (2 letter code)
    stateOrProvinceName             = State or Province Name
    localityName                    = Locality Name
    0.organizationName              = Organization Name
    organizationalUnitName          = Organizational Unit Name
    commonName                      = Common Name
    emailAddress                    = Email Address
    
    # Optionally, specify some defaults.
    countryName_default             = US
    stateOrProvinceName_default     = WA
    localityName_default            =
    0.organizationName_default      = My Organization
    organizationalUnitName_default  =
    emailAddress_default            =
    
    [ v3_ca ]
    # Extensions for a typical CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ v3_intermediate_ca ]
    # Extensions for a typical intermediate CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ usr_cert ]
    # Extensions for client certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Client Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth
    
    [ server_cert ]
    # Extensions for server certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Server Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer:always
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    
    [ crl_ext ]
    # Extension for CRLs.
    authorityKeyIdentifier=keyid:always
    
    [ ocsp ]
    # Extension for OCSP signing certificates.
    basicConstraints = CA:FALSE
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, digitalSignature
    extendedKeyUsage = critical, OCSPSigning
    
  3. Creare un file di configurazione OpenSSL denominato openssl_device_intermediate_ca.cnf da usare per i certificati intermedi e del dispositivo. Copiare e incollare il testo seguente nel file openssl_device_intermediate_ca.cnf:

    # OpenSSL root CA configuration file.
    
    [ ca ]
    default_ca = CA_default
    
    [ CA_default ]
    # Directory and file locations.
    dir               = .
    certs             = $dir/certs
    crl_dir           = $dir/crl
    new_certs_dir     = $dir/newcerts
    database          = $dir/index.txt
    serial            = $dir/serial
    RANDFILE          = $dir/private/.rand
    
    # The root key and root certificate.
    private_key       = $dir/private/azure-iot-test-only.intermediate.key.pem
    certificate       = $dir/certs/azure-iot-test-only.intermediate.cert.pem
    
    # For certificate revocation lists.
    crlnumber         = $dir/crlnumber
    crl               = $dir/crl/azure-iot-test-only.intermediate.crl.pem
    crl_extensions    = crl_ext
    default_crl_days  = 30
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md        = sha256
    
    name_opt          = ca_default
    cert_opt          = ca_default
    default_days      = 375
    preserve          = no
    policy            = policy_loose
    
    [ policy_strict ]
    # The root CA should only sign intermediate certificates that match.
    countryName             = optional
    stateOrProvinceName     = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ policy_loose ]
    # Allow the intermediate CA to sign a more diverse range of certificates.
    countryName             = optional
    stateOrProvinceName     = optional
    localityName            = optional
    organizationName        = optional
    organizationalUnitName  = optional
    commonName              = supplied
    emailAddress            = optional
    
    [ req ]
    default_bits        = 2048
    distinguished_name  = req_distinguished_name
    string_mask         = utf8only
    
    # SHA-1 is deprecated, so use SHA-2 instead.
    default_md          = sha256
    
    # Extension to add when the -x509 option is used.
    x509_extensions     = v3_ca
    
    [ req_distinguished_name ]
    # See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
    countryName                     = Country Name (2 letter code)
    stateOrProvinceName             = State or Province Name
    localityName                    = Locality Name
    0.organizationName              = Organization Name
    organizationalUnitName          = Organizational Unit Name
    commonName                      = Common Name
    emailAddress                    = Email Address
    
    # Optionally, specify some defaults.
    countryName_default             = US
    stateOrProvinceName_default     = WA
    localityName_default            =
    0.organizationName_default      = My Organization
    organizationalUnitName_default  =
    emailAddress_default            =
    
    [ v3_ca ]
    # Extensions for a typical CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ v3_intermediate_ca ]
    # Extensions for a typical intermediate CA.
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid:always,issuer
    basicConstraints = critical, CA:true
    keyUsage = critical, digitalSignature, cRLSign, keyCertSign
    
    [ usr_cert ]
    # Extensions for client certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Client Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = clientAuth
    
    [ server_cert ]
    # Extensions for server certificates.
    basicConstraints = CA:FALSE
    nsComment = "OpenSSL Generated Server Certificate"
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer:always
    keyUsage = critical, digitalSignature, keyEncipherment
    extendedKeyUsage = serverAuth
    
    [ crl_ext ]
    # Extension for CRLs.
    authorityKeyIdentifier=keyid:always
    
    [ ocsp ]
    # Extension for OCSP signing certificates.
    basicConstraints = CA:FALSE
    subjectKeyIdentifier = hash
    authorityKeyIdentifier = keyid,issuer
    keyUsage = critical, digitalSignature
    extendedKeyUsage = critical, OCSPSigning
    
  4. Creare la struttura di directory, il file di database index.txtx e il file del numero serialeserial usato dai comandi OpenSSL in questa esercitazione:

    mkdir certs csr newcerts private
    touch index.txt
    openssl rand -hex 16 > serial
    

Creare un certificato CA radice

Eseguire i comandi seguenti per creare una chiave privata della CA radice e un certificato CA radice. Usare questo certificato e la chiave per firmare il certificato intermedio.

  1. Nel terminale Git Bash, creare una chiave privata della CA radice:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. Creare un certificato CA radice:

    openssl req -new -x509 -config ./openssl_root_ca.cnf -passin pass:1234 -key ./private/azure-iot-test-only.root.ca.key.pem -subj '//CN=Azure IoT Hub CA Cert Test Only' -days 30 -sha256 -extensions v3_ca -out ./certs/azure-iot-test-only.root.ca.cert.pem
    

    Importante

    La barra aggiuntiva specificata per il nome del soggetto (//CN=Azure IoT Hub CA Cert Test Only) è necessaria solo per eseguire l'escape della stringa con Git nelle piattaforme Windows. Nelle piattaforme Linux, specificare il nome del soggetto con una sola barra (/CN=Azure IoT Hub CA Cert Test Only).

  3. Esaminare il certificato CA radice:

    openssl x509 -noout -text -in ./certs/azure-iot-test-only.root.ca.cert.pem
    

    Osservare che Autorità di certificazione e Soggetto sono entrambi CA radice.

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                1d:93:13:0e:54:07:95:1d:8c:57:4f:12:14:b9:5e:5f:15:c3:a9:d4
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN = Azure IoT Hub CA Cert Test Only
            Validity
                Not Before: Jun 20 22:52:23 2022 GMT
                Not After : Jul 20 22:52:23 2022 GMT
            Subject: CN = Azure IoT Hub CA Cert Test Only
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (4096 bit)
    

Creare un certificato CA intermedio

Eseguire i comandi seguenti per creare una chiave privata CA intermedia e un certificato CA intermedio. Usare questo certificato e la chiave per firmare i certificati del dispositivo.

  1. Nel terminale Git Bash creare una chiave privata CA intermedia:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. Creare una richiesta di firma del certificato CA intermedia (CSR):

    openssl req -new -sha256 -passin pass:1234 -config ./openssl_device_intermediate_ca.cnf -subj '//CN=Azure IoT Hub Intermediate Cert Test Only' -key ./private/azure-iot-test-only.intermediate.key.pem -out ./csr/azure-iot-test-only.intermediate.csr.pem
    

    Importante

    La barra aggiuntiva specificata per il nome del soggetto (//CN=Azure IoT Hub Intermediate Cert Test Only) è necessaria solo per eseguire l'escape della stringa con Git nelle piattaforme Windows. Nelle piattaforme Linux, specificare il nome del soggetto con una singola barra (/CN=Azure IoT Hub Intermediate Cert Test Only).

  3. Firmare il certificato intermedio con il certificato CA radice

    openssl ca -batch -config ./openssl_root_ca.cnf -passin pass:1234 -extensions v3_intermediate_ca -days 30 -notext -md sha256 -in ./csr/azure-iot-test-only.intermediate.csr.pem -out ./certs/azure-iot-test-only.intermediate.cert.pem
    
  4. Esaminare il certificato CA intermedio:

    openssl x509 -noout -text -in ./certs/azure-iot-test-only.intermediate.cert.pem
    

    Osservare che l’Autorità di certificazione è la CA radice e il Soggetto è il CA intermedio.

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                d9:55:87:57:41:c8:4c:47:6c:ee:ba:83:5d:ae:db:39
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN = Azure IoT Hub CA Cert Test Only
            Validity
                Not Before: Jun 20 22:54:01 2022 GMT
                Not After : Jul 20 22:54:01 2022 GMT
            Subject: CN = Azure IoT Hub Intermediate Cert Test Only
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (4096 bit)
    

Creare i certificati del dispositivo

In questa sezione vengono creati due certificati del dispositivo e i relativi certificati a catena completi. Il certificato a catena completo contiene il certificato del dispositivo, il certificato CA intermedio e il certificato CA radice. Il dispositivo deve presentare il certificato a catena completo quando esegue la registrazione con DPS.

  1. Creare la prima chiave privata del dispositivo.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. Creare il certificato del dispositivo CSR.

    Il nome comune del soggetto (CN) del certificato del dispositivo deve essere impostato su ID registrazione usato dal dispositivo per la registrazione con DPS. L'ID registrazione è una stringa di caratteri alfanumerici senza distinzione tra maiuscole e minuscole più i caratteri speciali: '-', '.', '_', ':'. L'ultimo carattere deve essere alfanumerico o un trattino ('-'). Il nome comune deve rispettare questo formato. Il DPS supporta ID di registrazione di lunghezza fino a 128 caratteri; tuttavia, la lunghezza massima del nome comune del soggetto in un certificato X.509 è di 64 caratteri. L'ID di registrazione, pertanto, è limitato a 64 caratteri quando si usano certificati X.509. Per le registrazioni di gruppo, l'ID registrazione viene usato anche come ID dispositivo in hub IoT.

    Il nome comune del soggetto viene impostato usando il parametro -subj. Nel comando seguente il nome comune è impostato su device-01.

    openssl req -config ./openssl_device_intermediate_ca.cnf -key ./private/device-01.key.pem -subj '//CN=device-01' -new -sha256 -out ./csr/device-01.csr.pem
    

    Importante

    La barra aggiuntiva specificata per il nome del soggetto (//CN=device-01) è necessaria solo per eseguire l'escape della stringa con Git nelle piattaforme Windows. Nelle piattaforme Linux, specificare il nome del soggetto con una singola barra (/CN=device-01).

  3. Firmare il certificato del dispositivo.

    openssl ca -batch -config ./openssl_device_intermediate_ca.cnf -passin pass:1234 -extensions usr_cert -days 30 -notext -md sha256 -in ./csr/device-01.csr.pem -out ./certs/device-01.cert.pem
    
  4. Esaminare il certificato del dispositivo:

    openssl x509 -noout -text -in ./certs/device-01.cert.pem
    

    Osservare che l’Autorità di certificazione è il CA intermedio e il Soggetto è l’ID di registrazione del dispositivo, device-01.

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number:
                d9:55:87:57:41:c8:4c:47:6c:ee:ba:83:5d:ae:db:3a
            Signature Algorithm: sha256WithRSAEncryption
            Issuer: CN = Azure IoT Hub Intermediate Cert Test Only
            Validity
                Not Before: Jun 20 22:55:39 2022 GMT
                Not After : Jul 20 22:55:39 2022 GMT
            Subject: CN = device-01
            Subject Public Key Info:
                Public Key Algorithm: rsaEncryption
                    RSA Public-Key: (4096 bit)
    
  5. Il dispositivo deve presentare la catena di certificati completa quando esegue l'autenticazione con DPS. Usare il comando seguente per creare la catena di certificati:

    cat ./certs/device-01.cert.pem ./certs/azure-iot-test-only.intermediate.cert.pem ./certs/azure-iot-test-only.root.ca.cert.pem > ./certs/device-01-full-chain.cert.pem
    
  6. Aprire il file della catena di certificati, ./certs/device-01-full-chain.cert.pem, in un editor di testo per esaminarlo. Il testo della catena di certificati contiene la catena completa di tutti e tre i certificati. Questa catena di certificati verrà usata più avanti in questa esercitazione per effettuare il provisioning di device-01.

    Il testo della catena completa ha il formato seguente:

    -----BEGIN CERTIFICATE-----
        <Text for the device certificate includes public key>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
        <Text for the intermediate certificate includes public key>
    -----END CERTIFICATE-----
    -----BEGIN CERTIFICATE-----
        <Text for the root certificate includes public key>
    -----END CERTIFICATE-----
    
  7. Per creare la chiave privata, il certificato X.509 e il certificato a catena completo per il secondo dispositivo, copiare e incollare questo script nel prompt dei comandi di Git Bash. Per creare certificati per più dispositivi, è possibile modificare la variabile registration_id dichiarata all'inizio dello script.

    registration_id=device-02
    echo $registration_id
    openssl genrsa -out ./private/${registration_id}.key.pem 4096
    openssl req -config ./openssl_device_intermediate_ca.cnf -key ./private/${registration_id}.key.pem -subj "//CN=$registration_id" -new -sha256 -out ./csr/${registration_id}.csr.pem
    openssl ca -batch -config ./openssl_device_intermediate_ca.cnf -passin pass:1234 -extensions usr_cert -days 30 -notext -md sha256 -in ./csr/${registration_id}.csr.pem -out ./certs/${registration_id}.cert.pem
    cat ./certs/${registration_id}.cert.pem ./certs/azure-iot-test-only.intermediate.cert.pem ./certs/azure-iot-test-only.root.ca.cert.pem > ./certs/${registration_id}-full-chain.cert.pem
    

    Importante

    La barra aggiuntiva specificata per il nome del soggetto (//CN=$registration_id) è necessaria solo per eseguire l'escape della stringa con Git nelle piattaforme Windows. Nelle piattaforme Linux, specificare il nome del soggetto con una singola barra (/CN=$registration_id).

    Note

    Questo script usa l'ID di registrazione come nome file di base per la chiave privata e i file di certificato. Se l'ID registrazione contiene caratteri che non sono caratteri di nome file validi, è necessario modificare di conseguenza lo script.

    Avviso

    Il testo per i certificati contiene solo le informazioni sulla chiave pubblica.

    Il dispositivo deve però avere accesso anche alla chiave privata del certificato del dispositivo. Ciò è necessario perché il dispositivo deve eseguire la verifica usando tale chiave in fase di esecuzione quando tenta di effettuare il provisioning. La sensibilità di questa chiave è uno dei motivi principali per cui è consigliabile usare l'archiviazione basata su hardware in un modulo di protezione hardware reale per proteggere le chiavi private.

Nella parte restante di questa esercitazione vengono usati i seguenti file:

Certificato File Descrizione
certificato CA radice. certs/azure-iot-test-only.root.ca.cert.pem Caricato in DPS e verificato.
Certificato CA intermedio certs/azure-iot-test-only.intermediate.cert.pem Usato per creare un gruppo di registrazione in DPS.
chiave privata device-01 private/device-01.key.pem Usato dal dispositivo per verificare la proprietà del certificato del dispositivo durante l'autenticazione con DPS.
certificato a catena completo device-01 certs/device-01-full-chain.cert.pem Presentato dal dispositivo per l'autenticazione e la registrazione con DPS.
chiave privata device-02 private/device-02.key.pem Usato dal dispositivo per verificare la proprietà del certificato del dispositivo durante l'autenticazione con DPS.
Certificato a catena completa device-02 certs/device-02-full-chain.cert.pem Presentato dal dispositivo per l'autenticazione e la registrazione con DPS.

Verificare la proprietà del certificato radice

Affinché DPS sia in grado di convalidare la catena di certificati del dispositivo durante l'autenticazione, è necessario caricare e verificare la proprietà del certificato CA radice. Per aggiungere il certificato CA radice all'istanza di DPS, seguire questa procedura:

  1. Nel portale di Azure, passare all'istanza del servizio Device Provisioning.

  2. Aprire Certificati dal menu a sinistra e quindi selezionare Aggiungi per aggiungere un nuovo certificato.

  3. Immettere un nome visualizzato descrittivo per il certificato. Passare al percorso del file del certificato della CA radice certs/azure-iot-test-only.root.ca.cert.pem. Selezionare Carica.

  4. Selezionare la casella Imposta lo stato del certificato da verificare al caricamento.

    Screenshot che mostra l'aggiunta del certificato CA radice e lo stato del certificato impostato su verificato al caricamento selezionato.

  5. Selezionare Salva.

  6. Assicurarsi che il certificato sia visualizzato nella scheda certificato con lo stato Verificato.

    Screenshot che mostra il certificato C A radice verificato nell'elenco dei certificati.

Aggiornare l'archivio certificati nei dispositivi basati su Windows

Nei dispositivi non Windows è possibile passare la catena di certificati dal codice come archivio certificati.

Nei dispositivi basati su Windows è necessario aggiungere i certificati di firma (radice e intermedio) a un archivio certificati Windows. In caso contrario, i certificati di firma non vengono trasportati in DPS da un canale sicuro con Transport Layer Security (TLS).

Suggerimento

È anche possibile usare OpenSSL anziché il canale sicuro (Schannel) con C SDK. Per altre informazioni sull'uso di OpenSSL, vedere Uso di OpenSSL in SDK.

Per aggiungere i certificati di firma all'archivio certificati nei dispositivi basati su Windows:

  1. Nel terminale Git Bash, convertire i certificati di firma in .pfx come indicato di seguito.

    Certificato CA radice:

    openssl pkcs12 -inkey ./private/azure-iot-test-only.root.ca.key.pem -in ./certs/azure-iot-test-only.root.ca.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/root.pfx
    

    Certificato CA intermedio:

    openssl pkcs12 -inkey ./private/azure-iot-test-only.intermediate.key.pem -in ./certs/azure-iot-test-only.intermediate.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/intermediate.pfx
    
  2. Fare clic con il pulsante destro del mouse sul pulsante Start di Windows, quindi scegliere Esegui. Immettere certmgr.msc e selezionare Ok per avviare il manager certificati.

  3. Nel gestore certificati, in Certificati - Utente corrente, selezionare Autorità di certificazione radice attendibili. Quindi nel menu, selezionare Azione>Tutte le attività>Importa.

  4. Seguire i passaggi dell'Importazione guidata dei certificati per importare root.pfx.

    • Assicurarsi di eseguire la ricerca per Scambio informazioni personali (.pfx)
    • Usare 1234 come password.
    • Inserire il certificato nell'archivio certificati Autorità di certificazione radice attendibili.
  5. Ripetere questi passaggi di Gestione certificati per importare intermediate.pfx.

    • Inserire il certificato nell'archivio certificati Autorità di certificazione intermedie.

I certificati di firma sono ora considerati attendibili nel dispositivo basato su Windows e la catena completa può essere trasportata nel servizio Device Provisioning.

Creare un gruppo di registrazioni

  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. Nella parte superiore della pagina selezionare Aggiungi gruppo di registrazione.

  4. Nella scheda Registrazione e provisioning della pagina Aggiungi gruppo di registrazione, specificare le informazioni seguenti per configurare i dettagli del gruppo di registrazione:

    Campo Descrizione
    Attestazione Selezionare Certificati intermedi X.509 come meccanismo di attestazione se si vogliono caricare certificati intermedi da usare solo per questo gruppo di registrazioni o selezionare certificati X.509 caricati in questo servizio Device Provisioning se sono già stati caricati certificati intermedi.
    Impostazioni del certificato X.509 A seconda del metodo di attestazione scelto, caricare o selezionare i certificati intermedi primario e secondario per questo gruppo di registrazioni.
    Nome gruppo Specificare un nome per il gruppo di dispositivi. Il nome del gruppo di registrazione è una stringa senza distinzione tra maiuscole e minuscole (fino a 128 caratteri) di caratteri alfanumerici più i caratteri speciali: '-', '.', '_', ':'. L'ultimo carattere deve essere alfanumerico o un trattino ('-').
    Stato del provisioning Selezionare la casella Abilita questa registrazione se si vuole che questo gruppo di registrazione sia disponibile per il provisioning dei dispositivi. Deselezionare questa casella se si vuole che il gruppo venga disabilitato. Non è 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.

    Screenshot che mostra l'aggiunta di un gruppo di registrazione per l'attestazione del certificato X.509.

  5. Selezionare Avanti: Hub IoT.

  6. Nella scheda Hub IoT della pagina Aggiungi gruppo di registrazione specificare le informazioni seguenti per determinare gli hub IoT in cui il gruppo di 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 il criterio Distribuzione ponderata in modo uniforme.

    Screenshot che mostra la connessione degli hub IoT al nuovo gruppo di registrazione.

  7. Selezionare Avanti: Impostazioni dispositivo

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

    Campo Descrizione
    IoT Edge Selezionare Abilita IoT Edge nei dispositivi di cui è stato effettuato il provisioning se tutti i dispositivi di cui è stato effettuato il provisioning tramite questo gruppo eseguono Azure IoT Edge. Deselezionare questa casella se questo gruppo è solo per i dispositivi non abilitati per IoT Edge. Tutti i dispositivi in un gruppo devono essere abilitati per IoT Edge o nessuno può esserlo.
    Tag del dispositivo Usare questa casella di testo per specificare i tag da applicare ai dispositivi gemelli dei dispositivi di cui è stato effettuato il provisioning.
    Proprietà desiderate Usare questa casella di testo per specificare le proprietà da applicare ai dispositivi gemelli dei dispositivi di cui è stato effettuato il provisioning.

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

  9. Selezionare Avanti: Rivedi + 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 con le informazioni sull'istanza del servizio Device Provisioning. Se un dispositivo è autenticato, viene assegnato a un hub IoT collegato all'istanza del servizio Device Provisioning configurata in questa sezione.

In questa sezione vengono usati il prompt di Git Bash e l'IDE 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 l’istanza del servizio Device Provisioning e prendere nota del valore Ambito ID.

    Screenshot che mostra l'ambito ID nel riquadro di panoramica di DPS.

  2. 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.

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

  4. Trovare la costante id_scope e sostituire il valore con il valore Ambito ID copiato in precedenza. Ad esempio:

    static const char* id_scope = "0ne00000A0A";
    
  5. Trovare la definizione per la funzione main() nello stesso file. Assicurarsi che la variabile hsm_type sia impostata su SECURE_DEVICE_TYPE_X509 e che tutte le altre righe hsm_type siano impostate come commento. Per esempio:

    SECURE_DEVICE_TYPE hsm_type;
    //hsm_type = SECURE_DEVICE_TYPE_TPM;
    hsm_type = SECURE_DEVICE_TYPE_X509;
    //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  6. Salvare le modifiche.

  7. 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 dispositivo. Le catene di certificati usate dai dispositivi simulati in questa esercitazione sono hardcoded nel codice stub personalizzato del modulo di sicurezza hardware. In uno scenario reale, la catena di certificati verrebbe archiviata nell'hardware del modulo di protezione hardware effettivo per offrire una maggiore sicurezza per le informazioni sensibili. Verrebbero quindi implementati metodi simili ai metodi stub usati in questo esempio per leggere i segreti da tale archiviazione basata su hardware.

Anche se l'hardware HSM non è necessario, è consigliabile proteggere informazioni riservate come la chiave privata del certificato. Se un modulo di protezione hardware effettivo viene chiamato dall'esempio, la chiave privata non sarà presente nel codice sorgente. La presenza della chiave nel codice sorgente espone la chiave a chiunque possa visualizzare il codice. Questa inclusione viene eseguita solo in questa esercitazione per facilitare l'apprendimento.

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

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

  2. Aggiornare il valore stringa della costante stringa COMMON_NAME usando il nome comune usato per generare il certificato del dispositivo.

    static const char* const COMMON_NAME = "device-01";
    
  3. Nel terminale Git Bash, eseguire il comando seguente per generare la costante stringa per il certificato del dispositivo:

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

    Copiare l'output di questo comando.

  4. Aggiornare il valore stringa della stringa costante CERTIFICATE usando la catena di certificati salvata in ./certs/device-01-full-chain.cert.pem dopo aver generato i certificati. Usare il testo del certificato di output del passaggio precedente per il valore costante.

    La sintassi del testo del certificato deve corrispondere al modello seguente senza spazi aggiuntivi o analisi eseguite da Visual Studio.

    // <Device/leaf cert>
    // <intermediates>
    // <root>
    static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n"
    "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n"
        ...
    "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n"
    "-----END CERTIFICATE-----\n"
    "-----BEGIN CERTIFICATE-----\n"
    "MIIFPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQsFADAqMSgwJgYDVQQDDB9BenVy\n"
        ...
    "MTEyMjIxMzAzM1owNDEyMDAGA1UEAwwpQXp1cmUgSW9UIEh1YiBJbnRlcm1lZGlh\n"
    "-----END CERTIFICATE-----\n"
    "-----BEGIN CERTIFICATE-----\n"
    "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n"
        ...
    "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n"
    "-----END CERTIFICATE-----";        
    
  5. In Git Bash, eseguire il comando seguente per generare la costante stringa per la chiave privata del dispositivo:

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

    Copiare l'output di questo comando.

  6. Aggiornare il valore stringa della costante PRIVATE_KEY con la chiave privata per il certificato del dispositivo. Usare il testo della chiave privata di output del passaggio precedente per il valore costante.

    La sintassi del testo della chiave privata deve corrispondere al modello seguente senza spazi aggiuntivi o l'analisi eseguita 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-----";
    
  7. Salvare le modifiche.

  8. 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. Quando viene chiesto di ricompilare il progetto, selezionare per ricompilare il progetto prima dell'esecuzione.

    L'output seguente è un esempio dell'avvio corretto del dispositivo simulato device-01 e della connessione al servizio di provisioning. Il dispositivo è stato assegnato a un hub IoT ed è stato 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-hub-2.azure-devices.net, deviceId: device-01
    Press enter key to exit:
    
  2. Ripetere i passaggi descritti in Configurare il codice stub del modulo di protezione hardware personalizzato per il secondo dispositivo (device-02) ed eseguire di nuovo l'esempio. Usare i valori seguenti per il dispositivo:

    Descrizione valore
    Nome comune "device-02"
    Catena di certificati completa Generare il testo usando ./certs/device-02-full-chain.cert.pem
    Chiave privata Generare il testo usando ./private/device-02.key.pem

    L'output seguente è un esempio di avvio corretto del dispositivo device-02 simulato e della connessione al servizio di provisioning. Il dispositivo è stato assegnato a un hub IoT ed è stato 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-hub-2.azure-devices.net, deviceId: device-02
    Press enter key to exit:
    

Il codice di esempio C# è configurato per l'uso di certificati X.509 archiviati in un file formattato PKCS #12 protetto da password (.pfx). I certificati della catena completi creati in precedenza sono nel formato PEM. Per convertire i certificati a catena completi in formato PKCS#12, immettere i comandi seguenti nel prompt di Git Bash dalla directory in cui sono stati eseguiti in precedenza i comandi OpenSSL.

  • device-01

    openssl pkcs12 -inkey ./private/device-01.key.pem -in ./certs/device-01-full-chain.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/device-01-full-chain.cert.pfx
    
  • device-02

    openssl pkcs12 -inkey ./private/device-02.key.pem -in ./certs/device-02-full-chain.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/device-02-full-chain.cert.pfx
    

Nella parte restante di questa sezione usare il prompt dei comandi di Windows.

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

  2. Copiare il valore dell'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 nel repository SDK clonato in un passaggio precedente: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. Immettere il comando seguente per compilare ed eseguire l'esempio di provisioning di dispositivo X.509. Sostituire <id-scope> con l'ambito ID copiato dal portale di Azure. Sostituire <your-certificate-folder> con il percorso della cartella in cui sono stati eseguiti i comandi OpenSSL.

    dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-01-full-chain.cert.pfx -p 1234
    

    Il dispositivo si connette al DPS e viene assegnato a un hub IoT. Il dispositivo invia quindi un messaggio di telemetria all'hub IoT. L'output dovrebbe essere simile all'esempio seguente:

    Loading the certificate...
    Found certificate: 3E5AA3C234B2032251F0135E810D75D38D2AA477 CN=Azure IoT Hub CA Cert Test Only; PrivateKey: False
    Found certificate: 81FE182C08D18941CDEEB33F53F8553BA2081E60 CN=Azure IoT Hub Intermediate Cert Test Only; PrivateKey: False
    Found certificate: 5BA1DB226D50EBB7A6A6071CED4143892855AE43 CN=device-01; PrivateKey: True
    Using certificate 5BA1DB226D50EBB7A6A6071CED4143892855AE43 CN=device-01
    Initializing the device provisioning client...
    Initialized for registration Id device-01.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device device-01 registered to contoso-hub-2.azure-devices.net.
    Creating X509 authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    

    Note

    Se non si specifica il certificato e la password nella riga di comando, per impostazione predefinita il file del certificato è ./certificate.pfx e viene richiesta la password.

    È possibile passare altri parametri per modificare TransportType (-t) e GlobalDeviceEndpoint (-g). Per un elenco completo dei parametri, digitare dotnet run -- --help.

  5. Per registrare il secondo dispositivo, eseguire di nuovo l'esempio usando il certificato a catena completo.

    dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-02-full-chain.cert.pfx -p 1234
    

Nei passaggi seguenti usare il prompt dei comandi di Windows.

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

  2. Copiare il valore dell'ambito ID.

    Screenshot dell'ambito ID nel 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
    
  4. Nella cartella provisioning\device\samples, aprire register_x509.js ed esaminare il codice.

    Per impostazione predefinita, l'esempio è MQTT come protocollo di trasporto. Se si desidera utilizzare un protocollo diverso, impostare come commento la riga seguente e rimuovere il commento dalla riga per il protocollo appropriato.

    var ProvisioningTransport = require('azure-iot-provisioning-device-mqtt').Mqtt;
    

    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 DPS. Per questa esercitazione, usare l'endpoint globale, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE Ambito ID per l'istanza del DPS.
    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 di certificato a catena completo del dispositivo.
    KEY_FILE Percorso del file di chiave privata del certificato del dispositivo.

    Il metodo ProvisioningDeviceClient.register() tenta di registrare il dispositivo.

  5. Aggiungere variabili di ambiente per l'endpoint del dispositivo globale e l'ambito ID. Sostituire <id-scope> con il valore copiato dal portale di Azure.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. Impostare la variabile di ambiente per l'ID di registrazione del dispositivo. L'ID di registrazione per il dispositivo IoT deve corrispondere al nome comune del soggetto nel certificato del dispositivo. Per questa esercitazione, device-01 è sia il nome del soggetto che l'ID di registrazione per il dispositivo.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. Impostare le variabili di ambiente per il certificato a catena completo del dispositivo e i file di chiave privata del dispositivo generati in precedenza. Sostituire <your-certificate-folder> con il percorso della cartella in cui sono stati eseguiti i comandi OpenSSL.

    set CERTIFICATE_FILE=<your-certificate-folder>\certs\device-01-full-chain.cert.pem
    set KEY_FILE=<your-certificate-folder>\private\device-01.key.pem
    
  8. 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=device-01
    Client connected
    send status: MessageEnqueued
    
  9. Aggiornare le variabili di ambiente per il secondo dispositivo (device-02) in base alla tabella seguente ed eseguire di nuovo l'esempio.

    Variabile di ambiente valore
    PROVISIONING_REGISTRATION_ID device-02
    CERTIFICATE_FILE <your-certificate-folder>\certs\device-02-full-chain.cert.pem
    KEY_FILE <your-certificate-folder>\private\device-02.key.pem

Nei passaggi seguenti usare il prompt dei comandi di Windows.

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

  2. Copiare Ambito ID.

    Screenshot dell'ambito ID nel 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 eseguire 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 DPS. Per questa esercitazione, usare l'endpoint globale, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE Ambito ID per l'istanza del DPS.
    DPS_X509_REGISTRATION_ID ID di registrazione per il dispositivo. Deve corrispondere al nome comune del soggetto nel certificato del dispositivo.
    X509_CERT_FILE Percorso del file di certificato a catena completo del dispositivo.
    X509_KEY_FILE Percorso del file di chiave privata del certificato del dispositivo.
    PASS_PHRASE La passphrase usata per crittografare il file di chiave privata (se usato). Non necessario per questa esercitazione.
  4. Aggiungere le variabili di ambiente per l'endpoint del dispositivo globale e l'ambito ID. Per la variabile di ambito ID, usare il valore copiato dalla portale di Azure.

    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 di registrazione del dispositivo. L'ID di registrazione per il dispositivo IoT deve corrispondere al nome comune del soggetto nel certificato del dispositivo. Per questa esercitazione, device-01 è sia il nome del soggetto che l'ID di registrazione per il dispositivo.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. Impostare le variabili di ambiente per il certificato a catena completo del dispositivo e i file di chiave privata del dispositivo generati in precedenza. Sostituire <your-certificate-folder> con il percorso della cartella in cui sono stati eseguiti i comandi OpenSSL.

    set X509_CERT_FILE=<your-certificate-folder>\certs\device-01-full-chain.cert.pem
    set X509_KEY_FILE=<your-certificate-folder>\private\device-01.key.pem
    
  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()).

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

    python provision_x509.py
    

    L'output dovrebbe essere simile all'esempio seguente:

    The complete registration result is
    device-01
    contoso-hub-2.azure-devices.net
    initialAssignment
    null
    Will send telemetry from the provisioned device
    sending message #1
    sending message #2
    sending message #3
    sending message #4
    sending message #5
    sending message #6
    sending message #7
    sending message #8
    sending message #9
    sending message #10
    done sending message #1
    done sending message #2
    done sending message #3
    done sending message #4
    done sending message #5
    done sending message #6
    done sending message #7
    done sending message #8
    done sending message #9
    done sending message #10
    
  9. Aggiornare le variabili di ambiente per il secondo dispositivo (device-02) in base alla tabella seguente ed eseguire di nuovo l'esempio.

    Variabile di ambiente valore
    DPS_X509_REGISTRATION_ID device-02
    X509_CERT_FILE <your-certificate-folder>\certs\device-02-full-chain.cert.pem
    X509_KEY_FILE <your-certificate-folder>\private\device-02.key.pem

Nei passaggi seguenti, si usa 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 Ambito ID.

    Screenshot dell'ambito ID nel portale di Azure.

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

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Immettere il servizio di provisioning e le informazioni sull'identità 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. Per idScopeusare l'Ambito ID copiato in precedenza. Per l'endpoint globale, usare l'Endpoint del dispositivo globale. Questo endpoint è lo stesso per ogni istanza di DPS, global.azure-devices-provisioning.net.

      private static final String idScope = "[Your ID scope here]";
      private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
      
    3. L'esempio usa per impostazione predefinita HTTPS come protocollo di trasporto. Se si desidera modificare il protocollo, impostare come commento la riga seguente e rimuovere il commento dalla riga per il protocollo che si desidera usare.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Aggiornare il valore della stringa costante leafPublicPem con il valore del certificato del dispositivo, device-01.cert.pem.

      La sintassi del testo del certificato deve corrispondere al 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 valore costante stringa leafPublicPem e lo scrive nell'output.

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

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

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

      La sintassi del testo della chiave privata deve corrispondere al 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-----";
      

      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 valore costante stringa leafPrivateKey e lo scrive nell'output.

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

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

    6. Aggiungere una stringa costante rootPublicPem con il valore del certificato CA radice, azure-iot-test-only.root.ca.cert.pem. È possibile aggiungerlo subito dopo la costante leafPrivateKey.

      La sintassi del testo del certificato deve corrispondere al modello seguente senza spazi o caratteri aggiuntivi.

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

      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 valore costante stringa rootPublicPem e lo scrive nell'output.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.root.ca.cert.pem
      

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

    7. Aggiungere una stringa costante intermediatePublicPem con il valore del certificato CA intermedio, azure-iot-test-only.intermediate.cert.pem. È possibile aggiungerlo subito dopo la costante precedente.

      La sintassi del testo del certificato deve corrispondere al modello seguente senza spazi o caratteri aggiuntivi.

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

      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 valore costante stringa intermediatePublicPem e lo scrive nell'output.

      sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' ./certs/azure-iot-test-only.intermediate.cert.pem
      

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

    8. Trovare le righe seguenti nel metodo main.

      // For group enrollment uncomment this line
      //signerCertificatePemList.add("<Your Signer/intermediate Certificate Here>");
      

      Aggiungere queste due righe direttamente sotto di esse per aggiungere i certificati CA intermedi e radice alla catena di firma. La catena di firma deve includere l'intera catena di certificati fino a e includere un certificato verificato con DPS.

      signerCertificatePemList.add(intermediatePublicPem);
      signerCertificatePemList.add(rootPublicPem);
      

      Note

      L'ordine in cui vengono aggiunti i certificati di firma è importante. L'esempio fallisce se l'ordine cambia.

    9. Salvare le modifiche.

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

    mvn clean install
    cd target
    
  6. La compilazione restituisce .jar file nella cartella target 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 di .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 DPS, che effettua il provisioning del dispositivo in un hub IoT. Dopo il provisioning del dispositivo, l'esempio invierà alcuni messaggi di test all'hub IoT.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-10-21 10:41:20,476 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2
    2022-10-21 10:41:20,479 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-10-21 10:41:20,482 INFO (global.azure-devices-provisioning.net-4f8279ac-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-10-21 10:41:20,652 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-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-10-21 10:41:20,680 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates
    2022-10-21 10:41:21,603 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-10-21 10:41:21,605 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    2022-10-21 10:41:24,868 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : contoso-hub-2.azure-devices.net
    Device ID : device-01
    2022-10-21 10:41:30,514 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-10-21 10:41:30,526 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-10-21 10:41:30,533 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.2
    2022-10-21 10:41:30,590 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-10-21 10:41:30,625 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-10-21 10:41:31,452 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-10-21 10:41:31,453 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/#
    2022-10-21 10:41:31,523 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/# was acknowledged
    2022-10-21 10:41:31,525 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-10-21 10:41:31,528 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-10-21 10:41:31,531 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-10-21 10:41:31,532 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-10-21 10:41:31,535 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-10-21 10:41:31,536 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-10-21 10:41:31,537 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-10-21 10:41:31,539 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] )
    Press any key to exit...
    2022-10-21 10:41:31,540 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] )
    2022-10-21 10:41:31,844 DEBUG (MQTT Call: 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] )
    2022-10-21 10:41:31,846 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK
    Message sent!
    
  7. Aggiornare le costanti per il secondo dispositivo (device-02) in base alla tabella seguente, ricompilare ed eseguire di nuovo l'esempio.

    Costante File da usare
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./private/device-02.key.pem

Confermare la registrazione del provisioning del dispositivo

Esaminare i record di registrazione del gruppo di registrazione per visualizzare i dettagli di registrazione per i dispositivi:

  1. Passare all'istanza del servizio Device Provisioning nel portale di Azure.

  2. Nel menu Impostazioni, selezionare Gestisci registrazioni.

  3. Selezionare Gruppi di registrazione. La voce del gruppo di registrazione X.509 creata in precedenza dovrebbe essere visualizzata nell'elenco.

  4. Selezionare la voce di registrazione. Selezionare quindi Dettagli accanto allo stato di registrazione per visualizzare i dispositivi registrati tramite il gruppo di registrazione. L'hub IoT a cui è stato assegnato ogni dispositivo, i relativi ID dispositivo e le date e le ore in cui sono stati registrati vengono visualizzati nell'elenco.

    Screenshot che mostra i dettagli dello stato di registrazione per il gruppo di registrazione nel portale di Azure.

  5. È possibile selezionare uno dei dispositivi per visualizzare altri dettagli per il dispositivo.

Per verificare i dispositivi nell'hub IoT:

  1. Nel 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 dei dispositivi è stato eseguito correttamente, gli ID dispositivo, device-01 e device-02, devono essere visualizzati nell'elenco, con Stato impostato come abilitato. Se i dispositivi non sono visualizzati, selezionare Aggiorna.

    Screenshot che mostra che i dispositivi sono registrati con l'hub IoT nel portale di Azure.

Pulire le risorse

Una volta terminati il test e l'esplorazione di questo client del dispositivo di esempio, usare la procedura seguente per eliminare tutte le risorse create da questa esercitazione.

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

Eliminare il gruppo di registrazione

  1. Dal menu del portale nel portale di Azure selezionare Tutte le risorse.

  2. Selezionare l'istanza di DPS.

  3. Nel menu del servizio, in Impostazioni, selezionare Gestisci registrazioni.

  4. Nel riquadro di lavoro selezionare la scheda Gruppi di registrazione .

  5. Selezionare il gruppo di registrazione usato per questa esercitazione.

  6. Nella pagina Dettagli registrazione selezionare Dettagli accanto all'etichetta Stato registrazione .

  7. Nella pagina Registrazioni del gruppo di iscrizione, selezionare la casella di controllo accanto all'intestazione della colonna ID dispositivo per selezionare tutti i record di registrazione del gruppo di iscrizione. Selezionare Elimina dalla barra dei comandi per eliminare i record di registrazione.

    Importante

    L'eliminazione di un gruppo di registrazione non comporta l'eliminazione dei record di registrazione associati. Questi record orfani vengono conteggiati rispetto alla quota di registrazioni per l'istanza del servizio Device Provisioning. Per questo motivo, è consigliabile eliminare tutti i record di registrazione associati a un gruppo di registrazione prima di eliminare il gruppo di registrazione stesso.

  8. Tornare alla pagina Gestisci registrazioni e verificare che la scheda Gruppi di registrazione sia selezionata.

  9. Selezionare la casella di controllo accanto al nome del gruppo di registrazione usato per questa esercitazione.

  10. Selezionare Elimina dalla barra dei comandi.

Eliminare i certificati CA registrati da DPS

  1. Nel menu del servizio della tua istanza DPS, sotto Impostazioni, seleziona Certificati.

  2. Per ogni certificato caricato e verificato in questa esercitazione, selezionare il certificato, quindi selezionare Elimina dalla barra dei comandi e confermare la scelta di rimuoverlo.

Eliminare le registrazioni dei dispositivi da hub IoT

  1. Dal menu del portale nel portale di Azure selezionare Tutte le risorse.

  2. Selezionare l'hub IoT.

  3. Nel menu del servizio, in Gestione dei dispositivi, selezionare Dispositivi.

  4. Selezionare la casella di controllo accanto all'ID dispositivo dei dispositivi registrati in questa esercitazione. Ad esempio, device-01 e device-02.

  5. Selezionare Elimina dalla barra dei comandi.

Passaggi successivi

In questa esercitazione, è stato eseguito il provisioning di più dispositivi X.509 nell'hub IoT usando un gruppo di registrazione. Informazioni su come eseguire il provisioning di dispositivi IoT in più hub.