Självstudie: Etablera flera X.509-enheter med hjälp av registreringsgrupper

I den här självstudien lär du dig hur du etablerar grupper av IoT-enheter som använder X.509-certifikat för autentisering. Exempel på enhetskod från Azure IoT SDK körs på utvecklingsdatorn för att simulera etablering av X.509-enheter. På verkliga enheter distribueras och körs enhetskoden från IoT-enheten.

Azure IoT Hub Device Provisioning Service stöder två typer av registreringar för etableringsenheter:

  • Registreringsgrupper: används för att registrera flera relaterade enheter. Den här självstudien visar etablering med registreringsgrupper.
  • Enskilda registreringar: Används för att registrera en enskild enhet.

Azure IoT Hub Device Provisioning Service stöder tre former av autentisering för etablering av enheter:

  • X.509-certifikat – Den här självstudien visar X.509-certifikatattestering
  • Betrodd plattformsmodul (TPM)
  • Symmetriska nycklar

I produktionsscenarier används en maskinvarusäkerhetsmodul (HSM) för säker, maskinvarubaserad lagring av enhetshemligheter. En HSM kan användas med symmetrisk nyckel, X.509-certifikat eller TPM-attestering för att tillhandahålla säker lagring för hemligheter. Maskinvarubaserad lagring av enhetshemligheter rekommenderas för att skydda känslig information som enhetscertifikatets privata nyckel.

I den här självstudien slutför du följande mål:

  • Skapa en förtroendekedja för certifikat för att organisera en uppsättning enheter med X.509-certifikat.
  • Skapa en ny gruppregistrering som använder certifikatkedjan.
  • Konfigurera utvecklingsmiljön.
  • Etablera enheter med hjälp av certifikatkedjan med hjälp av exempelkod i Azure IoT-enhetens SDK.

Förutsättningar

Följande förutsättningar gäller för en Windows-utvecklingsmiljö som används för att simulera enheterna. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.

  • Installera Visual Studio 2022 med arbetsbelastningen "Skrivbordsutveckling med C++" aktiverad. Visual Studio 2015, Visual Studio 2017 och Visual Studio 19 stöds också.

  • Installera det senaste CMake-byggsystemet. Kontrollera att du kontrollerar alternativet som lägger till den körbara CMake-filen i sökvägen.

    Viktigt!

    Kontrollera att kraven för Visual Studio (Visual Studio och arbetsbelastningen Skrivbordsutveckling med C++) är installerade på datorn innan du CMake startar installationen. När förutsättningarna är uppfyllda och nedladdningen har verifierats installerar du CMake-byggesystemet. Tänk också på att äldre versioner av CMake-byggsystemet inte genererar den lösningsfil som används i den här självstudien. Se till att använda den senaste versionen av CMake.

Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.

  • Installera .NET SDK 6.0 eller senare på din Windows-baserade dator. Du kan använda följande kommando för att kontrollera din version.

    dotnet --info
    

Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.

Följande krav gäller för en Windows-utvecklingsmiljö.

Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.

  • Installera den senaste versionen av Git. Kontrollera att Git har lagts till i de miljövariabler som är tillgängliga för kommandofönstret.

  • Kontrollera att OpenSSL är installerat på datorn. I Windows innehåller installationen av Git en installation av OpenSSL. Du kan komma åt OpenSSL från Git Bash-prompten. Om du vill kontrollera att OpenSSL är installerat öppnar du en Git Bash-prompt och anger openssl version.

    Kommentar

    Om du inte är bekant med OpenSSL och redan har installerat det på din Windows-dator rekommenderar vi att du använder OpenSSL från Git Bash-prompten. Du kan också välja att ladda ned källkoden och skapa OpenSSL. Om du väljer att skapa eller ladda ned OpenSSL kontrollerar du att OpenSSL-binärfilen är tillgänglig i sökvägen och att OPENSSL_CNF miljövariabeln är inställd på sökvägen till filen openssl.cnf .

Förbereda utvecklingsmiljön

I det här avsnittet förbereder du en utvecklingsmiljö som används för att skapa Azure IoT C SDK. SDK innehåller exempelkod och verktyg som används av enheter som etablerar med DPS.

  1. I en webbläsare går du till versionssidan för Azure IoT C SDK.

  2. Kopiera taggnamnet för den senaste versionen av Azure IoT C SDK, till exempel: lts_03_2024.

  3. Öppna en Windows-kommandotolk och kör följande kommandon för att klona den senaste versionen av Azure IoT Device SDK för C GitHub-lagringsplatsen. Ersätt <release-tag> med taggen som du kopierade i föregående steg.

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

    Den här åtgärden kan ta flera minuter att slutföra.

  4. När åtgärden är klar kör du följande kommandon från azure-iot-sdk-c katalogen:

    mkdir cmake
    cd cmake
    
  5. I kodexemplet används ett X.509-certifikat för att tillhandahålla attestering via X.509-autentisering. Kör följande kommando för att skapa en version av SDK:n som är specifik för din utvecklingsplattform som innehåller enhetsetableringsklienten. En Visual Studio-lösning för den simulerade enheten genereras i cmake katalogen.

    Ersätt <path med den absoluta sökvägen till den C SDK som du klonade.

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

    Dricks

    Om cmake du inte hittar C++-kompilatorn kan du få byggfel när du kör kommandot ovan. Om det händer kan du prova att köra kommandot i Visual Studio-kommandotolken.

  6. När bygget lyckas ser de sista utdataraderna ut ungefär som följande utdata:

    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
    

Öppna en Windows-kommandotolk och klona Azure IoT SDK för C# GitHub-lagringsplatsen med följande kommando:

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

Öppna en Windows-kommandotolk och klona Azure IoT SDK för Node.js GitHub-lagringsplats med följande kommando:

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

Öppna en Windows-kommandotolk och klona Azure IoT Device SDK för Python GitHub-lagringsplatsen med följande kommando:

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

Kommentar

Exemplen som används i den här självstudien finns i v2-grenen på azure-iot-sdk-python-lagringsplatsen. V3 av Python SDK är tillgängligt för användning i betaversion.

  1. Öppna en Windows-kommandotolk och klona Azure IoT-exempel för Java GitHub-lagringsplatsen med följande kommando:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Gå till rotkatalogen azure-iot-sdk-java och skapa projektet för att ladda ned alla paket som behövs.

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

Skapa en X.509-certifikatkedja

I det här avsnittet genererar du en X.509-certifikatkedja med tre certifikat för testning av varje enhet med den här självstudien. Certifikaten har följande hierarki.

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

Rotcertifikat Du laddar upp och verifierar rotcertifikatet med DPS. Den här verifieringen gör det möjligt för DPS att lita på certifikatet och verifiera certifikat som har signerats av det.

Mellanliggande certifikat: Det är vanligt att använda mellanliggande certifikat för att gruppera enheter logiskt efter produktrader, företagsdivisioner eller andra kriterier. I den här självstudien används en certifikatkedja med ett mellanliggande certifikat, men i ett produktionsscenario kan du ha flera. Mellanliggande certifikat i den här kedjan signeras av rotcertifikatet. Det här certifikatet tillhandahålls till registreringsgruppen som skapats i DPS. Med den här konfigurationen kan du hantera en hel grupp enheter som har enhetscertifikat signerade av samma mellanliggande certifikat.

Enhetscertifikat: Ett enhetscertifikat (kallas ibland ett lövcertifikat) signeras av det mellanliggande certifikatet och lagras på enheten tillsammans med dess privata nyckel. Helst skulle dessa känsliga objekt lagras säkert med en HSM. Flera enhetscertifikat kan signeras av samma mellanliggande certifikat. Varje enhet visar sitt certifikat och sin privata nyckel, tillsammans med certifikatkedjan, vid försök att etablera.

Mer information om certifikatkedjor finns i X.509-certifikatattestering.

Konfigurera X.509 OpenSSL-miljön

I det här avsnittet skapar du Opensl-konfigurationsfiler, katalogstruktur och andra filer som används av Openssl-kommandona.

  1. Öppna en Git Bash-kommandotolk och gå till en mapp där du vill generera X.509-certifikaten och nycklarna för den här självstudien.

  2. Skapa en OpenSSL-konfigurationsfil med namnet openssl_root_ca.cnf för rotcertifikatutfärdarcertifikatet. OpenSSL-konfigurationsfiler innehåller principer och definitioner som används av OpenSSL-kommandon. Kopiera och klistra in följande text i filen 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. Skapa en OpenSSL-konfigurationsfil med namnet openssl_device_intermediate_ca.cnf som ska användas för mellanliggande certifikat och enhetscertifikat. Kopiera och klistra in följande text i filen 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. Skapa katalogstrukturen, databasfilen index.txt och serienummerfilens seriell som används av OpenSSL-kommandon i den här självstudien:

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

Skapa ett rotcertifikatutfärdarcertifikat

Kör följande kommandon för att skapa en privat rotcertifikatutfärdare och ett rotcertifikatutfärdarcertifikat. Du använder det här certifikatet och nyckeln för att signera ditt mellanliggande certifikat.

  1. Skapa en privat nyckel för rotcertifikatutfärdare i Git Bash-terminalen:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. Skapa ett rotcertifikatutfärdarcertifikat:

    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
    

    Viktigt!

    Det extra snedstrecket som anges för ämnesnamnet (//CN=Azure IoT Hub CA Cert Test Only) krävs bara för att undkomma strängen med Git på Windows-plattformar. På Linux-plattformar anger du ämnesnamnet med endast ett snedstreck (/CN=Azure IoT Hub CA Cert Test Only).

  3. Granska rotcertifikatutfärdarcertifikatet:

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

    Observera att utfärdaren och ämnet båda är rotcertifikatutfärdaren.

    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)
    

Skapa ett mellanliggande CA-certifikat

Kör följande kommandon för att skapa en mellanliggande ca privat nyckel och ett mellanliggande CA-certifikat. Du använder det här certifikatet och nyckeln för att signera dina enhetscertifikat.

  1. Skapa en mellanliggande privat ca-nyckel i Git Bash-terminalen:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. Skapa en mellanliggande certifikatsigneringsbegäran (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
    

    Viktigt!

    Det extra snedstrecket som anges för ämnesnamnet (//CN=Azure IoT Hub Intermediate Cert Test Only) krävs bara för att undkomma strängen med Git på Windows-plattformar. På Linux-plattformar anger du ämnesnamnet med ett enda snedstreck (/CN=Azure IoT Hub Intermediate Cert Test Only).

  3. Signera det mellanliggande certifikatet med rotcertifikatutfärdarcertifikatet

    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. Granska det mellanliggande CA-certifikatet:

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

    Observera att utfärdaren är rotcertifikatutfärdaren och att ämnet är den mellanliggande certifikatutfärdaren.

    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)
    

Skapa enhetscertifikat

I det här avsnittet skapar du två enhetscertifikat och deras fullständiga kedjecertifikat. Det fullständiga kedjecertifikatet innehåller enhetscertifikatet, det mellanliggande CA-certifikatet och rotcertifikatutfärdarcertifikatet. Enheten måste visa upp sitt fullständiga kedjecertifikat när den registreras med DPS.

  1. Skapa den första privata enhetens nyckel.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. Skapa CSR för enhetscertifikatet.

    Enhetscertifikatets ämnesnamn (CN) måste anges till det registrerings-ID som enheten använder för att registrera med DPS. Registrerings-ID:t är en skiftlägeskänslig sträng med alfanumeriska tecken plus specialtecken: '-', '.', '_', ':'. Det sista tecknet måste vara alfanumeriskt eller streck ('-'). Det gemensamma namnet måste följa det här formatet. DPS stöder registrerings-ID:t på upp till 128 tecken. Den maximala längden på det gemensamma ämnesnamnet i ett X.509-certifikat är dock 64 tecken. Registrerings-ID:t är därför begränsat till 64 tecken när du använder X.509-certifikat. För gruppregistreringar används registrerings-ID:t också som enhets-ID i IoT Hub.

    Det vanliga ämnesnamnet anges med hjälp av parametern -subj . I följande kommando anges det gemensamma namnet till 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
    

    Viktigt!

    Det extra snedstrecket som anges för ämnesnamnet (//CN=device-01) krävs bara för att undkomma strängen med Git på Windows-plattformar. På Linux-plattformar anger du ämnesnamnet med ett enda snedstreck (/CN=device-01).

  3. Signera enhetscertifikatet.

    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. Granska enhetscertifikatet:

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

    Observera att utfärdaren är den mellanliggande CERTIFIKAT:n och att Ämne är enhetsregistrerings-ID: 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. Enheten måste visa hela certifikatkedjan när den autentiseras med DPS. Använd följande kommando för att skapa certifikatkedjan:

    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. Öppna certifikatkedjefilen ./certs/device-01-full-chain.cert.pem i en textredigerare för att undersöka den. Texten i certifikatkedjan innehåller hela kedjan med alla tre certifikaten. Du använder den här certifikatkedjan senare i den här självstudien för att etablera device-01.

    Den fullständiga kedjetexten har följande format:

    -----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. Om du vill skapa den privata nyckeln, X.509-certifikatet och det fullständiga kedjecertifikatet för den andra enheten kopierar du och klistrar in det här skriptet i git Bash-kommandotolken. Om du vill skapa certifikat för fler enheter kan du ändra variabeln registration_id som deklareras i början av skriptet.

    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
    

    Viktigt!

    Det extra snedstrecket som anges för ämnesnamnet (//CN=$registration_id) krävs bara för att undkomma strängen med Git på Windows-plattformar. På Linux-plattformar anger du ämnesnamnet med ett enda snedstreck (/CN=$registration_id).

    Kommentar

    Det här skriptet använder registrerings-ID:t som basfilnamn för den privata nyckeln och certifikatfilerna. Om ditt registrerings-ID innehåller tecken som inte är giltiga filnamnstecken måste du ändra skriptet i enlighet med detta.

    Varning

    Texten för certifikaten innehåller endast information om offentlig nyckel.

    Enheten måste dock också ha åtkomst till den privata nyckeln för enhetscertifikatet. Detta är nödvändigt eftersom enheten måste utföra verifiering med hjälp av den nyckeln vid körning när den försöker etablera. Känsligheten för den här nyckeln är en av de främsta anledningarna till att du rekommenderar att du använder maskinvarubaserad lagring i en riktig HSM för att skydda privata nycklar.

Du använder följande filer i resten av den här självstudien:

Certifikat Fil beskrivning
rotcertifikatutfärdarcertifikat. certs/azure-iot-test-only.root.ca.cert.pem Har laddats upp till DPS och verifierats.
mellanliggande CA-certifikat certs/azure-iot-test-only.intermediate.cert.pem Används för att skapa en registreringsgrupp i DPS.
privat nyckel för device-01 private/device-01.key.pem Används av enheten för att verifiera ägarskapet för enhetscertifikatet under autentisering med DPS.
device-01 fullständigt kedjecertifikat certs/device-01-full-chain.cert.pem Presenteras av enheten för att autentisera och registrera med DPS.
privat nyckel för device-02 private/device-02.key.pem Används av enheten för att verifiera ägarskapet för enhetscertifikatet under autentisering med DPS.
fullständigt kedjecertifikat för device-02 certs/device-02-full-chain.cert.pem Presenteras av enheten för att autentisera och registrera med DPS.

Verifiera ägarskapet för rotcertifikatet

För att DPS ska kunna verifiera enhetens certifikatkedja under autentiseringen måste du ladda upp och verifiera ägarskapet för rotcertifikatutfärdarcertifikatet. Följ dessa steg för att lägga till rotcertifikatutfärdarcertifikatutfärdarcertifikatet i DPS-instansen:

  1. Gå till instansen av enhetsetableringstjänsten i Azure-portalen.

  2. Öppna Certifikat på den vänstra menyn och välj sedan Lägg till för att lägga till ett nytt certifikat.

  3. Ange ett eget visningsnamn för certifikatet. Bläddra till platsen för rotcertifikatutfärdarcertifikatfilen certs/azure-iot-test-only.root.ca.cert.pem. Välj överför.

  4. Markera rutan för att Ange certifikatstatus som verifierad vid uppladdning.

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

  5. Välj Spara.

  6. Kontrollera att certifikatet visas på certifikatfliken med statusen Verifierad.

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

Uppdatera certifikatarkivet på Windows-baserade enheter

På icke-Windows-enheter kan du skicka certifikatkedjan från koden som certifikatarkiv.

På Windows-baserade enheter måste du lägga till signeringscertifikaten (rot och mellanliggande) i ett Windows-certifikatarkiv. Annars transporteras inte signeringscertifikaten till DPS av en säker kanal med Transport Layer Security (TLS).

Dricks

Det går också att använda OpenSSL i stället för säker kanal (Schannel) med C SDK. Mer information om hur du använder OpenSSL finns i Använda OpenSSL i SDK.

Så här lägger du till signeringscertifikaten i certifikatarkivet på Windows-baserade enheter:

  1. Konvertera dina signeringscertifikat till .pfx följande i Git Bash-terminalen.

    Rotcertifikatutfärdarcertifikat:

    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
    

    Mellanliggande CA-certifikat:

    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. Högerklicka på windows-startknappenoch välj sedan Kör. Ange certmgr.msc och välj Ok för att starta certifikathanteraren.

  3. Under Certifikat – aktuell användare i certifikathanteraren väljer du Betrodda rotcertifikatutfärdare. På menyn väljer du Sedan Åtgärd>alla aktiviteter>Importera.

  4. Följ stegen i guiden Importera certifikat för att importera root.pfx.

    • Se till att söka efter Personlig information Exchange (.pfx)
    • Använd 1234 som lösenord.
    • Placera certifikatet i certifikatarkivet Betrodda rotcertifikatutfärdare .
  5. Upprepa de här certifikathanterarstegen för att importera intermediate.pfx.

    • Placera certifikatet i certifikatarkivet mellanliggande certifikatutfärdare .

Dina signeringscertifikat är nu betrodda på den Windows-baserade enheten och den fullständiga kedjan kan transporteras till DPS.

Skapa en registreringsgrupp

  1. Logga in på Azure-portalen och gå till instansen av enhetsetableringstjänsten.

  2. Välj Hantera registreringar i avsnittet Inställningar i navigeringsmenyn.

  3. Längst upp på sidan väljer du Lägg till registreringsgrupp.

  4. På fliken Registrering + etableringsidan Lägg till registreringsgrupp anger du följande information för att konfigurera information om registreringsgruppen:

    Fält beskrivning
    Intyg Välj X.509 mellanliggande certifikat som attesteringsmekanism om du vill ladda upp mellanliggande certifikat som ska användas för bara den här registreringsgruppen, eller välj X.509-certifikat som laddats upp till den här enhetsetableringstjänsten om du redan har laddat upp mellanliggande certifikat.
    X.509-certifikatinställningar Beroende på vilken attesteringsmetod du valde laddar du antingen upp eller väljer de primära och sekundära mellanliggande certifikaten för den här registreringsgruppen.
    Gruppnamn Ange ett namn för gruppen med enheter. Namnet på registreringsgruppen är en skiftlägeskänslig sträng (upp till 128 tecken lång) med alfanumeriska tecken plus specialtecken: '-', '.', '_', ':'. Det sista tecknet måste vara alfanumeriskt eller streck ('-').
    Etableringsstatus Markera kryssrutan Aktivera den här registreringen om du vill att den här registreringsgruppen ska vara tillgänglig för att etablera enheter. Avmarkera den här rutan om du vill att gruppen ska inaktiveras. Du kan ändra den här inställningen senare.
    Ometableringsprincip Välj en återetableringsprincip som visar hur du vill att DPS ska hantera enheter som begär ometablering. Mer information finns i Ometableringsprinciper

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

  5. Välj Nästa: IoT-hubbar.

  6. På fliken IoT-hubbarsidan Lägg till registreringsgrupp anger du följande information för att avgöra vilka IoT-hubbar som registreringsgruppen kan etablera enheter till:

    Fält beskrivning
    IoT-målhubbar Välj en eller flera av dina länkade IoT-hubbar eller lägg till en ny länk till en IoT-hubb. Mer information om hur du länkar IoT-hubbar till din DPS-instans finns i Länka och hantera IoT-hubbar.
    Allokeringsprincip Om du har valt fler än en länkad IoT-hubb väljer du hur du vill tilldela enheter till de olika hubbarna. Mer information om allokeringsprinciper finns i Använda allokeringsprinciper.

    Om du bara valde en länkad IoT-hubb rekommenderar vi att du använder principen för jämnt viktad distribution .

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

  7. Välj Nästa: Enhetsinställningar

  8. På fliken Enhetsinställningarsidan Lägg till registreringsgrupp anger du följande information för att definiera hur nyligen etablerade enheter ska konfigureras:

    Fält beskrivning
    IoT Edge Kontrollera Aktivera IoT Edge på etablerade enheter om alla enheter som etablerats via den här gruppen kör Azure IoT Edge. Avmarkera den här rutan om den här gruppen endast gäller för enheter som inte är IoT Edge-aktiverade. Antingen är alla enheter i en grupp IoT Edge-aktiverade eller så kan ingen vara det.
    Enhetstaggar Använd den här textrutan om du vill ange eventuella taggar som du vill använda för enhetstvillingar för etablerade enheter.
    Önskade egenskaper Använd den här textrutan om du vill ange önskade egenskaper som du vill använda för enhetstvillingar för etablerade enheter.

    Mer information finns i Understand and use device twins in IoT Hub (Förstå och använda enhetstvillingar i IoT Hub).

  9. Välj Nästa: Granska + skapa.

  10. På fliken Granska + skapa kontrollerar du alla dina värden och väljer sedan Skapa.

Förbereda och köra enhetsetableringskoden

I det här avsnittet uppdaterar du exempelkoden med instansinformationen för enhetsetableringstjänsten. Om en enhet autentiseras tilldelas den till en IoT-hubb som är länkad till enhetsetableringstjänstens instans som konfigurerats i det här avsnittet.

I det här avsnittet använder du git bash-prompten och Visual Studio IDE.

Konfigurera enhetskoden för etablering

I det här avsnittet uppdaterar du exempelkoden med instansinformationen för enhetsetableringstjänsten.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänstens instans och noterar värdet för ID-omfång .

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

  2. Starta Visual Studio och öppna den nya lösningsfilen som skapades i katalogen cmake som du skapade i roten på git-lagringsplatsen azure-iot-sdk-c. Lösningsfilen heter azure_iot_sdks.sln.

  3. I Solution Explorer för Visual Studio navigerar du till Provision_Samples > prov_dev_client_sample > Källfiler och öppnar prov_dev_client_sample.c.

  4. Hitta konstanten id_scope och ersätt värdet med ditt värde för ID-omfång som du kopierade tidigare. Till exempel:

    static const char* id_scope = "0ne00000A0A";
    
  5. Hitta definitionen för funktionen main() i samma fil. Kontrollera att variabeln hsm_type är inställd på SECURE_DEVICE_TYPE_X509 och att alla andra hsm_type rader har kommenterats ut. Till exempel:

    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. Spara dina ändringar.

  7. Högerklicka på projektet prov_dev_client_sample och välj Ange som startprojekt.

Konfigurera den anpassade HSM-stub-koden

Detaljerna för att interagera med faktisk säker maskinvarubaserad lagring varierar beroende på enhetens maskinvara. Certifikatkedjorna som används av de simulerade enheterna i den här självstudien hårdkodas i den anpassade HSM-stub-koden. I ett verkligt scenario skulle certifikatkedjan lagras i den faktiska HSM-maskinvaran för att ge bättre säkerhet för känslig information. Metoder som liknar de stub-metoder som används i det här exemplet implementeras sedan för att läsa hemligheterna från den maskinvarubaserade lagringen.

Även om HSM-maskinvara inte krävs rekommenderar vi att du skyddar känslig information som certifikatets privata nyckel. Om en faktisk HSM anropades av exemplet skulle den privata nyckeln inte finnas i källkoden. Om du har nyckeln i källkoden exponeras nyckeln för alla som kan visa koden. Detta görs endast i den här självstudien för att hjälpa till med inlärningen.

Så här uppdaterar du den anpassade HSM-stub-koden för att simulera enhetens identitet med ID device-01:

  1. I Solution Explorer för Visual Studio navigerar du till Provision_Samples > custom_hsm_example > Källfiler och öppnar custom_hsm_example.c.

  2. Uppdatera strängvärdet för strängkonstanten COMMON_NAME med det vanliga namnet du använde när du genererade enhetscertifikatet.

    static const char* const COMMON_NAME = "device-01";
    
  3. I Git Bash-terminalen kör du följande kommando för att generera strängkonstanten för enhetscertifikatet:

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

    Kopiera utdata från det här kommandot.

  4. Uppdatera strängvärdet för konstantsträngen CERTIFICATE med hjälp av certifikatkedjan som du sparade i ./certs/device-01-full-chain.cert.pem när du har genererat dina certifikat. Använd utdatacertifikattexten från föregående steg för konstantvärdet.

    Syntaxen för certifikattext måste matcha följande mönster utan extra blanksteg eller parsning som görs av 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. I Git Bash kör du följande kommando för att generera strängkonstanten för enhetens privata nyckel:

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

    Kopiera utdata från det här kommandot.

  6. Uppdatera strängvärdet för konstanten PRIVATE_KEY med den privata nyckeln för enhetscertifikatet. Använd utdatatexten för privat nyckel från föregående steg för konstantvärdet.

    Syntaxen för den privata nyckeltexten måste matcha följande mönster utan extra blanksteg eller parsning som görs av 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. Spara dina ändringar.

  8. Högerklicka på projektet custom_hsm_example och välj Skapa.

    Viktigt!

    Du måste skapa custom_hsm_example projektet innan du skapar resten av lösningen i nästa avsnitt.

Kör exemplet

  1. I Visual Studio-menyn väljer du Felsökning>Starta utan felsökning för att köra lösningen. När du uppmanas att återskapa projektet väljer du Ja för att återskapa projektet innan du kör det.

    Följande utdata är ett exempel på en simulerad enhet device-01 som startar och ansluter till etableringstjänsten. Enheten tilldelades en IoT-hubb och registrerades:

    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. Upprepa stegen i Konfigurera den anpassade HSM-stub-koden för den andra enheten (device-02) och kör exemplet igen. Använd följande värden för enheten:

    beskrivning Värde
    Allmänt namn "device-02"
    Fullständig certifikatkedja Generera texten med . /certs/device-02-full-chain.cert.pem
    Privat nyckel Generera texten med hjälp av ./private/device-02.key.pem

    Följande utdata är ett exempel på att den simulerade enheten device-02 startar och ansluter till etableringstjänsten. Enheten tilldelades en IoT-hubb och registrerades:

    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:
    

C#-exempelkoden har konfigurerats för att använda X.509-certifikat som lagras i en lösenordsskyddad PKCS#12-formaterad fil (.pfx). De fullständiga kedjecertifikat som du skapade tidigare är i PEM-format. Om du vill konvertera fullständiga kedjecertifikat till PKCS#12-format anger du följande kommandon i Git Bash-prompten från katalogen där du tidigare körde OpenSSL-kommandona.

  • 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
    

I resten av det här avsnittet använder du din Windows-kommandotolk.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera ID-omfångsvärdet.

    Screenshot of the ID scope on Azure portal.

  3. I windows-kommandotolken ändrar du till katalogen X509Sample . Den här katalogen finns på den SDK-lagringsplats som du klonade i ett tidigare steg: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. Ange följande kommando för att skapa och köra X.509-enhetsetableringsexemplet. Ersätt <id-scope> med det ID-omfång som du kopierade från Azure-portalen. Ersätt <your-certificate-folder> med sökvägen till mappen där du körde Dina OpenSSL-kommandon.

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

    Enheten ansluter till DPS och tilldelas till en IoT-hubb. Sedan skickar enheten ett telemetrimeddelande till IoT-hubben. Du bör se utdata som liknar följande exempel:

    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.
    

    Kommentar

    Om du inte anger certifikat och lösenord på kommandoraden kommer certifikatfilen som standard att vara ./certificate.pfx och du uppmanas att ange ditt lösenord.

    Ytterligare parametrar kan skickas för att ändra TransportType (-t) och GlobalDeviceEndpoint (-g). För en fullständig lista över parametrar typ dotnet run -- --help.

  5. Om du vill registrera den andra enheten kör du exemplet igen med hjälp av det fullständiga kedjecertifikatet.

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

Använd windows-kommandotolken i följande steg.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera ID-omfångsvärdet.

    Screenshot of the ID scope in the Azure portal.

  3. I windows-kommandotolken går du till exempelkatalogen och installerar de paket som behövs i exemplet. Sökvägen som visas är relativ till den plats där du klonade SDK:et.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    
  4. I mappen provisioning\device\samples öppnar du register_x509.js och granskar koden.

    Exemplet är som standard MQTT som transportprotokoll. Om du vill använda ett annat protokoll kommenterar du ut följande rad och avkommentarer raden för lämpligt protokoll.

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

    Exemplet använder fem miljövariabler för att autentisera och etablera en IoT-enhet med DPS. Dessa miljövariabler är:

    Variabelnamn beskrivning
    PROVISIONING_HOST Slutpunkten som ska användas för att ansluta till din DPS-instans. I den här självstudien använder du den globala slutpunkten, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE ID-omfånget för din DPS-instans.
    PROVISIONING_REGISTRATION_ID Registrerings-ID för din enhet. Det måste matcha det vanliga ämnesnamnet i enhetscertifikatet.
    CERTIFICATE_FILE Sökvägen till enhetens fullständiga kedjecertifikatfil.
    KEY_FILE Sökvägen till den privata nyckelfilen för enhetscertifikatet.

    Metoden ProvisioningDeviceClient.register() försöker registrera enheten.

  5. Lägg till miljövariabler för den globala enhetsslutpunkten och ID-omfånget. Ersätt <id-scope> med det värde som du kopierade från Azure-portalen.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. Ange miljövariabeln för enhetsregistrerings-ID:t. Registrerings-ID:t för IoT-enheten måste matcha ämnesnamnet på enhetscertifikatet. I den här självstudien är device-01 både ämnesnamnet och registrerings-ID:t för enheten.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. Ange miljövariablerna för det fullständiga kedjecertifikatet och de privata nyckelfiler för enheten som du genererade tidigare. Ersätt <your-certificate-folder> med sökvägen till mappen där du körde Dina OpenSSL-kommandon.

    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. Kör exemplet och kontrollera att enheten har etablerats.

    node register_x509.js
    

    Du bör se utdata som liknar följande exempel:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=device-01
    Client connected
    send status: MessageEnqueued
    
  9. Uppdatera miljövariablerna för den andra enheten (device-02) enligt följande tabell och kör exemplet igen.

    Miljövariabel Värde
    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

Använd windows-kommandotolken i följande steg.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera ID-omfånget.

    Screenshot of the ID scope in the Azure portal.

  3. I windows-kommandotolken går du till katalogen för det provision_x509.py exemplet. Sökvägen som visas är relativ till den plats där du klonade SDK:et.

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

    Det här exemplet använder sex miljövariabler för att autentisera och etablera en IoT-enhet med DPS. Dessa miljövariabler är:

    Variabelnamn beskrivning
    PROVISIONING_HOST Slutpunkten som ska användas för att ansluta till din DPS-instans. I den här självstudien använder du den globala slutpunkten, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE ID-omfånget för din DPS-instans.
    DPS_X509_REGISTRATION_ID Registrerings-ID för din enhet. Det måste matcha det vanliga ämnesnamnet i enhetscertifikatet.
    X509_CERT_FILE Sökvägen till enhetens fullständiga kedjecertifikatfil.
    X509_KEY_FILE Sökvägen till den privata nyckelfilen för enhetscertifikatet.
    PASS_PHRASE Lösenfrasen som används för att kryptera den privata nyckelfilen (om den används). Behövs inte för den här självstudien.
  4. Lägg till miljövariablerna för den globala enhetsslutpunkten och ID-omfånget. För ID-omfångsvariabeln använder du det värde som du kopierade från Azure-portalen.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Ange miljövariabeln för enhetsregistrerings-ID:t. Registrerings-ID:t för IoT-enheten måste matcha ämnesnamnet på enhetscertifikatet. I den här självstudien är device-01 både ämnesnamnet och registrerings-ID:t för enheten.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. Ange miljövariablerna för det fullständiga kedjecertifikatet och de privata nyckelfiler för enheten som du genererade tidigare. Ersätt <your-certificate-folder> med sökvägen till mappen där du körde Dina OpenSSL-kommandon.

    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. Granska koden för provision_x509.py. Om du inte använder Python version 3.7 eller senare gör du den kodändring som nämns här för att ersätta asyncio.run(main()).

  8. Kör exemplet. Exemplet ansluter till DPS, som etablerar enheten till en IoT-hubb. När enheten har etablerats skickar exemplet några testmeddelanden till IoT-hubben.

    python provision_x509.py
    

    Du bör se utdata som liknar följande exempel:

    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. Uppdatera miljövariablerna för den andra enheten (device-02) enligt följande tabell och kör exemplet igen.

    Miljövariabel Värde
    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

I följande steg använder du både windows-kommandotolken och Git Bash-prompten.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera ID-omfånget.

    Screenshot of the ID scope in the Azure portal.

  3. I windows-kommandotolken navigerar du till exempelprojektmappen. Sökvägen som visas är relativ till den plats där du klonade SDK:et

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Ange etableringstjänsten och X.509-identitetsinformationen i exempelkoden. Detta används under etableringen för attestering av den simulerade enheten före enhetsregistrering.

    1. Öppna filen .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java i din favoritredigerare.

    2. Uppdatera följande värden. För idScopeanvänder du det ID-omfång som du kopierade tidigare. Använd slutpunkten Global enhet för global slutpunkt för global slutpunkt. Den här slutpunkten är densamma för varje DPS-instans, 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. Exemplet använder som standard HTTPS som transportprotokoll. Om du vill ändra protokollet kommenterar du ut följande rad och avkommentarer raden för det protokoll som du vill använda.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Uppdatera värdet för konstantsträngen leafPublicPem med värdet för enhetscertifikatet device-01.cert.pem.

      Syntaxen för certifikattext måste matcha följande mönster utan extra blanksteg eller tecken.

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

      Att uppdatera det här strängvärdet manuellt kan vara felbenäget. Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet leafPublicPem och skriver det till utdata.

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

      Kopiera och klistra in utdatacertifikattexten för konstantvärdet.

    5. Uppdatera strängvärdet för konstanten leafPrivateKey med den okrypterade privata nyckeln för enhetscertifikatet, unencrypted-device-key.pem.

      Syntaxen för den privata nyckeltexten måste matcha följande mönster utan extra blanksteg eller tecken.

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

      Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet leafPrivateKey och skriver det till utdata.

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

      Kopiera och klistra in utdatatexten för den privata nyckeln för konstantvärdet.

    6. Lägg till en rootPublicPem konstant sträng med värdet för rotcertifikatutfärdarcertifikatet azure-iot-test-only.root.ca.cert.pem. Du kan lägga till den strax efter konstanten leafPrivateKey .

      Syntaxen för certifikattext måste matcha följande mönster utan extra blanksteg eller tecken.

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

      Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet rootPublicPem och skriver det till utdata.

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

      Kopiera och klistra in utdatacertifikattexten för konstantvärdet.

    7. Lägg till en intermediatePublicPem konstant sträng med värdet för ditt mellanliggande CA-certifikat, azure-iot-test-only.intermediate.cert.pem. Du kan lägga till den strax efter den föregående konstanten.

      Syntaxen för certifikattext måste matcha följande mönster utan extra blanksteg eller tecken.

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

      Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet intermediatePublicPem och skriver det till utdata.

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

      Kopiera och klistra in utdatacertifikattexten för konstantvärdet.

    8. Hitta följande rader i main metoden.

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

      Lägg till dessa två rader direkt under dem för att lägga till dina mellanliggande certifikat och rotcertifikatutfärdarcertifikat i signeringskedjan. Din signeringskedja bör innehålla hela certifikatkedjan fram till och med ett certifikat som du har verifierat med DPS.

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

      Kommentar

      Ordningen som signeringscertifikaten läggs till är viktig. Exemplet misslyckas om det ändras.

    9. Spara dina ändringar.

  5. Skapa exemplet och gå sedan till target mappen.

    mvn clean install
    cd target
    
  6. Versionen matar ut .jar fil i target mappen med följande filformat: provisioning-x509-sample-{version}-with-deps.jar; till exempel: provisioning-x509-sample-1.8.1-with-deps.jar. Kör .jar-filen. Du kan behöva ersätta versionen i följande kommando.

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

    Exemplet ansluter till DPS, som etablerar enheten till en IoT-hubb. När enheten har etablerats skickar exemplet några testmeddelanden till IoT-hubben.

    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. Uppdatera konstanterna för den andra enheten (device-02) enligt följande tabell, återskapa och kör exemplet igen.

    Konstant Fil som ska användas
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./private/device-02.key.pem

Bekräfta registreringen av enhetsetablering

Granska registreringsposterna för registreringsgruppen för att se registreringsinformationen för dina enheter:

  1. I Azure-portalen går du till instansen av enhetsetableringstjänsten.

  2. På menyn Inställningar väljer du Hantera registreringar.

  3. Välj Registreringsgrupper. Posten för X.509-registreringsgruppen som du skapade tidigare bör visas i listan.

  4. Välj registreringsposten. Välj sedan Information bredvid registreringsstatusen för att se de enheter som har registrerats via registreringsgruppen. Den IoT-hubb som var och en av dina enheter tilldelades till, deras enhets-ID:n och de datum och tider som de registrerades visas i listan.

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

  5. Du kan välja en av enheterna för att se mer information om den enheten.

Så här verifierar du enheterna på din IoT-hubb:

  1. I Azure-portalen går du till den IoT-hubb som enheten har tilldelats till.

  2. I menyn Enhetshantering väljer du Enheter.

  3. Om enheterna har etablerats bör deras enhets-ID:n, device-01 och device-02, visas i listan, med Status inställt som aktiverat. Om du inte ser dina enheter väljer du Uppdatera.

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

Rensa resurser

När du är klar med att testa och utforska det här enhetsklientexemplet använder du följande steg för att ta bort alla resurser som skapats av den här självstudien.

  1. Stäng utdatafönstret för enhetsklientexemplet på datorn.

Ta bort din registreringsgrupp

  1. På den vänstra menyn i Azure-portalen väljer du Alla resurser.

  2. Välj din DPS-instans.

  3. På menyn Inställningar väljer du Hantera registreringar.

  4. Välj fliken Registreringsgrupper .

  5. Välj den registreringsgrupp som du använde för den här självstudien.

  6. På sidan Registreringsinformation väljer du Information bredvid Registreringsstatus. Markera sedan kryssrutan bredvid kolumnrubriken Enhets-ID för att markera alla registreringsposter för registreringsgruppen. Välj Ta bort överst på sidan för att ta bort registreringsposterna.

    Viktigt!

    Om du tar bort en registreringsgrupp tas inte de registreringsposter som är associerade med den bort. Dessa överblivna poster räknas mot registreringskvoten för DPS-instansen. Därför är det bästa praxis att ta bort alla registreringsposter som är associerade med en registreringsgrupp innan du tar bort själva registreringsgruppen.

  7. Gå tillbaka till sidan Hantera registreringar och kontrollera att fliken Registreringsgrupper är markerad.

  8. Markera kryssrutan bredvid gruppnamnet för den registreringsgrupp som du använde för den här självstudien.

  9. Välj Ta bort längst upp på sidan.

Ta bort registrerade CA-certifikat från DPS

  1. Välj Certifikat på den vänstra menyn i DPS-instansen. För varje certifikat som du laddade upp och verifierade i den här självstudien väljer du certifikatet och väljer Ta bort och bekräftar ditt val att ta bort det.

Ta bort enhetsregistreringar från IoT Hub

  1. På den vänstra menyn i Azure-portalen väljer du Alla resurser.

  2. Välj din IoT-hubb.

  3. I menyn Utforskareväljer du IoT-enheter.

  4. Markera kryssrutan bredvid enhets-ID för de enheter som du registrerade i den här självstudien. Till exempel device-01 och device-02.

  5. Välj Ta bort längst upp på sidan.

Nästa steg

I den här självstudien etablerade du flera X.509-enheter till din IoT-hubb med hjälp av en registreringsgrupp. Lär dig sedan hur du etablerar IoT-enheter över flera hubbar.