Zelfstudie: Meerdere X.509-apparaten inrichten met behulp van inschrijvingsgroepen

In deze zelfstudie leert u hoe u groepen IoT-apparaten inricht die X.509-certificaten gebruiken voor verificatie. Voorbeeldapparaatcode van de Azure IoT SDK wordt uitgevoerd op uw ontwikkelcomputer om het inrichten van X.509-apparaten te simuleren. Op echte apparaten wordt apparaatcode geïmplementeerd en uitgevoerd vanaf het IoT-apparaat.

De Azure IoT Hub Device Provisioning Service ondersteunt twee typen inschrijvingen voor inrichtingsapparaten:

  • Registratiegroepen: wordt gebruikt om meerdere gerelateerde apparaten in te schrijven. In deze zelfstudie wordt het inrichten met inschrijvingsgroepen gedemonstreert.
  • Afzonderlijke inschrijvingen: wordt gebruikt om één apparaat in te schrijven.

De Azure IoT Hub Device Provisioning Service ondersteunt drie vormen van verificatie voor het inrichten van apparaten:

  • X.509-certificaten - In deze zelfstudie ziet u X.509-certificaatverklaring
  • Tpm (Trusted Platform Module)
  • Symmetrische sleutels

In productiescenario's wordt een HSM (Hardware Security Module) gebruikt voor veilige, hardwaregebaseerde opslag van apparaatgeheimen. Een HSM kan worden gebruikt met symmetrische sleutels, X.509-certificaten of TPM-attestation om beveiligde opslag voor geheimen te bieden. Op hardware gebaseerde opslag van apparaatgeheimen wordt aanbevolen om gevoelige informatie te beveiligen, zoals de persoonlijke sleutel van uw apparaatcertificaat.

In deze zelfstudie voltooit u de volgende doelstellingen:

  • Een certificaatketen van vertrouwen om een groep apparaten in te delen met X.509-certificaten.
  • Maak een nieuwe groepsinschrijving die gebruikmaakt van de certificaatketen.
  • Stel de ontwikkelomgeving in.
  • Apparaten inrichten met behulp van de certificaatketen met behulp van voorbeeldcode in de Azure IoT-apparaat-SDK.

Vereisten

De volgende vereisten zijn voor een Windows-ontwikkelomgeving die wordt gebruikt om de apparaten te simuleren. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.

  • Installeer Visual Studio 2022 met de workload Desktopontwikkeling met C++ . Visual Studio 2015, Visual Studio 2017 en Visual Studio 19 worden ook ondersteund.

  • Installeer het nieuwste CMake-buildsysteem. Controleer de optie waarmee het uitvoerbare CMake-bestand aan uw pad wordt toegevoegd.

    Belangrijk

    Controleer of de vereisten voor Visual Studio (Visual Studio en de workload Desktopontwikkeling met C++) op uw computer zijn geïnstalleerd voordat u de CMake installatie start. Zodra aan de vereisten is voldaan en de download is geverifieerd, installeert u het CMake-bouwsysteem. Houd er ook rekening mee dat oudere versies van het CMake-buildsysteem het oplossingsbestand dat in deze zelfstudie wordt gebruikt, niet kunnen genereren. Zorg ervoor dat u de nieuwste versie van CMake gebruikt.

De volgende vereisten gelden voor een ontwikkelomgeving in Windows. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.

  • Installeer .NET SDK 6.0 of hoger op uw Windows-computer. U kunt de volgende opdracht gebruiken om uw versie te controleren.

    dotnet --info
    

De volgende vereisten gelden voor een ontwikkelomgeving in Windows. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.

De volgende vereisten gelden voor een ontwikkelomgeving in Windows.

De volgende vereisten gelden voor een ontwikkelomgeving in Windows. Voor Linux of macOS raadpleegt u het desbetreffende gedeelte in Uw ontwikkelomgeving voorbereiden in de SDK-documentatie.

  • Installeer de meest recente versie van Git. Zorg ervoor dat Git is toegevoegd aan de omgevingsvariabelen die toegankelijk zijn voor het opdrachtvenster.

  • Zorg ervoor dat OpenSSL op uw computer is geïnstalleerd. In Windows bevat uw installatie van Git een installatie van OpenSSL. U kunt OpenSSL openen via de Git Bash-prompt. Als u wilt controleren of OpenSSL is geïnstalleerd, opent u een Git Bash-prompt en voert u deze in openssl version.

    Notitie

    Tenzij u bekend bent met OpenSSL en deze al op uw Windows-computer hebt geïnstalleerd, raden we u aan OpenSSL te gebruiken vanuit de Git Bash-prompt. U kunt er ook voor kiezen om de broncode te downloaden en OpenSSL te bouwen. Als u ervoor kiest om OpenSSL te bouwen of te downloaden, moet u ervoor zorgen dat het binaire bestand openSSL toegankelijk is in uw pad en dat de OPENSSL_CNF omgevingsvariabele is ingesteld op het pad van het bestand openssl.cnf .

Uw ontwikkelomgeving voorbereiden

In deze sectie bereidt u een ontwikkelomgeving voor die wordt gebruikt om de Azure IoT C SDK te bouwen. De SDK bevat voorbeeldcode en hulpprogramma's die worden gebruikt door het inrichten van apparaten met DPS.

  1. Ga in een webbrowser naar de releasepagina van de Azure IoT C SDK.

  2. Kopieer de tagnaam voor de nieuwste versie van de Azure IoT C SDK, bijvoorbeeld: lts_03_2024.

  3. Open een Windows-opdrachtprompt en voer de volgende opdrachten uit om de nieuwste versie van de Azure IoT Device SDK voor C GitHub-opslagplaats te klonen. Vervang <release-tag> door de tag die u in de vorige stap hebt gekopieerd.

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

    Het kan enkele minuten duren voordat deze bewerking is voltooid.

  4. Wanneer de bewerking is voltooid, voert u de volgende opdrachten uit vanuit de azure-iot-sdk-c map:

    mkdir cmake
    cd cmake
    
  5. De voorbeeldcode gebruikt een X.509-certificaat voor attestation via x.509-verificatie. Voer de volgende opdracht uit om een versie van de SDK te bouwen die specifiek is voor uw platform voor ontwikkeling dat de client voor apparaatinrichting bevat. Er wordt een Visual Studio-oplossing voor het gesimuleerde apparaat gegenereerd in de map cmake.

    Vervang <path door het absolute pad naar de C SDK die u hebt gekloond.

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

    Tip

    Als cmake uw C++-compiler niet wordt gevonden, krijgt u mogelijk buildfouten tijdens het uitvoeren van de bovenstaande opdracht. Als dit gebeurt, voert u de opdracht uit in de Visual Studio-opdrachtprompt.

  6. Wanneer de build slaagt, zien de laatste paar uitvoerlijnen er ongeveer als volgt uit:

    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
    

Open een Windows-opdrachtprompt en kloon de Azure IoT SDK voor C# GitHub-opslagplaats met behulp van de volgende opdracht:

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

Open een Windows-opdrachtprompt en kloon de Azure IoT SDK voor Node.js GitHub-opslagplaats met behulp van de volgende opdracht:

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

Open een Windows-opdrachtprompt en kloon de Azure IoT Device SDK voor Python GitHub-opslagplaats met behulp van de volgende opdracht:

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

Notitie

De voorbeelden die in deze zelfstudie worden gebruikt, bevinden zich in de v2-vertakking van de opslagplaats azure-iot-sdk-python. V3 van de Python SDK is beschikbaar voor gebruik in bètaversie.

  1. Open een Windows-opdrachtprompt en kloon de Azure IoT-voorbeelden voor Java GitHub-opslagplaats met behulp van de volgende opdracht:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Ga naar de hoofdmap azure-iot-sdk-java en bouw het project om alle benodigde pakketten te downloaden.

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

Een X.509-certificaatketen maken

In deze sectie genereert u een X.509-certificaatketen van drie certificaten voor het testen van elk apparaat met deze zelfstudie. De certificaten hebben de volgende hiërarchie.

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

Basiscertificaat U uploadt en verifieert het basiscertificaat met DPS. Met deze verificatie kan DPS dat certificaat vertrouwen en certificaten verifiëren die door het certificaat zijn ondertekend.

Tussenliggend certificaat: het is gebruikelijk om tussenliggende certificaten te gebruiken om apparaten logisch te groeperen op productlijnen, bedrijfsafdelingen of andere criteria. In deze zelfstudie wordt gebruikgemaakt van een certificaatketen met één tussenliggend certificaat, maar in een productiescenario hebt u mogelijk meerdere. Het tussenliggende certificaat in deze keten wordt ondertekend door het basiscertificaat. Dit certificaat wordt verstrekt aan de inschrijvingsgroep die is gemaakt in DPS. Met deze configuratie kunt u een hele groep apparaten beheren waarvan de certificaten zijn ondertekend door hetzelfde tussenliggende certificaat.

Apparaatcertificaten: Een apparaatcertificaten (ook wel een bladcertificaat genoemd) wordt ondertekend door het tussenliggende certificaat en opgeslagen op het apparaat, samen met de persoonlijke sleutel. Idealiter worden deze gevoelige items veilig opgeslagen met een HSM. Meerdere apparaatcertificaten kunnen worden ondertekend met hetzelfde tussenliggende certificaat. Elk apparaat presenteert het certificaat en de persoonlijke sleutel, samen met de certificaatketen, bij het inrichten.

Zie X.509-certificaatverklaring voor meer informatie over certificaatketens.

De X.509 OpenSSL-omgeving instellen

In deze sectie maakt u de Openssl-configuratiebestanden, mapstructuur en andere bestanden die worden gebruikt door de Openssl-opdrachten.

  1. Open een Git Bash-opdrachtprompt en navigeer naar een map waarin u de X.509-certificaten en -sleutels voor deze zelfstudie wilt genereren.

  2. Maak een OpenSSL-configuratiebestand met de naam openssl_root_ca.cnf voor uw basis-CA-certificaat. OpenSSL-configuratiebestanden bevatten beleidsregels en definities die worden gebruikt door OpenSSL-opdrachten. Kopieer en plak de volgende tekst in het bestand 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. Maak een OpenSSL-configuratiebestand met de naam openssl_device_intermediate_ca.cnf dat moet worden gebruikt voor tussenliggende certificaten en apparaatcertificaten. Kopieer en plak de volgende tekst in het bestand 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. Maak de mapstructuur, het databasebestand index.txt en het serienummerbestand dat wordt gebruikt door OpenSSL-opdrachten in deze zelfstudie:

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

Een basis-CA-certificaat maken

Voer de volgende opdrachten uit om een persoonlijke basis-CA-sleutel en een basis-CA-certificaat te maken. U gebruikt dit certificaat en de sleutel om uw tussenliggende certificaat te ondertekenen.

  1. Maak in uw Git Bash-terminal een persoonlijke basis-CA-sleutel:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. Een basis-CA-certificaat maken:

    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
    

    Belangrijk

    De extra slash die wordt opgegeven voor de onderwerpnaam (//CN=Azure IoT Hub CA Cert Test Only) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met slechts één slash (/CN=Azure IoT Hub CA Cert Test Only).

  3. Controleer het basis-CA-certificaat:

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

    U ziet dat de uitgever en het onderwerp beide de basis-CA zijn.

    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)
    

Een tussenliggend CA-certificaat maken

Voer de volgende opdrachten uit om een tussenliggende ca-persoonlijke sleutel en een tussenliggend CA-certificaat te maken. U gebruikt dit certificaat en de sleutel om uw apparaatcertificaten te ondertekenen.

  1. Maak in uw Git Bash-terminal een tussenliggende persoonlijke CA-sleutel:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. Maak een aanvraag voor ondertekening van tussenliggende CA-certificaten (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
    

    Belangrijk

    De extra slash die wordt opgegeven voor de onderwerpnaam (//CN=Azure IoT Hub Intermediate Cert Test Only) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met één slash (/CN=Azure IoT Hub Intermediate Cert Test Only).

  3. Het tussenliggende certificaat ondertekenen met het basis-CA-certificaat

    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. Controleer het tussenliggende CA-certificaat:

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

    Merk op dat de verlener de basis-CA is en dat het onderwerp de tussenliggende CA is.

    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)
    

Apparaatcertificaten maken

In deze sectie maakt u twee apparaatcertificaten en de bijbehorende volledige ketencertificaten. Het volledige ketencertificaat bevat het apparaatcertificaat, het tussenliggende CA-certificaat en het basis-CA-certificaat. Het apparaat moet het volledige ketencertificaat presenteren wanneer het bij DPS wordt geregistreerd.

  1. Maak de eerste persoonlijke sleutel van het apparaat.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. Maak de CSR van het apparaatcertificaat.

    De algemene naam van het onderwerp (CN) van het apparaatcertificaat moet worden ingesteld op de registratie-id die uw apparaat gebruikt voor registratie bij DPS. De registratie-id is een niet-hoofdlettergevoelige tekenreeks van alfanumerieke tekens plus de speciale tekens: '-', '.', '_', . ':' Het laatste teken moet alfanumeriek of streepje ('-') zijn. De algemene naam moet voldoen aan deze indeling. DPS ondersteunt registratie-id's van maximaal 128 tekens; De maximale lengte van de algemene naam van het onderwerp in een X.509-certificaat is echter 64 tekens. De registratie-id is daarom beperkt tot 64 tekens bij het gebruik van X.509-certificaten. Voor groepsinschrijvingen wordt de registratie-id ook gebruikt als apparaat-id in IoT Hub.

    De algemene naam van het onderwerp wordt ingesteld met behulp van de -subj parameter. In de volgende opdracht wordt de algemene naam ingesteld op apparaat-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
    

    Belangrijk

    De extra slash die wordt opgegeven voor de onderwerpnaam (//CN=device-01) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met één slash (/CN=device-01).

  3. Onderteken het apparaatcertificaat.

    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. Controleer het apparaatcertificaat:

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

    Houd er rekening mee dat de verlener de tussenliggende CA is en het onderwerp de apparaatregistratie-id is. 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. Het apparaat moet de volledige certificaatketen presenteren wanneer het wordt geverifieerd met DPS. Gebruik de volgende opdracht om de certificaatketen te maken:

    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. Open het certificaatketenbestand ./certs/device-01-full-chain.cert.pem in een teksteditor om het te onderzoeken. De tekst van de certificaatketen bevat de volledige keten van alle drie de certificaten. U gebruikt deze certificaatketen verderop in deze zelfstudie om in te richten device-01.

    De tekst van de volledige keten heeft de volgende indeling:

    -----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. Als u de persoonlijke sleutel, het X.509-certificaat en het volledige ketencertificaat voor het tweede apparaat wilt maken, kopieert en plakt u dit script in de Git Bash-opdrachtprompt. Als u certificaten voor meer apparaten wilt maken, kunt u de registration_id variabele wijzigen die aan het begin van het script is gedeclareerd.

    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
    

    Belangrijk

    De extra slash die wordt opgegeven voor de onderwerpnaam (//CN=$registration_id) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms. Geef op Linux-platforms de onderwerpnaam op met één slash (/CN=$registration_id).

    Notitie

    Dit script gebruikt de registratie-id als de basisbestandsnaam voor de persoonlijke sleutel- en certificaatbestanden. Als uw registratie-id tekens bevat die ongeldige bestandsnaamtekens zijn, moet u het script dienovereenkomstig wijzigen.

    Waarschuwing

    De tekst voor de certificaten bevat alleen informatie over openbare sleutels.

    Het apparaat moet echter ook toegang hebben tot de persoonlijke sleutel voor het apparaatcertificaat. Dit is nodig omdat het apparaat tijdens runtime verificatie moet uitvoeren met behulp van die sleutel wanneer het probeert in te richten. De gevoeligheid van deze sleutel is een van de belangrijkste redenen om op hardware gebaseerde opslag te gebruiken in een echte HSM om persoonlijke sleutels te kunnen beveiligen.

In de rest van deze zelfstudie gebruikt u de volgende bestanden:

Certificaat Bestand Beschrijving
basis-CA-certificaat. certs/azure-iot-test-only.root.ca.cert.pem Geüpload naar DPS en geverifieerd.
tussenliggend CA-certificaat certs/azure-iot-test-only.intermediate.cert.pem Wordt gebruikt voor het maken van een inschrijvingsgroep in DPS.
persoonlijke sleutel apparaat-01 private/device-01.key.pem Wordt door het apparaat gebruikt om het eigendom van het apparaatcertificaat te verifiëren tijdens verificatie met DPS.
apparaat-01-certificaat voor volledige keten certs/device-01-full-chain.cert.pem Aangeboden door het apparaat voor verificatie en registratie bij DPS.
persoonlijke sleutel voor apparaat-02 private/device-02.key.pem Wordt door het apparaat gebruikt om het eigendom van het apparaatcertificaat te verifiëren tijdens verificatie met DPS.
apparaat-02-certificaat voor volledige keten certs/device-02-full-chain.cert.pem Aangeboden door het apparaat voor verificatie en registratie bij DPS.

Eigendom van het basiscertificaat verifiëren

Als DPS tijdens de verificatie de certificaatketen van het apparaat kan valideren, moet u het eigendom van het basis-CA-certificaat uploaden en verifiëren. Voer de volgende stappen uit om het basis-CA-certificaat toe te voegen aan uw DPS-exemplaar:

  1. Navigeer in Azure Portal naar uw Device Provisioning Service-exemplaar.

  2. Open Certificaten in het linkermenu en selecteer Vervolgens Toevoegen om een nieuw certificaat toe te voegen.

  3. Voer een beschrijvende weergavenaam in voor uw certificaat. Blader naar de locatie van het basis-CA-certificaatbestand certs/azure-iot-test-only.root.ca.cert.pem. Selecteer Uploaden.

  4. Schakel het selectievakje in om de certificaatstatus in te stellen op geverifieerd bij het uploaden.

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

  5. Selecteer Opslaan.

  6. Controleer of uw certificaat wordt weergegeven op het tabblad Certificaat met de status Geverifieerd.

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

Het certificaatarchief op Windows-apparaten bijwerken

Op niet-Windows-apparaten kunt u de certificaatketen vanuit de code als het certificaatarchief doorgeven.

Op Windows-apparaten moet u de handtekeningcertificaten (basis en tussenliggend) toevoegen aan een Windows-certificaatarchief. Anders worden de handtekeningcertificaten niet naar DPS getransporteerd via een beveiligd kanaal met TLS (Transport Layer Security).

Tip

Het is ook mogelijk om OpenSSL te gebruiken in plaats van een beveiligd kanaal (Schannel) met de C SDK. Zie OpenSSL gebruiken in de SDK voor meer informatie over het gebruik van OpenSSL.

Ga als volgt te werk om de handtekeningcertificaten toe te voegen aan het certificaatarchief op Windows-apparaten:

  1. Converteer uw handtekeningcertificaten .pfx in uw Git Bash-terminal als volgt.

    Basis-CA-certificaat:

    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
    

    Tussenliggend CA-certificaat:

    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. Klik met de rechtermuisknop op de knop Start van Windows en selecteer Uitvoeren. Voer certmgr.msc in en selecteer OK om certificaatbeheer te starten.

  3. Selecteer in certificaatbeheer onder Certificaten - Huidige gebruiker vertrouwde basiscertificeringsinstanties. Selecteer vervolgens actie>alle taken>importeren in het menu.

  4. Volg de stappen van de wizard Certificaat importeren om te importeren root.pfx.

    • Zoek op Personal Information Exchange (.pfx)
    • Gebruik 1234 als wachtwoord.
    • Plaats het certificaat in het certificaatarchief Vertrouwde basiscertificeringsinstanties.
  5. Herhaal deze stappen voor certificaatbeheer om te importeren intermediate.pfx.

    • Plaats het certificaat in het certificaatarchief Tussenliggende certificeringsinstanties.

Uw handtekeningcertificaten worden nu op het Windows-apparaat vertrouwd en de volledige keten kan naar DPS worden getransporteerd.

Een inschrijvingsgroep maken

  1. Meld u aan bij Azure Portal en navigeer naar uw Device Provisioning Service-exemplaar.

  2. Selecteer Inschrijvingen beheren in de sectie Instellingen van het navigatiemenu.

  3. Selecteer Boven aan de pagina de optie Inschrijvingsgroep toevoegen.

  4. Geef op het tabblad Registratie en inrichting van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om de details van de inschrijvingsgroep te configureren:

    Veld Beschrijving
    Attest Selecteer X.509-tussencertificaten als attestation-mechanismeals u tussenliggende certificaten wilt uploaden die alleen voor deze inschrijvingsgroep moeten worden gebruikt, of selecteer X.509-certificaten die zijn geüpload naar deze Device Provisioning Service als u al tussenliggende certificaten hebt geüpload.
    X.509-certificaatinstellingen Afhankelijk van de attestation-methode die u hebt gekozen, uploadt of selecteert u de primaire en secundaire tussencertificaten voor deze inschrijvingsgroep.
    Groepsnaam Geef een naam op voor de groep apparaten. De naam van de inschrijvingsgroep is een niet-hoofdlettergevoelige tekenreeks (maximaal 128 tekens lang) met alfanumerieke tekens plus de speciale tekens: '-', '.', '_', . ':' Het laatste teken moet alfanumeriek of streepje ('-') zijn.
    Inrichtingsstatus Schakel het selectievakje Deze inschrijving inschakelen in als u wilt dat deze inschrijvingsgroep beschikbaar is voor het inrichten van apparaten. Schakel dit selectievakje uit als u wilt dat de groep wordt uitgeschakeld. U kunt deze instelling later wijzigen.
    Beleid voor opnieuw inrichten Kies een beleid voor opnieuw inrichten dat aangeeft hoe DPS apparaten verwerkt die herinrichting aanvragen. Zie Beleid voor opnieuw inrichten voor meer informatie

    Screenshot that shows adding an enrollment group for X.509 certificate attestation.

  5. Selecteer Volgende: IoT-hubs.

  6. Geef op het tabblad IoT Hubs van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om te bepalen aan welke IoT-hubs de inschrijvingsgroep apparaten kan inrichten:

    Veld Beschrijving
    IoT-doelhubs Selecteer een of meer gekoppelde IoT-hubs of voeg een nieuwe koppeling toe aan een IoT-hub. Zie IoT-hubs koppelen en beheren voor meer informatie over het koppelen van IoT-hubs aan uw DPS-exemplaar.
    Toewijzingsbeleid Als u meer dan één gekoppelde IoT-hub hebt geselecteerd, selecteert u hoe u apparaten wilt toewijzen aan de verschillende hubs. Zie Toewijzingsbeleid gebruiken voor meer informatie over toewijzingsbeleid.

    Als u slechts één gekoppelde IoT-hub hebt geselecteerd, raden we u aan het gelijkmatig gewogen distributiebeleid te gebruiken.

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

  7. Volgende selecteren: Apparaatinstellingen

  8. Geef op het tabblad Apparaatinstellingen van de pagina Inschrijvingsgroep toevoegen de volgende informatie op om te definiëren hoe nieuw ingerichte apparaten worden geconfigureerd:

    Veld Beschrijving
    IoT Edge Schakel IoT Edge in op ingerichte apparaten als alle apparaten die via deze groep zijn ingericht, Azure IoT Edge uitvoeren. Schakel dit selectievakje uit als deze groep alleen voor niet-IoT Edge-apparaten is ingeschakeld. Alle apparaten in een groep zijn ingeschakeld voor IoT Edge of geen.
    Apparaattags Gebruik dit tekstvak om alle tags op te geven die u wilt toepassen op de apparaatdubbels van ingerichte apparaten.
    Gewenste eigenschappen Gebruik dit tekstvak om de gewenste eigenschappen op te geven die u wilt toepassen op de apparaatdubbels van ingerichte apparaten.

    Zie Apparaatdubbels begrijpen en gebruiken in IoT Hub voor meer informatie.

  9. Selecteer Volgende: Beoordelen en maken.

  10. Controleer op het tabblad Controleren en maken al uw waarden en selecteer Vervolgens Maken.

De apparaatinrichtingscode voorbereiden en uitvoeren

In deze sectie werkt u de voorbeeldcode bij met de informatie van uw Device Provisioning Service-exemplaar. Als een apparaat is geverifieerd, wordt het toegewezen aan een IoT-hub die is gekoppeld aan het Device Provisioning Service-exemplaar dat in deze sectie is geconfigureerd.

In deze sectie gebruikt u uw Git Bash-prompt en de Visual Studio IDE.

De code voor de apparaatinrichting configureren

In deze sectie werkt u de voorbeeldcode bij met de informatie van uw Device Provisioning Service-exemplaar.

  1. Selecteer in Azure Portal het tabblad Overzicht voor uw Device Provisioning Service-exemplaar en noteer de waarde van het id-bereik .

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

  2. Start Visual Studio en open het nieuwe oplossingsbestand dat is gemaakt in de map cmake die u hebt gemaakt in de hoofdmap van de Git-opslagplaats azure-iot-sdk-c. Het oplossingsbestand heeft de naam azure_iot_sdks.sln.

  3. Navigeer in Solution Explorer voor Visual Studio naar Provision_Samples > prov_dev_client_sample > bronbestanden en open prov_dev_client_sample.c.

  4. Zoek de constante id_scope op en vervang de waarde door uw Id-bereik-waarde die u eerder hebt gekopieerd. Voorbeeld:

    static const char* id_scope = "0ne00000A0A";
    
  5. Zoek de definitie voor de functie main() op in hetzelfde bestand. Zorg ervoor dat de hsm_type variabele is ingesteld op SECURE_DEVICE_TYPE_X509 en dat alle andere hsm_type regels als commentaar zijn opgenomen. Bijvoorbeeld:

    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. Sla uw wijzigingen op.

  7. Klik met de rechtermuisknop op het prov_dev_client_sample project en selecteer Instellen als opstartproject.

De stub-code voor de aangepaste HSM configureren

De specifieke kenmerken van interactie met de daadwerkelijke beveiligde opslag op basis van hardware variëren, afhankelijk van de hardware van het apparaat. De certificaatketens die worden gebruikt door de gesimuleerde apparaten in deze zelfstudie, worden vastgelegd in de aangepaste HSM-stubcode. In de praktijk zou de certificaatketen worden opgeslagen in de daadwerkelijke HSM-hardware om een betere beveiliging te kunnen bieden voor gevoelige informatie. Methoden die vergelijkbaar zijn met de stubmethoden die in dit voorbeeld worden gebruikt, worden vervolgens geïmplementeerd om de geheimen van die hardwaregebaseerde opslag te lezen.

Hoewel HSM-hardware niet is vereist, is het raadzaam om gevoelige informatie, zoals de persoonlijke sleutel van het certificaat, te beveiligen. Als een werkelijke HSM werd aangeroepen door het voorbeeld, zou de persoonlijke sleutel niet aanwezig zijn in de broncode. Als u de sleutel in de broncode hebt, wordt de sleutel beschikbaar gemaakt voor iedereen die de code kan bekijken. Dit wordt alleen gedaan in deze zelfstudie om u te helpen met leren.

De aangepaste HSM-stubcode bijwerken om de identiteit van het apparaat met id device-01te simuleren:

  1. Navigeer in Solution Explorer voor Visual Studio naar Provision_Samples > custom_hsm_example > bronbestanden en open custom_hsm_example.c.

  2. Werk de tekenreekswaarde van de tekenreeksconstante COMMON_NAME bij met de algemene naam die u hebt gebruikt bij het genereren van het apparaatcertificaat.

    static const char* const COMMON_NAME = "device-01";
    
  3. Voer in uw Git Bash-terminal de volgende opdracht uit om de tekenreeksconstante voor uw apparaatcertificaat te genereren:

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

    Kopieer de uitvoer van deze opdracht.

  4. Werk de tekenreekswaarde van de CERTIFICATE constante tekenreeks bij met behulp van de certificaatketen die u hebt opgeslagen in ./certs/device-01-full-chain.cert.pem nadat u uw certificaten hebt gegenereerd. Gebruik de tekst van het uitvoercertificaat uit de vorige stap voor de constante waarde.

    De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of parsering uitgevoerd door 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. Voer in Git Bash de volgende opdracht uit om de tekenreeksconstante voor de persoonlijke sleutel van uw apparaat te genereren:

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

    Kopieer de uitvoer van deze opdracht.

  6. Werk de tekenreekswaarde van de PRIVATE_KEY constante bij met de persoonlijke sleutel voor uw apparaatcertificaat. Gebruik de uitvoertekst van de persoonlijke sleutel uit de vorige stap voor de constante waarde.

    De syntaxis van de tekst van de persoonlijke sleutel moet overeenkomen met het volgende patroon zonder extra spaties of parsering uitgevoerd door 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. Sla uw wijzigingen op.

  8. Klik met de rechtermuisknop op het custom_hsm_example project en selecteer Build.

    Belangrijk

    U moet het custom_hsm_example project bouwen voordat u de rest van de oplossing in de volgende sectie bouwt.

De voorbeeldtoepassing uitvoeren

  1. Selecteer in het menu van Visual Studio de optie Debug>Start without debugging om de oplossing uit te voeren. Wanneer wordt gevraagd het project opnieuw te bouwen, selecteert u Ja om het project opnieuw te bouwen voordat het wordt uitgevoerd.

    De volgende uitvoer is een voorbeeld van een gesimuleerd apparaat device-01 dat is opgestart en verbinding maakt met de inrichtingsservice. Het apparaat is toegewezen aan een IoT-hub en is geregistreerd:

    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. Herhaal de stappen in De aangepaste HSM-stubcode configureren voor uw tweede apparaat (device-02) en voer het voorbeeld opnieuw uit. Gebruik de volgende waarden voor dat apparaat:

    Beschrijving Waarde
    Algemene naam "device-02"
    Volledige certificaatketen Genereer de tekst met . /certs/device-02-full-chain.cert.pem
    Persoonlijke sleutel De tekst genereren met . /private/device-02.key.pem

    De volgende uitvoer is een voorbeeld van het opstarten van een gesimuleerd apparaat device-02 en het maken van verbinding met de inrichtingsservice. Het apparaat is toegewezen aan een IoT-hub en is geregistreerd:

    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:
    

De C#-voorbeeldcode is ingesteld voor het gebruik van X.509-certificaten die zijn opgeslagen in een met een wachtwoord beveiligd PKCS#12-bestand (.pfx). De volledige ketencertificaten die u eerder hebt gemaakt, hebben de PEM-indeling. Als u de volledige ketencertificaten wilt converteren naar PKCS#12-indeling, voert u de volgende opdrachten in uw Git Bash-prompt in vanuit de map waarin u eerder de OpenSSL-opdrachten hebt uitgevoerd.

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

In de rest van deze sectie gebruikt u de Windows-opdrachtprompt.

  1. Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.

  2. Kopieer de waarde van het id-bereik .

    Screenshot of the ID scope on Azure portal.

  3. Ga in de Windows-opdrachtprompt naar de map X509Sample . Deze map bevindt zich in de SDK-opslagplaats die u in een eerdere stap hebt gekloond: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. Voer de volgende opdracht in om het X.509-voorbeeld van het inrichten van apparaten te bouwen en uit te voeren. Vervang <id-scope> door het id-bereik dat u hebt gekopieerd uit Azure Portal. Vervang <your-certificate-folder> door het pad naar de map waarin u uw OpenSSL-opdrachten hebt uitgevoerd.

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

    Het apparaat maakt verbinding met DPS en wordt toegewezen aan een IoT-hub. Vervolgens verzendt het apparaat een telemetriebericht naar de IoT-hub. Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:

    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.
    

    Notitie

    Als u geen certificaat en wachtwoord opgeeft op de opdrachtregel, wordt het certificaatbestand standaard ingesteld op ./certificate.pfx en wordt u om uw wachtwoord gevraagd.

    Aanvullende parameters kunnen worden doorgegeven om het TransportType (-t) en het GlobalDeviceEndpoint (-g) te wijzigen. Voor een volledige lijst met parameterstype dotnet run -- --help.

  5. Als u uw tweede apparaat wilt registreren, voert u het voorbeeld opnieuw uit met het volledige ketencertificaat.

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

Gebruik in de volgende stappen de Windows-opdrachtprompt.

  1. Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.

  2. Kopieer de waarde van het id-bereik .

    Screenshot of the ID scope in the Azure portal.

  3. Ga in de Windows-opdrachtprompt naar de voorbeeldmap en installeer de pakketten die nodig zijn voor het voorbeeld. Het weergegeven pad is relatief ten opzichte van de locatie waar u de SDK hebt gekloond.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    
  4. Open register_x509.js in de map provisioning\device\samples en controleer de code.

    Het voorbeeld wordt standaard ingesteld op MQTT als transportprotocol. Als u een ander protocol wilt gebruiken, markeert u de volgende regel en geeft u commentaar op de regel voor het juiste protocol.

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

    In het voorbeeld worden vijf omgevingsvariabelen gebruikt om een IoT-apparaat te verifiëren en in te richten met DPS. Deze omgevingsvariabelen zijn:

    Variabelenaam Beschrijving
    PROVISIONING_HOST Het eindpunt dat moet worden gebruikt om verbinding te maken met uw DPS-exemplaar. Gebruik voor deze zelfstudie het globale eindpunt. global.azure-devices-provisioning.net
    PROVISIONING_IDSCOPE Het id-bereik voor uw DPS-exemplaar.
    PROVISIONING_REGISTRATION_ID De registratie-id voor uw apparaat. Deze moet overeenkomen met de algemene naam van het onderwerp in het apparaatcertificaat.
    CERTIFICATE_FILE Het pad naar het certificaatbestand voor de volledige keten van uw apparaat.
    KEY_FILE Het pad naar het persoonlijke sleutelbestand van het apparaatcertificaat.

    De ProvisioningDeviceClient.register() methode probeert uw apparaat te registreren.

  5. Voeg omgevingsvariabelen toe voor het globale apparaateindpunt en id-bereik. Vervang <id-scope> door de waarde die u hebt gekopieerd uit Azure Portal.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. Stel de omgevingsvariabele in voor de apparaatregistratie-id. De registratie-id voor het IoT-apparaat moet overeenkomen met de algemene naam van het onderwerp op het apparaatcertificaat. Voor deze zelfstudie is device-01 zowel de onderwerpnaam als de registratie-id voor het apparaat.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. Stel de omgevingsvariabelen in voor het certificaat voor volledige keten en bestanden met persoonlijke sleutel van het apparaat die u eerder hebt gegenereerd. Vervang <your-certificate-folder> door het pad naar de map waarin u uw OpenSSL-opdrachten hebt uitgevoerd.

    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. Voer het voorbeeld uit en controleer of het apparaat is ingericht.

    node register_x509.js
    

    Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=device-01
    Client connected
    send status: MessageEnqueued
    
  9. Werk de omgevingsvariabelen voor uw tweede apparaat (device-02) bij volgens de volgende tabel en voer het voorbeeld opnieuw uit.

    Omgevingsvariabele Weergegeven als
    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

Gebruik in de volgende stappen de Windows-opdrachtprompt.

  1. Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.

  2. Kopieer het id-bereik.

    Screenshot of the ID scope in the Azure portal.

  3. Ga in de Windows-opdrachtprompt naar de map van het provision_x509.py voorbeeld. Het weergegeven pad is relatief ten opzichte van de locatie waar u de SDK hebt gekloond.

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

    In dit voorbeeld worden zes omgevingsvariabelen gebruikt om een IoT-apparaat te verifiëren en in te richten met DPS. Deze omgevingsvariabelen zijn:

    Variabelenaam Beschrijving
    PROVISIONING_HOST Het eindpunt dat moet worden gebruikt om verbinding te maken met uw DPS-exemplaar. Gebruik voor deze zelfstudie het globale eindpunt. global.azure-devices-provisioning.net
    PROVISIONING_IDSCOPE Het id-bereik voor uw DPS-exemplaar.
    DPS_X509_REGISTRATION_ID De registratie-id voor uw apparaat. Deze moet overeenkomen met de algemene naam van het onderwerp in het apparaatcertificaat.
    X509_CERT_FILE Het pad naar het certificaatbestand voor de volledige keten van uw apparaat.
    X509_KEY_FILE Het pad naar het persoonlijke sleutelbestand van het apparaatcertificaat.
    PASS_PHRASE De wachtwoordzin die wordt gebruikt om het bestand met de persoonlijke sleutel te versleutelen (indien gebruikt). Niet nodig voor deze zelfstudie.
  4. Voeg de omgevingsvariabelen toe voor het globale apparaateindpunt en het id-bereik. Gebruik voor de bereikvariabele ID de waarde die u hebt gekopieerd uit Azure Portal.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Stel de omgevingsvariabele in voor de apparaatregistratie-id. De registratie-id voor het IoT-apparaat moet overeenkomen met de algemene naam van het onderwerp op het apparaatcertificaat. Voor deze zelfstudie is device-01 zowel de onderwerpnaam als de registratie-id voor het apparaat.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. Stel de omgevingsvariabelen in voor het certificaat voor volledige keten en bestanden met persoonlijke sleutel van het apparaat die u eerder hebt gegenereerd. Vervang <your-certificate-folder> door het pad naar de map waarin u uw OpenSSL-opdrachten hebt uitgevoerd.

    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. Bekijk de code voor provision_x509.py. Als u geen Python-versie 3.7 of hoger gebruikt, moet u de hier genoemde codewijziging doorvoeren om deze te vervangenasyncio.run(main()).

  8. Voet het voorbeeld uit. Het voorbeeld maakt verbinding met DPS, waarmee het apparaat wordt ingericht voor een IoT-hub. Nadat het apparaat is ingericht, verzendt het voorbeeld enkele testberichten naar de IoT-hub.

    python provision_x509.py
    

    Als het goed is, ziet u uitvoer die lijkt op het volgende voorbeeld:

    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. Werk de omgevingsvariabelen voor uw tweede apparaat (device-02) bij volgens de volgende tabel en voer het voorbeeld opnieuw uit.

    Omgevingsvariabele Weergegeven als
    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

In de volgende stappen gebruikt u zowel uw Windows-opdrachtprompt als uw Git Bash-prompt.

  1. Selecteer in Azure Portal het tabblad Overzicht voor Device Provisioning Service.

  2. Kopieer het id-bereik.

    Screenshot of the ID scope in the Azure portal.

  3. Navigeer in de Windows-opdrachtprompt naar de voorbeeldprojectmap. Het weergegeven pad is relatief ten opzichte van de locatie waar u de SDK hebt gekloond

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Voer de inrichtingsservice en X.509-identiteitsgegevens in de voorbeeldcode in. Dit wordt gebruikt tijdens het inrichten, voor attestation van het gesimuleerde apparaat, vóór de apparaatregistratie.

    1. Open het bestand .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java in uw favoriete editor.

    2. Werk de volgende waarden bij. Gebruik idScopevoor het id-bereik dat u eerder hebt gekopieerd. Gebruik het globale apparaateindpunt voor het globale eindpunt. Dit eindpunt is hetzelfde voor elk DPS-exemplaar. 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. Het voorbeeld maakt standaard gebruik van HTTPS als transportprotocol. Als u het protocol wilt wijzigen, markeert u de volgende regel als commentaar en geeft u commentaar op de regel voor het protocol dat u wilt gebruiken.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Werk de waarde van de leafPublicPem constante tekenreeks bij met de waarde van het apparaatcertificaat device-01.cert.pem.

      De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.

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

      Het handmatig bijwerken van deze tekenreekswaarde kan gevoelig zijn voor fouten. Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de leafPublicPem constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.

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

      Kopieer en plak de tekst van het uitvoercertificaat voor de constante waarde.

    5. Werk de tekenreekswaarde van de leafPrivateKey constante bij met de niet-versleutelde persoonlijke sleutel voor uw apparaatcertificaat, niet-versleutelde-device-key.pem.

      De syntaxis van de persoonlijke sleuteltekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.

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

      Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de leafPrivateKey constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.

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

      Kopieer en plak de tekst van de persoonlijke sleutel van de uitvoer voor de constante waarde.

    6. Voeg een rootPublicPem constante tekenreeks toe met de waarde van uw basis-CA-certificaat, azure-iot-test-only.root.ca.cert.pem. U kunt deze net na de leafPrivateKey constante toevoegen.

      De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.

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

      Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de rootPublicPem constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.

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

      Kopieer en plak de tekst van het uitvoercertificaat voor de constante waarde.

    7. Voeg een intermediatePublicPem constante tekenreeks toe met de waarde van uw tussenliggende CA-certificaat, azure-iot-test-only.intermediate.cert.pem. U kunt deze net na de vorige constante toevoegen.

      De syntaxis van certificaattekst moet overeenkomen met het volgende patroon zonder extra spaties of tekens.

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

      Als u de juiste syntaxis wilt genereren, kunt u de volgende opdracht kopiëren en plakken in uw Git Bash-prompt en drukt u op Enter. Met deze opdracht wordt de syntaxis voor de intermediatePublicPem constante tekenreekswaarde gegenereerd en naar de uitvoer geschreven.

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

      Kopieer en plak de tekst van het uitvoercertificaat voor de constante waarde.

    8. Zoek de volgende regels in de main methode.

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

      Voeg deze twee regels direct eronder toe om uw tussenliggende en basis-CA-certificaten toe te voegen aan de ondertekeningsketen. Uw ondertekeningsketen moet de hele certificaatketen bevatten tot en met een certificaat dat u hebt geverifieerd met DPS.

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

      Notitie

      De volgorde waarop de handtekeningcertificaten worden toegevoegd, is belangrijk. Het voorbeeld mislukt als het is gewijzigd.

    9. Sla uw wijzigingen op.

  5. Bouw het voorbeeld en ga vervolgens naar de target map.

    mvn clean install
    cd target
    
  6. De build-uitvoer .jar bestand in de target map met de volgende bestandsindeling: provisioning-x509-sample-{version}-with-deps.jar; bijvoorbeeld: provisioning-x509-sample-1.8.1-with-deps.jar. Voer het .jar-bestand uit. Mogelijk moet u de versie in de volgende opdracht vervangen.

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

    Het voorbeeld maakt verbinding met DPS, die het apparaat inricht op een IoT-hub. Nadat het apparaat is ingericht, verzendt het voorbeeld enkele testberichten naar de IoT-hub.

    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. Werk de constanten voor uw tweede apparaat (device-02) bij volgens de volgende tabel, bouw het opnieuw en voer het voorbeeld opnieuw uit.

    Constante Te gebruiken bestand
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./private/device-02.key.pem

De registratie van de apparaatinrichting bevestigen

Bekijk de registratierecords van de inschrijvingsgroep om de registratiegegevens voor uw apparaten te bekijken:

  1. Ga in Azure Portal naar uw Device Provisioning Service-exemplaar.

  2. Selecteer Inschrijvingen beheren in het menu Instellingen.

  3. Selecteer Inschrijvingsgroepen. De X.509-inschrijvingsgroepvermelding die u eerder hebt gemaakt, moet worden weergegeven in de lijst.

  4. Selecteer de inschrijvingsvermelding. Selecteer vervolgens Details naast de registratiestatus om de apparaten te zien die zijn geregistreerd via de inschrijvingsgroep. De IoT-hub waaraan elk van uw apparaten is toegewezen, de apparaat-id's en de datums en tijden waarop ze zijn geregistreerd, worden weergegeven in de lijst.

    Screenshot that shows the registration status details for the enrollment group on Azure portal.

  5. U kunt een van de apparaten selecteren om meer details voor dat apparaat weer te geven.

De apparaten op uw IoT-hub controleren:

  1. Ga in Azure Portal naar de IoT-hub waaraan uw apparaat is toegewezen.

  2. Selecteer Apparaten in het menu Apparaatbeheer.

  3. Als uw apparaten zijn ingericht, moeten de apparaat-id's, apparaat-01 en apparaat-02 worden weergegeven in de lijst, waarbij status is ingesteld als ingeschakeld. Als u uw apparaten niet ziet, selecteert u Vernieuwen.

    Screenshot that shows the devices are registered with the I o T hub in Azure portal.

Resources opschonen

Wanneer u klaar bent met het testen en verkennen van dit voorbeeld van een apparaatclient, gebruikt u de volgende stappen om alle resources te verwijderen die in deze zelfstudie zijn gemaakt.

  1. Sluit het uitvoervenster van het voorbeeld van de apparaatclient op de computer.

Uw inschrijvingsgroep verwijderen

  1. Selecteer Alle resources in het linkermenu in Azure Portal.

  2. Selecteer uw DPS-exemplaar.

  3. Selecteer Inschrijvingen beheren in het menu Instellingen.

  4. Selecteer het tabblad Inschrijvingsgroepen .

  5. Selecteer de inschrijvingsgroep die u voor deze zelfstudie hebt gebruikt.

  6. Selecteer Details naast de registratiestatus op de pagina Details van de inschrijving. Schakel vervolgens het selectievakje in naast de kolomkop Apparaat-id om alle registratierecords voor de inschrijvingsgroep te selecteren. Selecteer Verwijderen boven aan de pagina om de registratierecords te verwijderen.

    Belangrijk

    Als u een registratiegroep verwijdert, worden de bijbehorende registratierecords niet verwijderd. Deze zwevende records tellen mee met het registratiequotum voor het DPS-exemplaar. Daarom is het raadzaam om alle registratierecords te verwijderen die zijn gekoppeld aan een inschrijvingsgroep voordat u de inschrijvingsgroep zelf verwijdert.

  7. Ga terug naar de pagina Inschrijvingen beheren en controleer of het tabblad Inschrijvingsgroepen is geselecteerd.

  8. Schakel het selectievakje in naast de groepsnaam van de inschrijvingsgroep die u voor deze zelfstudie hebt gebruikt.

  9. Selecteer Verwijderen bovenaan de pagina.

Geregistreerde CA-certificaten verwijderen uit DPS

  1. Selecteer Certificaten in het linkermenu van uw DPS-exemplaar. Voor elk certificaat dat u in deze zelfstudie hebt geüpload en geverifieerd, selecteert u het certificaat en selecteert u Verwijderen en bevestigt u uw keuze om het te verwijderen.

Apparaatregistraties verwijderen uit IoT Hub

  1. Selecteer Alle resources in het linkermenu in Azure Portal.

  2. Selecteer uw IoT-hub.

  3. Selecteer IoT-apparaten in het menu Explorers.

  4. Schakel het selectievakje in naast de apparaat-id van de apparaten die u in deze zelfstudie hebt geregistreerd. Bijvoorbeeld apparaat-01 en apparaat-02.

  5. Selecteer Verwijderen bovenaan de pagina.

Volgende stappen

In deze zelfstudie hebt u meerdere X.509-apparaten ingericht voor uw IoT-hub met behulp van een inschrijvingsgroep. Hierna leert u hoe u IoT-apparaten in meerdere hubs inricht.