Share via


Oktatóanyag: Több X.509-eszköz kiépítése regisztrációs csoportokkal

Ebben az oktatóanyagban megtudhatja, hogyan építhet ki X.509-tanúsítványokat használó IoT-eszközök csoportjait a hitelesítéshez. Az Azure IoT SDK-ból származó mintaeszközkód végrehajtása a fejlesztői gépen történik az X.509-eszközök kiépítésének szimulálásához. Valós eszközökön az eszközkód üzembe lesz helyezve, és az IoT-eszközről fut.

Az Azure IoT Hub Device Provisioning Service két típusú regisztrációt támogat az eszközök kiépítéséhez:

  • Regisztrációs csoportok: Több kapcsolódó eszköz regisztrálásához. Ez az oktatóanyag bemutatja a regisztrációs csoportokkal való kiépítést.
  • Egyéni regisztrációk: Egyetlen eszköz regisztrálására szolgál.

Az Azure IoT Hub Device Provisioning Service három hitelesítési formát támogat az eszközök kiépítéséhez:

  • X.509-tanúsítványok – Ez az oktatóanyag bemutatja az X.509-tanúsítványigazolást
  • Megbízható platformmodul (TPM)
  • Szimmetrikus kulcsok

Éles helyzetekben a hardveres biztonsági modul (HSM) az eszköz titkos kulcsainak biztonságos, hardveralapú tárolására szolgál. A HSM szimmetrikus kulccsal, X.509-tanúsítvánnyal vagy TPM-igazolással használható a titkos kódok biztonságos tárolásához. Az eszköz titkos kulcsainak hardveralapú tárolása ajánlott a bizalmas információk, például az eszköztanúsítvány titkos kulcsának védelme érdekében.

Ebben az oktatóanyagban a következő célkitűzéseket hajtja végre:

  • Hozzon létre egy megbízhatósági tanúsítványláncot egy eszközcsoport X.509-tanúsítványokkal való rendszerezéséhez.
  • Hozzon létre egy új csoportregisztrációt, amely a tanúsítványláncot használja.
  • Állítsa be a fejlesztési környezetet.
  • Eszközök kiépítése a tanúsítványlánc használatával az Azure IoT-eszköz SDK-ban található mintakóddal.

Előfeltételek

Az alábbi előfeltételek az eszközök szimulálásához használt Windows fejlesztői környezethez tartoznak. Linux vagy macOS esetén lásd a fejlesztési környezet előkészítése című szakaszt az SDK dokumentációjában.

  • Telepítse a Visual Studio 2022-t az "Asztali fejlesztés C++ használatával" számítási feladat engedélyezésével. A Visual Studio 2015, a Visual Studio 2017 és a Visual Studio 19 is támogatott.

  • Telepítse a legújabb CMake buildrendszert. Ellenőrizze, hogy a CMake végrehajtható fájlját hozzáadja-e az elérési úthoz.

    Fontos

    A telepítés megkezdése előtt győződjön meg arról, hogy a Visual Studio előfeltételei (a Visual Studio és az asztali fejlesztés C++-tal) telepítve vannak a CMake számítógépen. Ha az előfeltételek telepítve vannak, és ellenőrizte a letöltött fájlt, telepítse a CMake buildelési rendszert. Vegye figyelembe azt is, hogy a CMake buildrendszer régebbi verziói nem tudják létrehozni az oktatóanyagban használt megoldásfájlt. Ügyeljen arra, hogy a CMake legújabb verzióját használja.

Az alábbi előfeltételek a Windows fejlesztői környezethez tartoznak. Linux vagy macOS esetén lásd a fejlesztési környezet előkészítése című szakaszt az SDK dokumentációjában.

  • Telepítse a .NET SDK 6.0-s vagy újabb verzióját Windows-alapú gépére. A verzió ellenőrzéséhez használja az alábbi parancsot.

    dotnet --info
    

Az alábbi előfeltételek a Windows fejlesztői környezethez tartoznak. Linux vagy macOS esetén lásd a fejlesztési környezet előkészítése című szakaszt az SDK dokumentációjában.

Az alábbi előfeltételek a Windows fejlesztői környezethez tartoznak.

Az alábbi előfeltételek a Windows fejlesztői környezethez tartoznak. Linux vagy macOS esetén lásd a fejlesztési környezet előkészítése című szakaszt az SDK dokumentációjában.

  • Telepítse a Git legújabb verzióját. Győződjön meg arról, hogy a Git hozzá van adva a parancsablakhoz elérhető környezeti változókhoz.

  • Győződjön meg arról, hogy az OpenSSL telepítve van a gépen. Windows rendszeren a Git telepítése tartalmazza az OpenSSL telepítését. Az OpenSSL-t a Git Bash-parancssorból érheti el. Az OpenSSL telepítésének ellenőrzéséhez nyisson meg egy Git Bash-parancssort, és írja be a következőt openssl version:

    Feljegyzés

    Ha nem ismeri az OpenSSL-t, és már telepítve van a Windows rendszerű gépére, javasoljuk, hogy használja az OpenSSL-t a Git Bash-parancssorból. Másik lehetőségként letöltheti a forráskódot, és létrehozhatja az OpenSSL-t. Ha az OpenSSL létrehozása vagy letöltése mellett dönt, győződjön meg arról, hogy az OpenSSL bináris elérhető az elérési úton, és hogy a OPENSSL_CNF környezeti változó az opensl.cnf fájl elérési útjára van állítva.

A fejlesztőkörnyezet előkészítése

Ebben a szakaszban az Azure IoT C SDK létrehozásához használt fejlesztői környezetet készíti elő. Az SDK mintakódot és a DPS-vel létesített eszközök által használt eszközöket tartalmaz.

  1. Egy webböngészőben nyissa meg az Azure IoT C SDK kiadási lapját.

  2. Másolja ki az Azure IoT C SDK legújabb kiadásának címkéjét, például: lts_03_2024.

  3. Nyisson meg egy Windows parancssort, és futtassa a következő parancsokat az Azure IoT Device SDK for C GitHub-adattár legújabb kiadásának klónozásához. Cserélje le <release-tag> az előző lépésben másolt címkére.

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

    A művelet végrehajtása több percet is igénybe vehet.

  4. Ha a művelet befejeződött, futtassa a következő parancsokat a azure-iot-sdk-c könyvtárból:

    mkdir cmake
    cd cmake
    
  5. A kódminta X.509-tanúsítványt használ az X.509-hitelesítéssel történő igazoláshoz. Futtassa a következő parancsot az SDK azon verziójának létrehozásához, amely a fejlesztői platformra vonatkozik, amely tartalmazza az eszközkiépítési ügyfelet. A rendszer létrehoz egy Visual Studio-megoldást a szimulált eszközhöz a cmake címtárban.

    Cserélje le <path a klónozott C SDK abszolút elérési útját.

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

    Tipp.

    Ha cmake nem találja a C++ fordítót, a fenti parancs futtatásakor buildelési hibák léphetnek fel. Ha ez történik, futtassa a parancsot a Visual Studio parancssorában.

  6. Ha a build sikeres, az utolsó néhány kimeneti sor az alábbi kimenethez hasonlóan néz ki:

    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
    

Nyisson meg egy Windows parancssort, és klónozza az Azure IoT SDK for C# GitHub-adattárat az alábbi paranccsal:

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

Nyisson meg egy Windows parancssort, és klónozza az Azure IoT SDK-t Node.js GitHub-adattárhoz az alábbi paranccsal:

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

Nyisson meg egy Windows parancssort, és klónozza az Azure IoT Device SDK for Python GitHub-adattárat a következő paranccsal:

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

Feljegyzés

Az oktatóanyagban használt minták az azure-iot-sdk-python-adattár v2 ágában találhatók. A Python SDK V3-a elérhető bétaverzióban.

  1. Nyisson meg egy Windows-parancssort, és klónozza az Azure IoT Samples for Java GitHub-adattárat a következő paranccsal:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Nyissa meg a gyökérkönyvtárat azure-iot-sdk-java , és hozza létre a projektet az összes szükséges csomag letöltéséhez.

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

X.509-tanúsítványlánc létrehozása

Ebben a szakaszban egy három tanúsítványból álló X.509-tanúsítványláncot hoz létre az egyes eszközök teszteléséhez ezzel az oktatóanyaggal. A tanúsítványok a következő hierarchiával rendelkeznek.

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

Főtanúsítvány : Feltölti és ellenőrzi a főtanúsítványt a DPS használatával. Ez az ellenőrzés lehetővé teszi, hogy a DPS megbízhatónak minősítse a tanúsítványt, és ellenőrizze az általa aláírt tanúsítványokat.

Köztes tanúsítvány: Gyakran használnak köztes tanúsítványokat az eszközök logikai csoportosításához terméksorok, vállalati részlegek vagy egyéb feltételek szerint. Ez az oktatóanyag egy tanúsítványláncot használ egy köztes tanúsítvánnyal, de éles környezetben több is lehet. A lánc köztes tanúsítványát a főtanúsítvány írja alá. Ez a tanúsítvány a DPS-ben létrehozott regisztrációs csoportnak van megadva. Ez a konfiguráció lehetővé teszi olyan eszközök teljes csoportjának kezelését, amelyek eszköztanúsítványait ugyanazzal a köztes tanúsítvánnyal írták alá.

Eszköztanúsítványok: Az eszköztanúsítványokat (más néven levéltanúsítványokat) a köztes tanúsítvány írja alá, és az eszközön tárolja a titkos kulcsával együtt. Ideális esetben ezek a bizalmas elemek biztonságosan tárolhatók egy HSM-sel. Ugyanazon köztes tanúsítvány több eszköztanúsítványt is aláírhat. Minden eszköz a tanúsítványt és a titkos kulcsot, valamint a tanúsítványláncot mutatja be a kiépítési kísérlet során.

További információ a tanúsítványláncokról: X.509 tanúsítványigazolás.

Az X.509 OpenSSL-környezet beállítása

Ebben a szakaszban az Opensl-konfigurációs fájlokat, a címtárstruktúrát és az Opensl-parancsok által használt egyéb fájlokat hozza létre.

  1. Nyisson meg egy Git Bash-parancssort, és lépjen egy olyan mappába, ahol létre szeretné hozni az oktatóanyaghoz tartozó X.509-tanúsítványokat és -kulcsokat.

  2. Hozzon létre egy openssl_root_ca.cnf nevű OpenSSL-konfigurációs fájlt a legfelső szintű hitelesítésszolgáltatói tanúsítványhoz. Az OpenSSL konfigurációs fájljai olyan szabályzatokat és definíciókat tartalmaznak, amelyeket az OpenSSL-parancsok használnak. Másolja és illessze be a következő szöveget a openssl_root_ca.cnf fájlba:

    # 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. Hozzon létre egy openssl_device_intermediate_ca.cnf nevű OpenSSL-konfigurációs fájlt köztes és eszköztanúsítványokhoz. Másolja és illessze be a következő szöveget a openssl_device_intermediate_ca.cnf fájlba:

    # 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. Hozza létre a könyvtárstruktúrát, az adatbázisfájlt index.txt és az OpenSSL-parancsok által használt sorozatszámot az oktatóanyagban:

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

Legfelső szintű hitelesítésszolgáltatói tanúsítvány létrehozása

Futtassa az alábbi parancsokat egy legfelső szintű hitelesítésszolgáltató titkos kulcsának és egy legfelső szintű hitelesítésszolgáltatói tanúsítványnak a létrehozásához. Ezzel a tanúsítvánnyal és kulccsal írja alá a köztes tanúsítványt.

  1. A Git Bash-terminálban hozzon létre egy legfelső szintű hitelesítésszolgáltató titkos kulcsát:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. Legfelső szintű hitelesítésszolgáltatói tanúsítvány létrehozása:

    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
    

    Fontos

    A tárgynévhez (//CN=Azure IoT Hub CA Cert Test Only) megadott további perjel csak a Gittel való sztring windowsos platformokon való feloldásához szükséges. Linux-platformokon csak egy perjellel (/CN=Azure IoT Hub CA Cert Test Only) adja meg a tulajdonos nevét.

  3. Vizsgálja meg a legfelső szintű hitelesítésszolgáltató tanúsítványát:

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

    Figyelje meg, hogy a kiállító és a tulajdonos egyaránt a legfelső szintű hitelesítésszolgáltató.

    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)
    

Köztes hitelesítésszolgáltatói tanúsítvány létrehozása

Futtassa az alábbi parancsokat egy köztes hitelesítésszolgáltatói titkos kulcs és egy köztes hitelesítésszolgáltatói tanúsítvány létrehozásához. Ezzel a tanúsítvánnyal és kulccsal írhatja alá az eszköztanúsítványokat.

  1. A Git Bash-terminálban hozzon létre egy köztes hitelesítésszolgáltató titkos kulcsát:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. Köztes hitelesítésszolgáltatói tanúsítvány-aláírási kérelem (CSR) létrehozása:

    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
    

    Fontos

    A tárgynévhez (//CN=Azure IoT Hub Intermediate Cert Test Only) megadott további perjel csak a Gittel való sztring windowsos platformokon való feloldásához szükséges. Linux-platformokon adja meg a tulajdonos nevét egyetlen perjellel (/CN=Azure IoT Hub Intermediate Cert Test Only).

  3. A köztes tanúsítvány aláírása a legfelső szintű hitelesítésszolgáltatói tanúsítvánnyal

    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. Vizsgálja meg a köztes hitelesítésszolgáltatói tanúsítványt:

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

    Figyelje meg, hogy a kiállító a legfelső szintű hitelesítésszolgáltató, a tulajdonos pedig a köztes hitelesítésszolgáltató.

    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)
    

Eszköztanúsítványok létrehozása

Ebben a szakaszban két eszköztanúsítványt és azok teljes láncú tanúsítványait hozza létre. A teljes lánctanúsítvány tartalmazza az eszköztanúsítványt, a köztes hitelesítésszolgáltatói tanúsítványt és a legfelső szintű hitelesítésszolgáltatói tanúsítványt. Az eszköznek be kell mutatnia a teljes lánc tanúsítványát, amikor regisztrál a DPS-ben.

  1. Hozza létre az első eszköz titkos kulcsát.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. Hozza létre az eszköztanúsítvány CSR-ét.

    Az eszköztanúsítvány tulajdonosi köznapi nevét (CN) arra a regisztrációs azonosítóra kell beállítani, amelyet az eszköz a DPS-ben való regisztrációhoz használ. A regisztrációs azonosító az alfanumerikus karakterek kis- és nagybetűket nem megkülönböztető sztringje, valamint a speciális karakterek: '-', '.', '_', ':'. Az utolsó karakternek alfanumerikusnak vagy kötőjelnek ('-') kell lennie. A köznapi névnek meg kell felelnie ennek a formátumnak. A DPS legfeljebb 128 karakter hosszú regisztrációs azonosítókat támogat; az X.509-tanúsítványban azonban a tulajdonos közös nevének maximális hossza 64 karakter. A regisztrációs azonosító ezért X.509-tanúsítványok használatakor legfeljebb 64 karakter hosszúságú lehet. Csoportregisztrációk esetén a regisztrációs azonosító az IoT Hub eszközazonosítójaként is használatos.

    A tulajdonos közös neve a -subj paraméterrel van beállítva. A következő parancsban a köznapi név device-01 értékre van állítva.

    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
    

    Fontos

    A tárgynévhez (//CN=device-01) megadott további perjel csak a Gittel való sztring windowsos platformokon való feloldásához szükséges. Linux-platformokon adja meg a tulajdonos nevét egyetlen perjellel (/CN=device-01).

  3. Írja alá az eszköztanúsítványt.

    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. Vizsgálja meg az eszköztanúsítványt:

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

    Figyelje meg, hogy a kibocsátó a köztes hitelesítésszolgáltató, a tulajdonos pedig az eszközregisztrációs azonosító. 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. Az eszköznek be kell mutatnia a teljes tanúsítványláncot, amikor a DPS-vel hitelesít. A tanúsítványlánc létrehozásához használja a következő parancsot:

    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. Nyissa meg a ./certs/device-01-full-chain.cert.pem tanúsítványláncfájlt egy szövegszerkesztőben a vizsgálatához. A tanúsítványlánc szövege mindhárom tanúsítvány teljes láncát tartalmazza. Ezt a tanúsítványláncot az oktatóanyag későbbi részében használhatja a kiépítéshez device-01.

    A teljes láncszöveg formátuma a következő:

    -----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. A második eszköz titkos kulcsának, X.509-tanúsítványának és teljes láncú tanúsítványának létrehozásához másolja és illessze be ezt a szkriptet a Git Bash parancssorába. Ha további eszközökhöz szeretne tanúsítványokat létrehozni, módosíthatja a registration_id szkript elején deklarált változót.

    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
    

    Fontos

    A tárgynévhez (//CN=$registration_id) megadott további perjel csak a Gittel való sztring windowsos platformokon való feloldásához szükséges. Linux-platformokon adja meg a tulajdonos nevét egyetlen perjellel (/CN=$registration_id).

    Feljegyzés

    Ez a szkript a regisztrációs azonosítót használja a titkos kulcs- és tanúsítványfájlok alapfájlneveként. Ha a regisztrációs azonosító nem érvényes fájlnév karaktereket tartalmaz, ennek megfelelően módosítania kell a szkriptet.

    Figyelmeztetés

    A tanúsítványok szövege csak nyilvános kulcsadatokat tartalmaz.

    Az eszköznek azonban hozzá kell férnie az eszköztanúsítvány titkos kulcsához is. Erre azért van szükség, mert az eszköznek futásidőben az adott kulccsal kell ellenőrzést végeznie, amikor kiépítést kísérel meg. Ennek a kulcsnak a bizalmassága az egyik fő oka annak, hogy ajánlott hardveralapú tárolót használni egy valódi HSM-ben a titkos kulcsok biztonságossá tételéhez.

Az oktatóanyag további részében a következő fájlokat használja:

Tanúsítvány Fájl Leírás
legfelső szintű hitelesítésszolgáltatói tanúsítvány. certs/azure-iot-test-only.root.ca.cert.pem Feltöltve a DPS-be, és ellenőrizte.
köztes hitelesítésszolgáltatói tanúsítvány certs/azure-iot-test-only.intermediate.cert.pem Regisztrációs csoport létrehozására szolgál a DPS-ben.
device-01 titkos kulcs private/device-01.key.pem Az eszköz az eszköztanúsítvány tulajdonjogának ellenőrzésére használja a DPS-hitelesítés során.
device-01 teljes láncú tanúsítvány certs/device-01-full-chain.cert.pem Az eszköz a DPS hitelesítéséhez és regisztrálásához mutatja be.
device-02 titkos kulcs private/device-02.key.pem Az eszköz az eszköztanúsítvány tulajdonjogának ellenőrzésére használja a DPS-hitelesítés során.
device-02 teljes láncú tanúsítvány certs/device-02-full-chain.cert.pem Az eszköz a DPS hitelesítéséhez és regisztrálásához mutatja be.

A főtanúsítvány tulajdonjogának ellenőrzése

Ahhoz, hogy a DPS érvényesíthesse az eszköz tanúsítványláncát a hitelesítés során, fel kell töltenie és ellenőriznie kell a legfelső szintű hitelesítésszolgáltatói tanúsítvány tulajdonjogát. Ha hozzá szeretné adni a fő hitelesítésszolgáltatói tanúsítványt a DPS-példányhoz, kövesse az alábbi lépéseket:

  1. Az Azure Portalon keresse meg a Device Provisioning Service-példányt.

  2. A bal oldali menüben nyissa meg a Tanúsítványok elemet, majd válassza a Hozzáadás lehetőséget egy új tanúsítvány hozzáadásához.

  3. Adjon meg egy rövid megjelenítendő nevet a tanúsítványnak. Keresse meg a legfelső szintű hitelesítésszolgáltató tanúsítványfájljának certs/azure-iot-test-only.root.ca.cert.pemhelyét. Válassza a Feltöltés lehetőséget.

  4. Jelölje be a jelölőnégyzetet a feltöltés során ellenőrizendő tanúsítvány állapotának beállításához.

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

  5. Válassza a Mentés lehetőséget.

  6. Győződjön meg arról, hogy a tanúsítvány az Ellenőrzött állapotú tanúsítvány lapon jelenik meg.

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

A tanúsítványtároló frissítése Windows-alapú eszközökön

Nem Windows rendszerű eszközökön a tanúsítványláncot a tanúsítványtárként használt kódból továbbíthatja.

Windows-alapú eszközökön hozzá kell adnia az aláíró tanúsítványokat (gyökér- és köztes) egy Windows-tanúsítványtárolóhoz. Ellenkező esetben az aláíró tanúsítványok nem lesznek a DPS-be a Transport Layer Security (TLS) biztonságos csatornáján keresztül.

Tipp.

Az OpenSSL-t is használhatja biztonságos csatorna (Schannel) helyett a C SDK-val. További információ az OpenSSL használatáról: OpenSSL használata az SDK-ban.

Az aláíró tanúsítványok hozzáadása a Tanúsítványtárhoz Windows-alapú eszközökön:

  1. A Git Bash-terminálban konvertálja az aláíró tanúsítványokat az alábbiak szerint .pfx .

    Legfelső szintű hitelesítésszolgáltatói tanúsítvány:

    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
    

    Köztes hitelesítésszolgáltatói tanúsítvány:

    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. Kattintson a jobb gombbal a Windows Start gombjára, majd válassza a Futtatás parancsot. Írja be a certmgr.msc parancsot , és válassza az Ok gombot a tanúsítványkezelő elindításához.

  3. A tanúsítványkezelőBen a Tanúsítványok – Aktuális felhasználó területen válassza a Megbízható legfelső szintű hitelesítésszolgáltatók lehetőséget. Ezután a menüben válassza az Összes tevékenység>importálása művelet>lehetőséget.

  4. Az importáláshoz root.pfxkövesse a Tanúsítványimportálás varázsló lépéseit.

    • Győződjön meg arról, hogy a keresés a személyes adatok Exchange (.pfx)
    • Használja 1234 jelszóként.
    • Helyezze a tanúsítványt a megbízható legfelső szintű hitelesítésszolgáltatók tanúsítványtárolójába.
  5. Ismételje meg ezeket a tanúsítványkezelői lépéseket az importáláshoz intermediate.pfx.

    • Helyezze a tanúsítványt a közbenső hitelesítésszolgáltatók tanúsítványtárolójába.

Az aláíró tanúsítványok mostantól megbízhatók a Windows-alapú eszközön, és a teljes láncot a DPS-be lehet szállítani.

Regisztrációs csoport létrehozása

  1. Jelentkezzen be az Azure Portalra , és keresse meg a Device Provisioning Service-példányt.

  2. A navigációs menü Gépház szakaszában válassza a Regisztrációkkezelése lehetőséget.

  3. A lap tetején válassza a Regisztrációs csoport hozzáadása lehetőséget.

  4. A Regisztrációs csoport hozzáadása lap Regisztráció + kiépítés lapján adja meg a következő információkat a regisztrációs csoport adatainak konfigurálásához:

    Mező Leírás
    Igazolás Az igazolási mechanizmusként válassza az X.509 köztes tanúsítványokat, ha csak ehhez a regisztrációs csoporthoz használandó köztes tanúsítványokat szeretne feltölteni, vagy válassza az eszközkiépítési szolgáltatásba feltöltött X.509-tanúsítványokat, ha már feltöltött köztes tanúsítványokat.
    X.509-tanúsítványbeállítások A választott igazolási módszertől függően töltse fel vagy válassza ki a regisztrációs csoport elsődleges és másodlagos köztes tanúsítványait.
    Csoport neve Adja meg az eszközcsoport nevét. A regisztrációs csoport neve egy kis- és nagybetűket nem megkülönböztető sztring (legfeljebb 128 karakter hosszú) alfanumerikus karakterekből és a speciális karakterekből: '-', '.', '_'. ':' Az utolsó karakternek alfanumerikusnak vagy kötőjelnek ('-') kell lennie.
    Kiépítés állapota Jelölje be a Regisztráció engedélyezése jelölőnégyzetet, ha azt szeretné, hogy ez a regisztrációs csoport elérhető legyen az eszközök kiépítéséhez. Törölje a jelölőnégyzet jelölését, ha le szeretné tiltani a csoportot. Ezt a beállítást később módosíthatja.
    Szabályzat újraépítése Válasszon újraépítési szabályzatot, amely tükrözi, hogy a DPS hogyan kezelje az újraépítést kérő eszközöket. További információ: Újraépítési szabályzatok

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

  5. Válassza a Tovább: IoT Hubs lehetőséget.

  6. A Regisztrációs csoport hozzáadása lap IoT Hubs lapján adja meg az alábbi információkat annak megállapításához, hogy a regisztrációs csoport mely IoT Hubok számára építhet ki eszközöket:

    Mező Leírás
    Cél IoT Hubok Válasszon ki egy vagy több csatolt IoT Hubot, vagy adjon hozzá egy új hivatkozást egy IoT Hubhoz. Ha többet szeretne tudni az IoT Hubok DPS-példányhoz való csatolásáról, olvassa el az IoT Hubok csatolása és kezelése című témakört.
    Foglalási szabályzat Ha egynél több csatolt IoT Hubot jelölt ki, válassza ki, hogyan szeretné az eszközöket a különböző központokhoz rendelni. A foglalási szabályzatokkal kapcsolatos további információkért tekintse meg a kiosztási szabályzatok használatát ismertető témakört.

    Ha csak egy csatolt IoT Hubot jelölt ki, javasoljuk, hogy használja az Egyenletesen súlyozott terjesztési szabályzatot.

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

  7. Válassza a Tovább elemet : Eszközbeállítások

  8. A Regisztrációs csoport hozzáadása lap Eszközbeállítások lapján adja meg az alábbi információkat az újonnan kiépített eszközök konfigurálásának meghatározásához:

    Mező Leírás
    IoT Edge Ellenőrizze az IoT Edge engedélyezését a kiépített eszközökön, ha a csoporton keresztül kiépített összes eszköz az Azure IoT Edge-et fogja futtatni. Törölje a jelet a jelölőnégyzetből, ha ez a csoport csak nem IoT Edge-kompatibilis eszközökre vonatkozik. A csoport összes eszköze IoT Edge-kompatibilis lesz, vagy egyik sem lehet.
    Eszközcímkék Ezzel a szövegmezővel megadhatja azokat a címkéket, amelyeket alkalmazni szeretne a kiépített eszközök ikereszközeire.
    Kívánt tulajdonságok Ezzel a szövegmezővel megadhatja azokat a kívánt tulajdonságokat, amelyeket alkalmazni szeretne a kiépített eszközök ikereszközeire.

    További információ: Eszközök ikerállapotának megismerése és használata az IoT hubon.

  9. Válassza a Tovább: Ellenőrzés és létrehozás lehetőségre.

  10. A Véleményezés + létrehozás lapon ellenőrizze az összes értéket, majd válassza a Létrehozás lehetőséget.

Az eszközkiépítési kód előkészítése és futtatása

Ebben a szakaszban frissíti a mintakódot a Device Provisioning Service-példány adataival. Ha egy eszköz hitelesítése megtörtént, az egy, az ebben a szakaszban konfigurált Device Provisioning Service-példányhoz társított IoT Hubhoz van hozzárendelve.

Ebben a szakaszban a Git Bash-parancssort és a Visual Studio IDE-t használja.

A kiépítési eszköz kódjának konfigurálása

Ebben a szakaszban frissíti a mintakódot a Device Provisioning Service-példány adataival.

  1. Az Azure Portalon válassza a Device Provisioning Service-példány Áttekintés lapját, és jegyezze fel az azonosító hatókörének értékét.

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

  2. Indítsa el a Visual Studiót, és nyissa meg az cmake azure-iot-sdk-c git-adattár gyökerében létrehozott könyvtárban létrehozott új megoldásfájlt. A megoldásfájl neve azure_iot_sdks.sln.

  3. A Visual Studióhoz készült Megoldáskezelő keresse meg Provision_Samples prov_dev_client_sample >> Forrásfájlokat, és nyissa meg a prov_dev_client_sample.c fájlt.

  4. Keresse meg az id_scope állandót, és cserélje le az értékét a korábban kimásolt Azonosító hatóköre értékre. Példa:

    static const char* id_scope = "0ne00000A0A";
    
  5. Keresse meg a main() függvény definícióját ugyanebben a fájlban. Győződjön meg arról, hogy a hsm_type változó be van állítva SECURE_DEVICE_TYPE_X509 , és hogy az összes többi hsm_type sor megjegyzést fűz hozzá. Például:

    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. Mentse a módosításokat.

  7. Kattintson a jobb gombbal a prov_dev_client_sample projektre, és válassza a Beállítás indítási projektként lehetőséget.

Az egyéni HSM-csonkkód konfigurálása

A tényleges biztonságos hardveralapú tárolóval való interakció jellemzői az eszköz hardverétől függően változnak. Az oktatóanyagban a szimulált eszközök által használt tanúsítványláncok az egyéni HSM-csonkkódban lesznek kódolva. Valós forgatókönyv esetén a tanúsítványlánc a tényleges HSM-hardverben lesz tárolva, hogy nagyobb biztonságot nyújtson a bizalmas információk számára. Az ebben a mintában használt csonk metódusokhoz hasonló metódusokat ezután implementálnák a hardveralapú tároló titkos kulcsainak beolvasásához.

Bár nincs szükség HSM-hardverre, javasoljuk, hogy védje a bizalmas információkat, például a tanúsítvány titkos kulcsát. Ha a minta tényleges HSM-et hívna meg, a titkos kulcs nem lenne jelen a forráskódban. A forráskódban lévő kulcs bárki számára elérhetővé teszi a kulcsot, aki megtekintheti a kódot. Ez csak ebben az oktatóanyagban történik, hogy segítse a tanulást.

Az egyéni HSM-csonkkód frissítése az eszköz identitásának szimulálásához az azonosítóval device-01:

  1. A Visual Studióhoz készült Megoldáskezelő nyissa meg Provision_Samples custom_hsm_example >> Forrásfájlokat, és nyissa meg a custom_hsm_example.c fájlt.

  2. Frissítse a sztringállandó sztringértékét COMMON_NAME az eszköztanúsítvány létrehozásakor használt köznapi névvel.

    static const char* const COMMON_NAME = "device-01";
    
  3. A Git Bash-terminálban futtassa a következő parancsot az eszköztanúsítvány sztringállandójának létrehozásához:

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

    Másolja ki a parancs kimenetét.

  4. Frissítse az állandó sztring sztringértékét CERTIFICATE a ./certs/device-01-full-chain.cert.pem fájlban mentett tanúsítványlánc használatával a tanúsítványok létrehozása után. Használja az előző lépés kimeneti tanúsítványszövegét az állandó értékhez.

    A tanúsítványszöveg szintaxisának meg kell egyeznie az alábbi mintával, és nincs szükség további szóközökre vagy a Visual Studio által végzett elemzésekre.

    // <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. A Git Bashben futtassa a következő parancsot az eszköz titkos kulcsához tartozó sztringállandó létrehozásához:

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

    Másolja ki a parancs kimenetét.

  6. Frissítse az állandó sztringértékét PRIVATE_KEY az eszköztanúsítvány titkos kulcsával. Használja az előző lépésből származó kimeneti titkoskulcs-szöveget az állandó értékhez.

    A titkos kulcs szövegének szintaxisának meg kell egyeznie az alábbi mintával, és nincs szükség további szóközökre vagy a Visual Studio által végzett elemzésre.

    static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n"
    "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n"
        ...
    "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n"
    "-----END RSA PRIVATE KEY-----";
    
  7. Mentse a módosításokat.

  8. Kattintson a jobb gombbal a custom_hsm_example projektre, és válassza a Build lehetőséget.

    Fontos

    A custom_hsm_example projektet a következő szakaszban található megoldás létrehozása előtt kell elkészítenie.

Minta futtatása

  1. A Visual Studio menüjében válassza a Debug>Start without debugging (Hibakeresés > Indítás hibakeresés nélkül) lehetőséget a megoldás futtatásához. Amikor a rendszer kéri a projekt újraépítését, a futtatás előtt válassza az Igen lehetőséget a projekt újraépítéséhez.

    Az alábbi kimenet egy példa a szimulált eszköz device-01 sikeres indítására és a kiépítési szolgáltatáshoz való csatlakozásra. Az eszközt hozzárendelték egy IoT Hubhoz, és regisztrálták:

    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. Ismételje meg a második eszköz egyéni HSM-csonkkódjának konfigurálásához (device-02) tartozó lépéseket, és futtassa újra a mintát. Használja a következő értékeket az adott eszközhöz:

    Leírás Érték
    Köznapi név "device-02"
    Teljes tanúsítványlánc A szöveg létrehozása a ./certs/device-02-full-chain.cert.pem használatával
    Titkos kulcs A szöveg létrehozása a ./private/device-02.key.pem használatával

    Az alábbi kimenet egy példa a szimulált eszköz device-02 sikeres indítására és a kiépítési szolgáltatáshoz való csatlakozásra. Az eszközt hozzárendelték egy IoT Hubhoz, és regisztrálták:

    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:
    

A C#-mintakód x.509-tanúsítványok használatára van beállítva, amelyek jelszóval védett PKCS#12 formátumú fájlban (.pfx) vannak tárolva. A korábban létrehozott teljes lánctanúsítványok PEM formátumban vannak. A teljes láncú tanúsítványok PKCS#12 formátumúvá alakításához írja be a következő parancsokat a Git Bash-parancssorba abból a könyvtárból, ahol korábban az OpenSSL-parancsokat futtatta.

  • 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
    

A szakasz további részében használja a Windows parancssorát.

  1. Az Azure Portalon válassza az Eszközkiépítési szolgáltatás Áttekintés lapját.

  2. Másolja ki az azonosító hatókörének értékét.

    Screenshot of the ID scope on Azure portal.

  3. A Windows parancssorában váltson az X509Sample könyvtárra. Ez a könyvtár abban az SDK-adattárban található, amelyet egy korábbi lépésben klónozott: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. Adja meg a következő parancsot az X.509-eszközkiépítési minta létrehozásához és futtatásához. Cserélje le <id-scope> az Azure Portalról másolt azonosító hatókörre. Cserélje le <your-certificate-folder> az OpenSSL-parancsokat tartalmazó mappa elérési útjára.

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

    Az eszköz a DPS-hez csatlakozik, és egy IoT Hubhoz van rendelve. Ezután az eszköz telemetriai üzenetet küld az IoT Hubnak. A következő példához hasonló kimenetnek kell megjelennie:

    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.
    

    Feljegyzés

    Ha nem ad meg tanúsítványt és jelszót a parancssorban, a tanúsítványfájl alapértelmezés szerint ./certificate.pfx lesz, és a rendszer kérni fogja a jelszót.

    További paraméterek is átadhatók a TransportType (-t) és a GlobalDeviceEndpoint (-g) módosításához. A paraméterek teljes listájához.dotnet run -- --help

  5. A második eszköz regisztrálásához futtassa újra a mintát a teljes lánctanúsítványával.

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

Az alábbi lépésekben használja a Windows parancssorát.

  1. Az Azure Portalon válassza az Eszközkiépítési szolgáltatás Áttekintés lapját.

  2. Másolja ki az azonosító hatókörének értékét.

    Screenshot of the ID scope in the Azure portal.

  3. A Windows parancssorában nyissa meg a mintakönyvtárat, és telepítse a minta által igényelt csomagokat. A megjelenített elérési út az SDK klónozási helyéhez viszonyítva jelenik meg.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    
  4. A provisioning\device\samples mappában nyissa meg a register_x509.js, és tekintse át a kódot.

    A minta átviteli protokollként alapértelmezés szerint MQTT lesz. Ha másik protokollt szeretne használni, fűzzön megjegyzést a következő sorhoz, és bontsa ki a megfelelő protokollhoz tartozó sort.

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

    A minta öt környezeti változót használ egy IoT-eszköz hitelesítéséhez és üzembe helyezéséhez a DPS használatával. Ezek a környezeti változók a következők:

    Változó neve Leírás
    PROVISIONING_HOST A DPS-példányhoz való csatlakozáshoz használandó végpont. Ebben az oktatóanyagban használja a globális végpontot. global.azure-devices-provisioning.net
    PROVISIONING_IDSCOPE A DPS-példány azonosítójának hatóköre.
    PROVISIONING_REGISTRATION_ID Az eszköz regisztrációs azonosítója. Meg kell egyeznie az eszköztanúsítvány tulajdonosának általános nevével.
    CERTIFICATE_FILE Az eszköz teljes láncú tanúsítványfájljának elérési útja.
    KEY_FILE Az eszköztanúsítvány titkos kulcsfájljának elérési útja.

    A ProvisioningDeviceClient.register() metódus megpróbálja regisztrálni az eszközt.

  5. Környezeti változók hozzáadása a globális eszközvégponthoz és az azonosító hatóköréhez. Cserélje le <id-scope> az Azure Portalról másolt értékre.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. Állítsa be az eszközregisztrációs azonosító környezeti változóját. Az IoT-eszköz regisztrációs azonosítójának meg kell egyeznie az eszköztanúsítvány tulajdonosának köznapi nevével. Ebben az oktatóanyagban az eszköz-01 az eszköz tulajdonosának neve és regisztrációs azonosítója is.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. Állítsa be a környezeti változókat a korábban létrehozott teljes láncú tanúsítványhoz és az eszköz titkos kulcsfájljaihoz. Cserélje le <your-certificate-folder> az OpenSSL-parancsokat tartalmazó mappa elérési útjára.

    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. Futtassa a mintát, és ellenőrizze, hogy az eszköz üzembe helyezése sikeresen megtörtént-e.

    node register_x509.js
    

    A következő példához hasonló kimenetnek kell megjelennie:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=device-01
    Client connected
    send status: MessageEnqueued
    
  9. Frissítse a második eszköz (device-02) környezeti változóit az alábbi táblázat szerint, és futtassa újra a mintát.

    Környezeti változó Érték
    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

Az alábbi lépésekben használja a Windows parancssorát.

  1. Az Azure Portalon válassza az Eszközkiépítési szolgáltatás Áttekintés lapját.

  2. Másolja ki az azonosító hatókörét.

    Screenshot of the ID scope in the Azure portal.

  3. A Windows parancssorában nyissa meg a provision_x509.py minta könyvtárát. A megjelenített elérési út az SDK klónozási helyéhez viszonyítva jelenik meg.

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

    Ez a minta hat környezeti változót használ egy IoT-eszköz hitelesítésére és üzembe helyezésére a DPS használatával. Ezek a környezeti változók a következők:

    Változó neve Leírás
    PROVISIONING_HOST A DPS-példányhoz való csatlakozáshoz használandó végpont. Ebben az oktatóanyagban használja a globális végpontot. global.azure-devices-provisioning.net
    PROVISIONING_IDSCOPE A DPS-példány azonosítójának hatóköre.
    DPS_X509_REGISTRATION_ID Az eszköz regisztrációs azonosítója. Meg kell egyeznie az eszköztanúsítvány tulajdonosának általános nevével.
    X509_CERT_FILE Az eszköz teljes láncú tanúsítványfájljának elérési útja.
    X509_KEY_FILE Az eszköztanúsítvány titkos kulcsfájljának elérési útja.
    PASS_PHRASE A titkos kulcsfájl titkosításához használt pass kifejezés (ha van ilyen). Ehhez az oktatóanyaghoz nincs szükség.
  4. Adja hozzá a környezeti változókat a globális eszközvégponthoz és az azonosító hatóköréhez. Az azonosító hatókörváltozóhoz használja az Azure Portalról másolt értéket.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Állítsa be az eszközregisztrációs azonosító környezeti változóját. Az IoT-eszköz regisztrációs azonosítójának meg kell egyeznie az eszköztanúsítvány tulajdonosának köznapi nevével. Ebben az oktatóanyagban az eszköz-01 az eszköz tulajdonosának neve és regisztrációs azonosítója is.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. Állítsa be a környezeti változókat a korábban létrehozott teljes láncú tanúsítványhoz és az eszköz titkos kulcsfájljaihoz. Cserélje le <your-certificate-folder> az OpenSSL-parancsokat tartalmazó mappa elérési útjára.

    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. Tekintse át a provision_x509.py kódját. Ha nem a Python 3.7-es vagy újabb verzióját használja, cserélje le asyncio.run(main())az itt említett kódmódosítást.

  8. Futtassa a mintát. A minta a DPS-hez csatlakozik, amely kiépíteni fogja az eszközt egy IoT Hubra. Az eszköz üzembe helyezése után a minta tesztüzeneteket küld az IoT Hubnak.

    python provision_x509.py
    

    A következő példához hasonló kimenetnek kell megjelennie:

    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. Frissítse a második eszköz (device-02) környezeti változóit az alábbi táblázat szerint, és futtassa újra a mintát.

    Környezeti változó Érték
    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

Az alábbi lépésekben a Windows parancssort és a Git Bash-parancssort is használhatja.

  1. Az Azure Portalon válassza az Eszközkiépítési szolgáltatás Áttekintés lapját.

  2. Másolja ki az azonosító hatókörét.

    Screenshot of the ID scope in the Azure portal.

  3. A Windows parancssorában lépjen a mintaprojekt mappájába. A megjelenített elérési út az SDK klónozási helyéhez viszonyítva

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Adja meg a kiépítési szolgáltatást és az X.509-identitás adatait a mintakódban. Ezt a rendszer a szimulált eszköz igazolásakor, az eszközregisztráció előtt történő üzembe helyezés során használja.

    1. Nyissa meg a fájlt .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java a kedvenc szerkesztőjében.

    2. Frissítse a következő értékeket. Ehhez idScopehasználja a korábban másolt azonosító hatókörét . Globális végpont esetén használja a globális eszközvégpontot. Ez a végpont minden DPS-példány esetében ugyanaz. 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. A minta alapértelmezés szerint a HTTPS protokollt használja átviteli protokollként. Ha módosítani szeretné a protokollt, fűzzön megjegyzést a következő sorhoz, és bontsa ki a használni kívánt protokoll sorát.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Frissítse az leafPublicPem állandó sztring értékét az eszköztanúsítvány ( device-01.cert.pem) értékével.

      A tanúsítványszöveg szintaxisának meg kell egyeznie az alábbi mintával további szóközök és karakterek nélkül.

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

      A sztringérték manuális frissítése hibát okozhat. A megfelelő szintaxis létrehozásához másolja és illessze be a következő parancsot a Git Bash-parancssorba, majd nyomja le az ENTER billentyűt. Ez a parancs létrehozza a sztringállandó leafPublicPem érték szintaxisát, és beírja a kimenetbe.

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

      Másolja és illessze be a kimeneti tanúsítvány szövegét az állandó értékhez.

    5. Frissítse az állandó sztringértékét leafPrivateKey az eszköztanúsítvány titkosítatlan titkos kulcsával( unencrypted-device-key.pem).

      A titkos kulcs szövegének szintaxisának meg kell egyeznie az alábbi mintával további szóközök és karakterek nélkül.

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

      A megfelelő szintaxis létrehozásához másolja és illessze be a következő parancsot a Git Bash-parancssorba, majd nyomja le az ENTER billentyűt. Ez a parancs létrehozza a sztringállandó leafPrivateKey érték szintaxisát, és beírja a kimenetbe.

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

      Másolja és illessze be a kimeneti titkos kulcs szövegét az állandó értékhez.

    6. Adjon hozzá egy állandó sztringet rootPublicPem a legfelső szintű hitelesítésszolgáltatói tanúsítvány ( azure-iot-test-only.root.ca.cert.pem) értékével. Az állandó után is felveheti leafPrivateKey .

      A tanúsítványszöveg szintaxisának meg kell egyeznie az alábbi mintával további szóközök és karakterek nélkül.

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

      A megfelelő szintaxis létrehozásához másolja és illessze be a következő parancsot a Git Bash-parancssorba, majd nyomja le az ENTER billentyűt. Ez a parancs létrehozza a sztringállandó rootPublicPem érték szintaxisát, és beírja a kimenetbe.

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

      Másolja és illessze be a kimeneti tanúsítvány szövegét az állandó értékhez.

    7. Adjon hozzá egy állandó sztringet intermediatePublicPem a köztes hitelesítésszolgáltatói tanúsítvány( azure-iot-test-only.intermediate.cert.pem) értékével. Az előző állandó után is felveheti.

      A tanúsítványszöveg szintaxisának meg kell egyeznie az alábbi mintával további szóközök és karakterek nélkül.

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

      A megfelelő szintaxis létrehozásához másolja és illessze be a következő parancsot a Git Bash-parancssorba, majd nyomja le az ENTER billentyűt. Ez a parancs létrehozza a sztringállandó intermediatePublicPem érték szintaxisát, és beírja a kimenetbe.

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

      Másolja és illessze be a kimeneti tanúsítvány szövegét az állandó értékhez.

    8. Keresse meg a következő sorokat a main metódusban.

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

      Adja hozzá közvetlenül alattuk ezt a két sort, hogy a köztes és fő hitelesítésszolgáltatói tanúsítványokat hozzáadja az aláírási lánchoz. Az aláírási láncnak tartalmaznia kell a teljes tanúsítványláncot, beleértve a DPS-vel ellenőrzött tanúsítványt is.

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

      Feljegyzés

      Az aláíró tanúsítványok hozzáadásának sorrendje fontos. A minta sikertelen lesz, ha módosul.

    9. Mentse a módosításokat.

  5. Hozza létre a mintát, majd lépjen a target mappába.

    mvn clean install
    cd target
    
  6. A build kimenete .jar fájlt a target mappában a következő fájlformátummal: provisioning-x509-sample-{version}-with-deps.jar; például: provisioning-x509-sample-1.8.1-with-deps.jar. Hajtsa végre a .jar fájlt. Előfordulhat, hogy a következő parancsban le kell cserélnie a verziót.

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

    A minta a DPS-hez csatlakozik, amely az eszközt egy IoT Hubra helyezi. Az eszköz üzembe helyezése után a minta tesztüzeneteket küld az IoT Hubnak.

    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. Frissítse a második eszköz (device-02) állandóit az alábbi táblázat szerint, építse újra és futtassa újra a mintát.

    Állandó Használandó fájl
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./private/device-02.key.pem

Eszközkiépítési regisztráció megerősítése

Vizsgálja meg a regisztrációs csoport regisztrációs rekordjait az eszközök regisztrációs adatainak megtekintéséhez:

  1. Az Azure Portalon nyissa meg a Device Provisioning Service-példányt.

  2. A Gépház menüben válassza a Regisztrációk kezelése lehetőséget.

  3. Válassza ki a regisztrációs csoportokat. A korábban létrehozott X.509 regisztrációs csoport bejegyzésnek szerepelnie kell a listában.

  4. Válassza ki a regisztrációs bejegyzést. Ezután válassza a Regisztráció állapot melletti Részletek lehetőséget a regisztrációs csoporton keresztül regisztrált eszközök megtekintéséhez. A listában megjelenik az ioT Hub, amelyhez az egyes eszközök hozzá lettek rendelve, az eszközazonosítók, valamint a regisztrációjuk dátumai és időpontjai.

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

  5. Az eszköz további részleteinek megtekintéséhez válassza ki az egyik eszközt.

Az IoT Hub eszközeinek ellenőrzése:

  1. Az Azure Portalon nyissa meg azt az IoT Hubot, amelyhez az eszköz hozzá lett rendelve.

  2. Az Eszközfelügyelet menüben válassza az Eszközök lehetőséget.

  3. Ha az eszközök kiépítése sikeresen megtörtént, az eszközazonosítóknak, a device-01-nek és a device-02-nek meg kell jelenniük a listában, és az Állapot beállítás engedélyezve van. Ha nem látja az eszközeit, válassza a Frissítés lehetőséget.

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

Az erőforrások eltávolítása

Ha végzett az eszközügyfél-minta tesztelésével és feltárásával, az alábbi lépésekkel törölheti az oktatóanyag által létrehozott összes erőforrást.

  1. Zárja be az eszközügyfél minta kimeneti ablakát a gépen.

A regisztrációs csoport törlése

  1. Az Azure Portal bal oldali menüjében válassza a Minden erőforrás lehetőséget.

  2. Válassza ki a DPS-példányt.

  3. A Gépház menüben válassza a Regisztrációk kezelése lehetőséget.

  4. Válassza a Regisztrációs csoportok lapot.

  5. Válassza ki az oktatóanyaghoz használt regisztrációs csoportot.

  6. A Regisztráció részletei lapon válassza a Regisztráció állapota melletti Részletek lehetőséget. Ezután jelölje be az Eszközazonosító oszlopfejléc melletti jelölőnégyzetet a regisztrációs csoport összes regisztrációs rekordjának kijelöléséhez. A regisztrációs rekordok törléséhez válassza a lap tetején található Törlés lehetőséget.

    Fontos

    A regisztrációs csoport törlése nem törli a hozzá társított regisztrációs rekordokat. Ezek az árva rekordok beleszámítanak a DPS-példány regisztrációs kvótáiba . Ezért célszerű törölni a regisztrációs csoporthoz társított összes regisztrációs rekordot, mielőtt magát a regisztrációs csoportot törölnénk.

  7. Lépjen vissza a Regisztrációk kezelése lapra, és győződjön meg arról, hogy a Regisztrációs csoportok lap ki van jelölve.

  8. Jelölje be az oktatóanyaghoz használt regisztrációs csoport csoportneve melletti jelölőnégyzetet.

  9. Az oldal tetején válassza a Törlés lehetőséget.

Regisztrált hitelesítésszolgáltatói tanúsítványok törlése a DPS-ből

  1. A DPS-példány bal oldali menüjében válassza a Tanúsítványok lehetőséget. Az oktatóanyagban feltöltött és ellenőrzött tanúsítványok esetében válassza ki a tanúsítványt, majd válassza a Törlés lehetőséget, és erősítse meg, hogy el szeretné távolítani a tanúsítványt.

Eszközregisztrációk törlése az IoT Hubról

  1. Az Azure Portal bal oldali menüjében válassza a Minden erőforrás lehetőséget.

  2. Válassza ki az IoT Hubot.

  3. Az Explorers menüben válassza az IoT-eszközök lehetőséget.

  4. Jelölje be az oktatóanyagban regisztrált eszközök eszközazonosítója melletti jelölőnégyzetet. Például: device-01 és device-02.

  5. Az oldal tetején válassza a Törlés lehetőséget.

Következő lépések

Ebben az oktatóanyagban több X.509-eszközt épített ki az IoT Hubra egy regisztrációs csoport használatával. Ezután megtudhatja, hogyan építhet ki IoT-eszközöket több központban.