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

Questa esercitazione illustra 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 verrà 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 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 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
  • Modulo 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. È consigliabile usare l'archiviazione basata su hardware dei segreti del dispositivo per proteggere 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 usando il codice di esempio in Azure IoT SDK 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++". 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 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 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. 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.

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

Preparare l'ambiente di sviluppo

In questa sezione viene preparato un ambiente di sviluppo usato per compilare Azure IoT C SDK. L'SDK include codice di esempio e strumenti usati dal provisioning dei dispositivi con DPS.

  1. In un Web browser 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_2024.

  3. Aprire un prompt dei comandi di Windows ed 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.

    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.

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

    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++, è 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.

  6. Quando la compilazione ha esito positivo, le ultime righe di output sono simili 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 Azure IoT SDK per Node.js repository GitHub 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 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. Aprire un prompt dei comandi di Windows e 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 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.

Diagram that shows relationship of root C A, intermediate C A, and device certificates.

Certificato radice Caricare e verificare il certificato radice con DPS. Questa verifica consente al servizio Device Provisioning di considerare attendibile il certificato e verificare i certificati firmati da tale 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. In questa esercitazione viene usata 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 nel servizio Device Provisioning. 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. È possibile firmare più certificati dispositivo con lo stesso certificato intermedio. 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 di 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.txt e il file seriale del numero di serie 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 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 l'autorità emittente e l'oggettosono entrambe la 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 :Create an intermediate CA certificate signing request (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 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
    

    Si noti che l'autorità emittente è la CA radice e l'oggetto è l'autorità di certificazione intermedia.

    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 certificati del dispositivo

In questa sezione vengono creati due certificati del dispositivo e i relativi certificati a catena completa. Il certificato della catena completa contiene il certificato del dispositivo, il certificato CA intermedio e il certificato CA radice. Il dispositivo deve presentare il certificato completo della catena 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 soggetto (CN) del certificato del dispositivo deve essere impostato sull'ID registrazione usato dal dispositivo per la registrazione con DPS. 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. 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 -subj parametro . 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 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
    

    Si noti che l'autorità di certificazione è l'autorità di certificazione intermedia e l'oggetto è 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 device-01di .

    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 completa 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 registration_id variabile 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 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).

    Nota

    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, sarà 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 natura sensibile 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 file seguenti:

Certificate File Descrizione
certificato CA radice. certs/azure-iot-test-only.root.ca.cert.pem Caricato nel servizio Device Provisioning 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 della catena completa 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 della 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 del servizio Device Provisioning, seguire questa procedura:

  1. Nella 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 certs/azure-iot-test-only.root.ca.cert.pemdi certificato CA radice. Selezionare Carica.

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

    Screenshot that shows adding the root CA certificate and the set certificate status to verified on upload box selected.

  5. Seleziona Salva.

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

    Screenshot that shows the verified root C A certificate in the list of certificates.

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 verranno trasportati al servizio Device Provisioning tramite un canale protetto con TLS (Transport Layer Security).

Suggerimento

È anche possibile usare OpenSSL anziché il canale sicuro (Schannel) con C SDK. Per altre informazioni sull'uso di OpenSSL, vedere Uso di OpenSSL nell'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 gestione certificati.

  3. In Gestione certificati, in Certificati - Utente corrente selezionare Autorità di certificazione radice attendibili. Scegliere quindi Azione>tutte le attività>importate dal menu.

  4. Seguire i passaggi dell'Importazione guidata 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 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 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 desidera che il gruppo venga disabilitato. È 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 that shows adding an enrollment group for X.509 certificate attestation.

  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 a 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 i criteri di distribuzione ponderati in modo uniforme.

    Screenshot that shows connecting IoT hubs to the new enrollment group.

  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 appena 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 eseguiranno Azure IoT Edge. Deselezionare questa casella se questo gruppo è solo per i dispositivi non abilitati per IoT Edge. Tutti i dispositivi in un gruppo saranno abilitati per IoT Edge o nessuno può essere.
    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à desiderate che si desidera 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 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 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 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 l'istanza del servizio Device Provisioning e prendere nota del valore ambito ID.

    Screenshot that shows the ID scope on the DPS overview pane.

  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 hsm_type variabile sia impostata su SECURE_DEVICE_TYPE_X509 e che tutte le altre hsm_type righe 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. Salva 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 dell'interazione con l'archiviazione sicura effettiva basata su hardware variano a seconda dell'hardware del dispositivo. Le catene di certificati usate dai dispositivi simulati in questa esercitazione verranno hardcoded nel codice stub del modulo di protezione hardware personalizzato. 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. I metodi simili ai metodi stub usati in questo esempio vengono quindi implementati per leggere i segreti dall'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 operazione viene eseguita solo in questa esercitazione per facilitare l'apprendimento.

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

  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 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 CERTIFICATE stringa costante 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 PRIVATE_KEY costante 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 analisi eseguite 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. Salva 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 di avvio e connessione del dispositivo device-01 simulato 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 con formattazione PKCS#12 protetto da password (pfx). I certificati della catena completa creati in precedenza sono nel formato PEM. Per convertire i certificati a catena completa 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 ambito ID.

    Screenshot of the ID scope on Azure portal.

  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 dei dispositivi 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 servizio Device Provisioning 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.
    

    Nota

    Se non si specifica il certificato e la password nella riga di comando, per impostazione predefinita il file di certificato sarà ./certificate.pfx e verrà richiesta la password.

    È possibile passare parametri aggiuntivi per modificare TransportType (-t) e GlobalDeviceEndpoint (-g). Per un elenco completo di parametri di tipo dotnet run -- --help.

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

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

    Screenshot of the ID scope in the Azure portal.

  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 servizio Device Provisioning. Per questa esercitazione, 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 di certificato della catena completa del dispositivo.
    KEY_FILE Percorso del file di chiave privata del certificato del dispositivo.

    Il ProvisioningDeviceClient.register() metodo 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 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 completa 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 l'ambito ID.

    Screenshot of the ID scope in the Azure portal.

  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 da usare per la connessione all'istanza del servizio Device Provisioning. Per questa esercitazione, usare l'endpoint globale , global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE Ambito ID per l'istanza del servizio Device Provisioning.
    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 della catena completa del dispositivo.
    X509_KEY_FILE Percorso del file di chiave privata del certificato del dispositivo.
    PASS_PHRASE La pass phrase 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 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 completa 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 servizio Device Provisioning, che eseguirà 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 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 l'ambito ID.

    Screenshot of the ID scope in the Azure portal.

  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. Questa operazione viene usata 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 del servizio Device Provisioning, 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 vuole usare.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Aggiornare il valore della leafPublicPem stringa costante 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 leafPublicPem valore costante stringa e la 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 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 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 leafPrivateKey valore costante stringa e la 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 rootPublicPem stringa costante con il valore del certificato CA radice, azure-iot-test-only.root.ca.cert.pem. È possibile aggiungerlo subito dopo la leafPrivateKey costante .

      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 rootPublicPem valore costante stringa e la 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 intermediatePublicPem stringa costante 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 intermediatePublicPem valore costante stringa e la 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 main metodo .

      // 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);
      

      Nota

      L'ordine in cui vengono aggiunti i certificati di firma è importante. L'esempio avrà esito negativo se viene modificato.

    9. 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 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 [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    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 [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    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 [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    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 [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] ) 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 dei dispositivi

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 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 that shows the registration status details for the enrollment group on Azure portal.

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

Per verificare i dispositivi 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 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 that shows the devices are registered with the I o T hub in Azure portal.

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. Nel menu a sinistra nella portale di Azure selezionare Tutte le risorse.

  2. Selezionare l'istanza del servizio Device Provisioning.

  3. Nel menu Impostazioni selezionare Gestisci registrazioni.

  4. Selezionare la scheda Gruppi di registrazione.

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

  6. Nella pagina Dettagli registrazione selezionare Dettagli accanto allo stato registrazione. Selezionare quindi la casella di controllo accanto all'intestazione di colonna ID dispositivo per selezionare tutti i record di registrazione per il gruppo di registrazione. Selezionare Elimina nella parte superiore della pagina 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 verranno 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.

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

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

  9. Nella parte superiore della pagina selezionare Elimina.

Eliminare i certificati CA registrati dal servizio Device Provisioning

  1. Selezionare Certificati dal menu a sinistra dell'istanza del servizio Device Provisioning. Per ogni certificato caricato e verificato in questa esercitazione, selezionare il certificato e selezionare Elimina e confermare la scelta di rimuoverlo.

Eliminare le registrazioni dei dispositivi 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 dei dispositivi registrati in questa esercitazione. Ad esempio, device-01 e device-02.

  5. Nella parte superiore della pagina selezionare Elimina.

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.