Tutorial: Memprovisikan beberapa perangkat X.509 menggunakan grup pendaftaran

Dalam tutorial ini, Anda mempelajari cara memprovisikan grup perangkat IoT yang menggunakan sertifikat X.509 untuk autentikasi. Contoh kode perangkat dari Azure IoT SDK akan dijalankan pada komputer pengembangan Anda untuk mensimulasikan provisi perangkat X.509. Di perangkat nyata, kode perangkat akan disebarkan dan dijalankan dari perangkat IoT.

Azure IoT Hub Device Provisioning Service mendukung dua jenis pendaftaran untuk menyediakan perangkat:

  • Grup pendaftaran: Digunakan untuk mendaftarkan beberapa perangkat terkait. Tutorial ini menunjukkan provisi dengan grup pendaftaran.
  • Pendaftaran individu: Digunakan untuk mendaftarkan perangkat tunggal.

Azure IoT Hub Device Provisioning Service mendukung tiga bentuk autentikasi untuk menyediakan perangkat:

  • Sertifikat X.509 - Tutorial ini menunjukkan pengesahan sertifikat X.509
  • Modul platform tepercaya (TPM)
  • Kunci konten

Dalam skenario produksi, Modul Keamanan Perangkat Keras (HSM) digunakan untuk penyimpanan rahasia perangkat berbasis perangkat keras yang aman. HSM dapat digunakan dengan kunci konten, sertifikat X.509, atau pengesahan TPM untuk menyediakan penyimpanan yang aman untuk rahasia. Penyimpanan rahasia perangkat berbasis perangkat keras disarankan untuk membantu melindungi informasi sensitif seperti kunci privat sertifikat perangkat Anda.

Dalam tutorial ini, Anda menyelesaikan tujuan berikut:

  • Membuat rantai sertifikat kepercayaan.untuk mengatur sekumpulan perangkat menggunakan sertifikat X.509.
  • Buat pendaftaran grup baru yang menggunakan rantai sertifikat.
  • Siapkan lingkungan pengembangan.
  • Provisikan perangkat menggunakan rantai sertifikat menggunakan kode sampel di SDK perangkat Azure IoT.

Prasyarat

Prasyarat berikut untuk lingkungan pengembangan Windows yang digunakan untuk mensimulasikan perangkat. Untuk Linux atau macOS, lihat bagian yang sesuai di Menyiapkan lingkungan pengembangan dalam dokumentasi SDK.

  • Instal Visual Studio 2022 dengan beban kerja 'Pengembangan desktop dengan C++' diaktifkan. Visual Studio 2015, Visual Studio 2017, dan Visual Studio 19 juga didukung.

  • Instal sistem build CMake terbaru. Pastikan Anda mencentang opsi yang menambahkan CMake executable ke jalur Anda.

    Penting

    Konfirmasikan bahwa prasyarat Visual Studio (Visual Studio dan beban kerja 'Pengembangan desktop dengan C++') diinstal pada komputer Anda sebelum memulai CMake penginstalan. Setelah prasyarat tersedia, dan unduhan diverifikasi, pasang sistem build CMake. Selain itu, ketahuilah bahwa versi lama sistem build CMake gagal menghasilkan file solusi yang digunakan dalam tutorial ini. Pastikan untuk menggunakan versi CMake versi terbaru.

Prasyarat berikut adalah untuk lingkungan pengembangan Windows. Untuk Linux atau macOS, lihat bagian yang sesuai di Menyiapkan lingkungan pengembangan dalam dokumentasi SDK.

  • Instal .NET SDK 6.0 atau yang lebih baru di komputer berbasis Windows Anda. Anda bisa menggunakan perintah berikut untuk memeriksa versi yang Anda gunakan.

    dotnet --info
    

Prasyarat berikut adalah untuk lingkungan pengembangan Windows. Untuk Linux atau macOS, lihat bagian yang sesuai di Menyiapkan lingkungan pengembangan dalam dokumentasi SDK.

Prasyarat berikut adalah untuk lingkungan pengembangan Windows.

Prasyarat berikut adalah untuk lingkungan pengembangan Windows. Untuk Linux atau macOS, lihat bagian yang sesuai di Menyiapkan lingkungan pengembangan dalam dokumentasi SDK.

  • Pasang versi terbaru Git. Pastikan Git ditambahkan ke variabel lingkungan yang dapat diakses oleh jendela perintah.

  • Pastikan OpenSSL diinstal pada komputer Anda. Di Windows, penginstalan Git Anda menyertakan penginstalan OpenSSL. Anda dapat mengakses OpenSSL dari prompt Git Bash. Untuk memverifikasi bahwa OpenSSL diinstal, buka perintah Git Bash dan masukkan openssl version.

    Catatan

    Kecuali Anda terbiasa dengan OpenSSL dan sudah menginstalnya di komputer Windows Anda, sebaiknya gunakan OpenSSL dari prompt Git Bash. Atau, Anda dapat memilih untuk mengunduh kode sumber dan membangun OpenSSL. Jika Anda memilih untuk membuat atau mengunduh OpenSSL, pastikan biner OpenSSL dapat diakses di jalur Anda dan variabel OPENSSL_CNF lingkungan diatur ke jalur file openssl.cnf Anda.

Mempersiapkan lingkungan pengembangan Anda

Di bagian ini, Anda menyiapkan lingkungan pengembangan yang digunakan untuk membangun Azure IoT C SDK. SDK mencakup kode sampel dan alat yang digunakan oleh provisi perangkat dengan DPS.

  1. Di browser web, buka halaman Rilis Azure IoT C SDK.

  2. Salin nama tag untuk rilis terbaru Azure IoT C SDK, misalnya: lts_03_2024.

  3. Buka perintah Windows dan jalankan perintah berikut untuk mengkloning rilis terbaru repositori Azure IoT Device SDK for C GitHub. Ganti <release-tag> dengan tag yang Anda salin di langkah sebelumnya.

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

    Operasi ini mungkin memerlukan waktu beberapa menit untuk selesai.

  4. Setelah operasi selesai, jalankan perintah berikut dari direktori azure-iot-sdk-c:

    mkdir cmake
    cd cmake
    
  5. Sampel kode menggunakan sertifikat X.509 untuk menyediakan pengesahan melalui autentikasi X.509. Jalankan perintah berikut untuk membangun versi SDK khusus untuk platform pengembangan Anda yang mencakup klien provisi perangkat. Solusi Visual Studio untuk perangkat yang disimulasikan dibuat di direktori cmake.

    Ganti <path dengan jalur absolut ke C SDK yang Anda kloning.

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

    Tip

    Jika cmake tidak menemukan pengkompilasi C++, Anda mungkin mendapatkan kesalahan build saat menjalankan perintah di atas. Jika hal ini terjadi, coba jalankan perintah ini di perintah Visual Studio.

  6. Setelah build berhasil, beberapa garis output terakhir akan terlihat mirip dengan output berikut:

    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
    

Buka prompt perintah Windows dan kloning repositori Azure IoT SDK for C# GitHub menggunakan perintah berikut:

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

Buka prompt perintah Windows dan kloning Azure IoT SDK untuk repositori GitHub Node.js menggunakan perintah berikut:

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

Buka prompt perintah Windows dan kloning repositori Azure IoT Device SDK for Python GitHub menggunakan perintah berikut:

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

Catatan

Sampel yang digunakan dalam tutorial ini berada di cabang v2 dari repositori azure-iot-sdk-python. V3 dari Python SDK tersedia untuk digunakan dalam versi beta.

  1. Buka perintah Windows dan kloning repositori Azure IoT Samples for Java GitHub menggunakan perintah berikut:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Buka direktori azure-iot-sdk-java akar dan buat proyek untuk mengunduh semua paket yang dibutuhkan.

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

Membuat rantai sertifikat X.509

Di bagian ini, Anda menghasilkan rantai sertifikat X.509 dari tiga sertifikat untuk menguji setiap perangkat dengan tutorial ini. Sertifikat memiliki hierarki berikut.

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

Sertifikat akar Anda mengunggah dan memverifikasi sertifikat akar dengan DPS. Verifikasi ini memungkinkan DPS mempercayai sertifikat tersebut dan memverifikasi sertifikat yang ditandatangani olehnya.

Sertifikat perantara: Umumnya menggunakan sertifikat perantara untuk mengelompokkan perangkat secara logis menurut lini produk, divisi perusahaan, atau kriteria lainnya. Tutorial ini menggunakan rantai sertifikat dengan satu sertifikat perantara, tetapi dalam skenario produksi Anda mungkin memiliki beberapa. Sertifikat perantara dalam rantai ini ditandatangani oleh sertifikat akar. Sertifikat ini disediakan untuk grup pendaftaran yang dibuat di DPS. Konfigurasi ini memungkinkan pengelolaan seluruh grup perangkat yang sertifikat perangkatnya telah ditandatangani oleh sertifikat perantara yang sama.

Sertifikat perangkat: Sertifikat perangkat (kadang-kadang disebut sertifikat daun) ditandatangani oleh sertifikat perantara dan disimpan di perangkat bersama dengan kunci privatnya. Idealnya, item sensitif ini akan disimpan dengan aman dengan HSM. Beberapa sertifikat perangkat dapat ditandatangani oleh sertifikat perantara yang sama. Setiap perangkat menyajikan sertifikat dan kunci privatnya, bersama dengan rantai sertifikat, saat mencoba provisi.

Untuk informasi selengkapnya tentang rantai sertifikat, lihat pengesahan sertifikat X.509.

Menyiapkan lingkungan X.509 OpenSSL

Di bagian ini, Anda membuat file konfigurasi Openssl, struktur direktori, dan file lain yang digunakan oleh perintah Openssl.

  1. Buka perintah Git Bash dan navigasikan ke folder tempat Anda ingin membuat sertifikat dan kunci X.509 untuk tutorial ini.

  2. Buat file konfigurasi OpenSSL bernama openssl_root_ca.cnf untuk sertifikat OS akar Anda. File konfigurasi OpenSSL berisi kebijakan dan definisi yang digunakan oleh perintah OpenSSL. Salin dan tempel teks berikut ke dalam file openssl_root_ca.cnf :

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

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

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

Buat sertifikat CA akar

Jalankan perintah berikut untuk membuat kunci privat CA akar dan sertifikat OS akar. Anda menggunakan sertifikat dan kunci ini untuk menandatangani sertifikat perantara Anda.

  1. Di terminal Git Bash Anda, buat kunci privat CA akar:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. Buat sertifikat OS akar:

    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
    

    Penting

    Garis miring condong kanan ekstra yang diberikan untuk nama subjek (//CN=Azure IoT Hub CA Cert Test Only) hanya diperlukan untuk melewatkan string dengan Git pada platform Windows. Pada platform Linux, berikan nama subjek hanya dengan satu garis miring ke depan (/CN=Azure IoT Hub CA Cert Test Only).

  3. Periksa sertifikat OS akar:

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

    Amati bahwa Penerbit dan Subjek keduanya adalah CA akar.

    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)
    

Membuat sertifikat OS perantara

Jalankan perintah berikut untuk membuat kunci privat OS perantara dan sertifikat CA perantara. Anda menggunakan sertifikat dan kunci ini untuk menandatangani sertifikat perangkat Anda.

  1. Di terminal Git Bash Anda, buat kunci privat CA perantara:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. Buat permintaan penandatanganan sertifikat OS perantara (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
    

    Penting

    Garis miring condong kanan ekstra yang diberikan untuk nama subjek (//CN=Azure IoT Hub Intermediate Cert Test Only) hanya diperlukan untuk melewatkan string dengan Git pada platform Windows. Pada platform Linux, berikan nama subjek dengan satu garis miring/CN=Azure IoT Hub Intermediate Cert Test Only ().

  3. Menandatangani sertifikat perantara dengan sertifikat OS akar

    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. Periksa sertifikat OS perantara:

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

    Amati bahwa Penerbit adalah CA akar, dan Subjek adalah CA perantara.

    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)
    

Membuat sertifikat perangkat

Di bagian ini, Anda membuat dua sertifikat perangkat dan sertifikat rantai lengkapnya. Sertifikat rantai lengkap berisi sertifikat perangkat, sertifikat OS perantara, dan sertifikat OS akar. Perangkat harus menunjukkan sertifikat rantai penuhnya ketika mendaftar dengan DPS.

  1. Buat kunci privat perangkat pertama.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. Buat CSR sertifikat perangkat.

    Nama umum subjek (CN) sertifikat perangkat harus diatur ke ID pendaftaran yang digunakan perangkat Anda untuk mendaftar dengan DPS. ID pendaftaran adalah string karakter alfanumerik yang tidak peka huruf besar/kecil ditambah karakter khusus: '-', , '.''_', ':'. Karakter terakhir harus alfanumerik atau tanda hubung ('-'). Nama umum harus mematuhi format ini. DPS mendukung ID pendaftaran hingga 128 karakter; namun, panjang maksimum nama umum subjek dalam sertifikat X.509 adalah 64 karakter. OLEH KARENA ITU, ID pendaftaran dibatasi hingga 64 karakter saat menggunakan sertifikat X.509. Untuk pendaftaran grup, ID pendaftaran juga digunakan sebagai ID perangkat di IoT Hub.

    Nama umum subjek diatur menggunakan -subj parameter . Dalam perintah berikut, nama umum diatur ke 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
    

    Penting

    Garis miring condong kanan ekstra yang diberikan untuk nama subjek (//CN=device-01) hanya diperlukan untuk melewatkan string dengan Git pada platform Windows. Pada platform Linux, berikan nama subjek dengan satu garis miring/CN=device-01 ().

  3. Tanda tangani sertifikat perangkat.

    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. Periksa sertifikat perangkat:

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

    Amati bahwa Penerbit adalah CA perantara, dan Subjek adalah ID pendaftaran perangkat, 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. Perangkat harus menunjukkan rantai sertifikat lengkap saat diautentikasi dengan DPS. Gunakan perintah berikut untuk membuat rantai sertifikat:

    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. Buka file rantai sertifikat, ./certs/device-01-full-chain.cert.pem, di editor teks untuk memeriksanya. Teks rantai sertifikat berisi rantai lengkap dari ketiga sertifikat. Anda menggunakan rantai sertifikat ini nanti dalam tutorial ini untuk memprovisikan device-01.

    Teks rantai lengkap memiliki format berikut:

    -----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. Untuk membuat kunci privat, sertifikat X.509, dan sertifikat rantai penuh untuk perangkat kedua, salin dan tempel skrip ini ke prompt perintah Git Bash Anda. Untuk membuat sertifikat untuk lebih banyak perangkat, Anda dapat memodifikasi variabel yang registration_id dideklarasikan di awal skrip.

    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
    

    Penting

    Garis miring condong kanan ekstra yang diberikan untuk nama subjek (//CN=$registration_id) hanya diperlukan untuk melewatkan string dengan Git pada platform Windows. Pada platform Linux, berikan nama subjek dengan satu garis miring/CN=$registration_id ().

    Catatan

    Skrip ini menggunakan ID pendaftaran sebagai nama file dasar untuk kunci privat dan file sertifikat. Jika ID pendaftaran Berisi karakter yang bukan karakter nama file yang valid, Anda harus mengubah skrip yang sesuai.

    Peringatan

    Teks untuk sertifikat hanya berisi informasi kunci publik.

    Namun, perangkat juga harus memiliki akses ke kunci privat untuk sertifikat perangkat. Ini diperlukan karena perangkat harus melakukan verifikasi menggunakan kunci tersebut saat runtime ketika mencoba menyediakan. Sensitivitas kunci ini adalah salah satu alasan utama perlunya menggunakan penyimpanan berbasis perangkat keras dalam HSM nyata untuk membantu mengamankan kunci privat.

Anda menggunakan file berikut di sisa tutorial ini:

Sertifikat File Deskripsi
sertifikat OS akar. certs/azure-iot-test-only.root.ca.cert.pem Diunggah ke DPS dan diverifikasi.
sertifikat OS menengah certs/azure-iot-test-only.intermediate.cert.pem Digunakan untuk membuat grup pendaftaran di DPS.
kunci privat perangkat-01 private/device-01.key.pem Digunakan oleh perangkat untuk memverifikasi kepemilikan sertifikat perangkat selama autentikasi dengan DPS.
sertifikat rantai lengkap device-01 certs/device-01-full-chain.cert.pem Disajikan oleh perangkat untuk mengautentikasi dan mendaftar dengan DPS.
kunci privat device-02 private/device-02.key.pem Digunakan oleh perangkat untuk memverifikasi kepemilikan sertifikat perangkat selama autentikasi dengan DPS.
sertifikat rantai lengkap device-02 certs/device-02-full-chain.cert.pem Disajikan oleh perangkat untuk mengautentikasi dan mendaftar dengan DPS.

Memverifikasi kepemilikan sertifikat akar

Agar DPS dapat memvalidasi rantai sertifikat perangkat selama autentikasi, Anda harus mengunggah dan memverifikasi kepemilikan sertifikat OS akar. Untuk menambahkan sertifikat OS akar ke instans DPS Anda, ikuti langkah-langkah berikut:

  1. Di portal Azure, navigasikan ke instans Device Provisioning Service Anda.

  2. Buka Sertifikat dari menu sebelah kiri lalu pilih Tambahkan untuk menambahkan sertifikat baru.

  3. Masukkan nama tampilan yang ramah untuk sertifikat Anda. Telusuri ke lokasi file certs/azure-iot-test-only.root.ca.cert.pemsertifikat OS akar . Pilih Unggah.

  4. Pilih kotak untuk Mengatur status sertifikat ke diverifikasi saat diunggah.

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

  5. Pilih Simpan.

  6. Pastikan sertifikat Anda ditampilkan di tab sertifikat dengan status Terverifikasi.

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

Memperbarui penyimpanan sertifikat di perangkat berbasis Windows

Di perangkat non-Windows, Anda dapat melewati rantai sertifikat dari kode sebagai penyimpanan sertifikat.

Di perangkat berbasis Windows, Anda harus menambahkan sertifikat penandatanganan (akar dan perantara) ke penyimpanan sertifikat Windows. Jika tidak, sertifikat penandatanganan tidak akan dikirim ke DPS oleh saluran aman dengan Keamanan Lapisan Transportasi (TLS).

Tip

Anda juga dapat menggunakan OpenSSL alih-alih saluran aman (Schannel) dengan C SDK. Untuk informasi selengkapnya tentang cara menggunakan OpenSSL, lihat Menggunakan OpenSSL di SDK.

Untuk menambahkan sertifikat penandatanganan ke penyimpanan sertifikat di perangkat berbasis Windows:

  1. Di terminal Git Bash Anda, konversikan sertifikat penandatanganan Anda menjadi .pfx sebagai berikut.

    Sertifikat CA akar:

    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
    

    Sertifikat OS perantara:

    openssl pkcs12 -inkey ./private/azure-iot-test-only.intermediate.key.pem -in ./certs/azure-iot-test-only.intermediate.cert.pem -export -passin pass:1234 -passout pass:1234 -out ./certs/intermediate.pfx
    
  2. Klik kanan tombol Mulai Windows, lalu pilih Jalankan. Masukkan certmgr.msc dan pilih Ok untuk memulai pengelola sertifikat.

  3. Di manajer sertifikat, di bawah Sertifikat - Pengguna Saat Ini, pilih Otoritas Sertifikasi Akar Tepercaya. Lalu pada menu, pilih Tindakan>Semua Tugas>Impor.

  4. Ikuti langkah-langkah Wizard Impor Sertifikat untuk mengimpor root.pfx.

    • Pastikan untuk mencari berdasarkan Personal Information Exchange (.pfx)
    • Gunakan 1234 sebagai kata sandi.
    • Tempatkan sertifikat di penyimpanan sertifikat Otoritas Sertifikasi Akar Tepercaya.
  5. Ulangi langkah-langkah manajer sertifikat ini untuk mengimpor intermediate.pfx.

    • Tempatkan sertifikat di penyimpanan sertifikat Otoritas Sertifikasi Perantara.

Sertifikat penandatanganan Anda kini dipercaya di perangkat berbasis Windows dan rantai lengkap dapat diangkut ke DPS.

Membuat grup pendaftaran

  1. Masuk ke portal Microsoft Azure dan navigasikan ke instans Device Provisioning Service.

  2. Pilih Kelola pendaftaran dari bagian Pengaturan menu navigasi.

  3. Di bagian atas halaman, pilih Tambahkan grup pendaftaran.

  4. Pada tab Pendaftaran + provisi halaman Tambahkan grup pendaftaran, berikan informasi berikut untuk mengonfigurasi detail grup pendaftaran:

    Bidang Deskripsi
    Pengesahan Pilih sertifikat perantara X.509 sebagai mekanisme Pengesahan jika Anda ingin mengunggah sertifikat perantara yang akan digunakan hanya untuk grup pendaftaran ini, atau pilih sertifikat X.509 yang diunggah ke Device Provisioning Service ini jika Anda sudah mengunggah sertifikat perantara.
    Pengaturan sertifikat X.509 Bergantung pada metode pengesahan yang Anda pilih, unggah atau pilih sertifikat perantara utama dan sekunder untuk grup pendaftaran ini.
    Nama grup Berikan nama untuk grup perangkat. Nama grup pendaftaran adalah string yang tidak peka huruf besar/kecil (panjangnya hingga 128 karakter) dari karakter alfanumerik ditambah karakter khusus: '-', , '.''_', ':'. Karakter terakhir harus alfanumerik atau tanda hubung ('-').
    Status provisi Centang kotak Aktifkan pendaftaran ini jika Anda ingin grup pendaftaran ini tersedia untuk menyediakan perangkat. Hapus centang pada kotak ini jika Anda ingin grup dinonaktifkan. Anda dapat mengubah pengaturan ini nanti.
    Kebijakan provisi ulang Pilih kebijakan provisi ulang yang mencerminkan bagaimana Anda ingin DPS menangani perangkat yang meminta provisi ulang. Untuk informasi selengkapnya, lihat Kebijakan provisi ulang

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

  5. Pilih Berikutnya: Hub IoT.

  6. Pada tab hub IoT di halaman Tambahkan grup pendaftaran, berikan informasi berikut untuk menentukan hub IoT mana yang dapat disediakan oleh grup pendaftaran untuk:

    Bidang Deskripsi
    Hub IoT target Pilih satu atau beberapa hub IoT tertaut Anda, atau tambahkan tautan baru ke hub IoT. Untuk mempelajari selengkapnya tentang menautkan hub IoT ke instans DPS Anda, lihat Cara menautkan dan mengelola hub IoT.
    Kebijakan alokasi Jika Anda memilih lebih dari satu hub IoT tertaut, pilih bagaimana Anda ingin menetapkan perangkat ke hub yang berbeda. Untuk mempelajari selengkapnya tentang kebijakan alokasi, lihat Cara menggunakan kebijakan alokasi.

    Jika Anda hanya memilih satu hub IoT tertaut, sebaiknya gunakan kebijakan distribusi Tertimbang Merata.

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

  7. Pilih Berikutnya: Pengaturan perangkat

  8. Pada tab Pengaturan perangkat di halaman Tambahkan grup pendaftaran, berikan informasi berikut untuk menentukan bagaimana perangkat yang baru disediakan akan dikonfigurasi:

    Bidang Deskripsi
    IoT Edge Periksa Aktifkan IoT Edge pada perangkat yang disediakan jika semua perangkat yang disediakan melalui grup ini akan menjalankan Azure IoT Edge. Hapus centang pada kotak ini jika grup ini hanya untuk perangkat yang tidak mendukung IoT Edge. Baik semua perangkat dalam grup akan diaktifkan IoT Edge atau tidak ada yang bisa.
    Tag perangkat Gunakan kotak teks ini untuk menyediakan tag apa pun yang ingin Anda terapkan ke perangkat kembar perangkat yang disediakan.
    Properti yang diinginkan Gunakan kotak teks ini untuk menyediakan properti yang diinginkan yang ingin Anda terapkan ke perangkat kembar perangkat yang disediakan.

    Untuk informasi selengkapnya, lihat Memahami dan menggunakan perangkat kembar di IoT Hub.

  9. Pilih Berikutnya: Tinjau + buat.

  10. Pada tab Tinjau + buat , verifikasi semua nilai Anda lalu pilih Buat.

Menyiapkan dan menjalankan kode provisi perangkat

Di bagian ini, Anda akan memperbarui kode sampel dengan informasi instans Layanan Provisi Perangkat Anda. Jika perangkat diautentikasi, perangkat ditetapkan ke hub IoT yang ditautkan ke instans Device Provisioning Service yang dikonfigurasi di bagian ini.

Di bagian ini, Anda menggunakan perintah Git Bash dan IDE Visual Studio.

Mengonfigurasi kode perangkat provisi

Di bagian ini, Anda akan memperbarui kode sampel dengan informasi instans Layanan Provisi Perangkat Anda.

  1. Di portal Azure, pilih tab Gambaran Umum untuk instans Device Provisioning Service Anda dan catat nilai Cakupan ID.

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

  2. Luncurkan Visual Studio dan buka file solusi baru yang dibuat di direktori cmake yang Anda buat di akar repositori git azure-iot-sdk-c. File solusi diberi bernama azure_iot_sdks.sln.

  3. Di Penjelajah Solusi untuk Visual Studio, navigasikan ke Provision_Samples > prov_dev_client_sample > File Sumber dan buka prov_dev_client_sample.c.

  4. Cari konstanta id_scope, dan ganti nilainya dengan nilai Cakupan ID yang telah Anda salin sebelumnya. Contohnya:

    static const char* id_scope = "0ne00000A0A";
    
  5. Temukan definisi untuk fungsi main() dalam file yang sama. Pastikan hsm_type variabel diatur ke SECURE_DEVICE_TYPE_X509 dan bahwa semua baris lain hsm_type dikomentari. Misalnya:

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

  7. Klik kanan proyek prov_dev_client_sample dan pilih Atur sebagai Proyek Startup.

Mengonfigurasi kode rintisan HSM kustom

Spesifikasi berinteraksi dengan penyimpanan berbasis perangkat keras aman aktual bervariasi tergantung pada perangkat keras perangkat. Rantai sertifikat yang digunakan oleh perangkat yang disimulasikan dalam tutorial ini akan dikodekan secara permanen dalam kode stub HSM kustom. Dalam skenario dunia nyata, rantai sertifikat akan disimpan dalam perangkat keras HSM aktual untuk memberikan keamanan yang lebih baik untuk informasi sensitif. Metode yang sama dengan metode rintisan yang digunakan dalam sampel ini kemudian akan diimplementasikan untuk membaca rahasia dari penyimpanan berbasis perangkat keras tersebut.

Meskipun perangkat keras HSM tidak diperlukan, disarankan untuk melindungi informasi sensitif seperti kunci privat sertifikat. Jika HSM aktual sedang dipanggil oleh sampel, kunci privat tidak akan ada dalam kode sumber. Memiliki kunci dalam kode sumber akan mengekspos kunci kepada siapa pun yang dapat melihat kode. Ini hanya dilakukan dalam tutorial ini untuk membantu pembelajaran.

Untuk memperbarui kode stub HSM kustom untuk mensimulasikan identitas perangkat dengan ID device-01:

  1. Di Penjelajah Solusi untuk Visual Studio, navigasi ke Provision_Samples > custom_hsm_example > File Sumber dan buka custom_hsm_example.c.

  2. Perbarui nilai string konstanta string COMMON_NAME menggunakan nama umum yang Anda gunakan saat membuat sertifikat perangkat.

    static const char* const COMMON_NAME = "device-01";
    
  3. Di terminal Git Bash Anda, jalankan perintah berikut untuk menghasilkan konstanta string untuk sertifikat perangkat Anda:

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

    Salin output perintah ini.

  4. Perbarui nilai string string CERTIFICATE konstanta menggunakan rantai sertifikat yang Anda simpan di ./certs/device-01-full-chain.cert.pem setelah membuat sertifikat Anda. Gunakan teks sertifikat output dari langkah sebelumnya untuk nilai konstanta.

    Sintaks teks sertifikat harus cocok dengan pola berikut tanpa spasi tambahan atau penguraian yang dilakukan oleh 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. Di Git Bash, jalankan perintah berikut untuk menghasilkan konstanta string untuk kunci privat perangkat Anda:

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

    Salin output perintah ini.

  6. Perbarui nilai PRIVATE_KEY string konstanta dengan kunci privat untuk sertifikat perangkat Anda. Gunakan teks kunci privat output dari langkah sebelumnya untuk nilai konstanta.

    Sintaks teks kunci privat harus cocok dengan pola berikut tanpa spasi tambahan atau penguraian yang dilakukan oleh 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. Simpan perubahan.

  8. Klik kanan proyek custom_hsm_example dan pilih Bangun.

    Penting

    Anda harus membangun proyek custom_hsm_example sebelum membangun solusi lainnya di bagian berikutnya.

Jalankan sampel

  1. Pada menu Visual Studio, pilih Debug>Mulai tanpa penelusuran kesalahan untuk menjalankan solusinya. Jika diminta untuk membuat kembali proyek, pilih Ya untuk membuat kembali proyek sebelum dijalankan.

    Output berikut adalah contoh perangkat device-01 simulasi yang berhasil di-boot dan terhubung ke layanan provisi. Perangkat ditetapkan untuk hub IoT dan terdaftar:

    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. Ulangi langkah-langkah dalam Mengonfigurasi kode stub HSM kustom untuk perangkat kedua Anda (device-02) dan jalankan sampel lagi. Gunakan nilai berikut untuk perangkat tersebut:

    Deskripsi Nilai
    Nama umum "device-02"
    Rantai sertifikat lengkap Buat teks menggunakan ./certs/device-02-full-chain.cert.pem
    Kunci privat Hasilkan teks menggunakan ./private/device-02.key.pem

    Output berikut adalah contoh perangkat simulasi device-02 yang berhasil di-boot, dan terhubung ke layanan provisi. Perangkat ditetapkan untuk hub IoT dan terdaftar:

    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:
    

Kode sampel C# disiapkan untuk menggunakan sertifikat X.509 yang disimpan dalam file berformat PKCS#12 yang dilindungi kata sandi (.pfx). Sertifikat rantai lengkap yang Anda buat sebelumnya berada dalam format PEM. Untuk mengonversi sertifikat rantai penuh ke format PKCS#12, masukkan perintah berikut di prompt Git Bash Anda dari direktori tempat Anda sebelumnya menjalankan perintah OpenSSL.

  • device-01

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

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

Di sisa bagian ini, gunakan prompt perintah Windows Anda.

  1. Di portal Azure, pilih tab Gambaran Umum untuk Device Provisioning Service Anda.

  2. Salin nilai Cakupan ID.

    Screenshot of the ID scope on Azure portal.

  3. Di prompt perintah Windows Anda, ubah ke direktori X509Sample . Direktori ini terletak di repositori SDK yang Anda kloning di langkah sebelumnya: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. Masukkan perintah berikut untuk membangun dan menjalankan sampel provisi perangkat X.509. Ganti <id-scope> dengan Cakupan ID yang Anda salin dari portal Azure. Ganti <your-certificate-folder> dengan jalur ke folder tempat Anda menjalankan perintah OpenSSL Anda.

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

    Perangkat terhubung ke DPS dan ditetapkan ke hub IoT. Kemudian, perangkat mengirim pesan telemetri ke hub IoT. Anda harus melihat output yang mirip dengan berikut ini:

    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.
    

    Catatan

    Jika Anda tidak menentukan sertifikat dan kata sandi pada baris perintah, file sertifikat akan default ke ./certificate.pfx dan Anda akan dimintai kata sandi Anda.

    Parameter tambahan dapat diteruskan untuk mengubah TransportType (-t) dan GlobalDeviceEndpoint (-g). Untuk daftar lengkap jenis dotnet run -- --helpparameter .

  5. Untuk mendaftarkan perangkat kedua Anda, jalankan ulang sampel menggunakan sertifikat rantai penuhnya.

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

Dalam langkah-langkah berikut, gunakan prompt perintah Windows Anda.

  1. Di portal Azure, pilih tab Gambaran Umum untuk Device Provisioning Service Anda.

  2. Salin nilai Cakupan ID.

    Screenshot of the ID scope in the Azure portal.

  3. Di prompt perintah Windows Anda, buka direktori sampel, dan instal paket yang diperlukan oleh sampel. Jalur yang ditampilkan relatif terhadap lokasi tempat Anda mengkloning SDK.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    
  4. Di folder provisioning\device\samples, buka register_x509.js dan tinjau kode.

    Sampel default ke MQTT sebagai protokol transportasi. Jika Anda ingin menggunakan protokol yang berbeda, komentari baris berikut dan batalkan komentar baris untuk protokol yang sesuai.

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

    Sampel menggunakan lima variabel lingkungan untuk mengautentikasi dan memprovisikan perangkat IoT menggunakan DPS. Variabel lingkungan ini adalah:

    Nama variabel Deskripsi
    PROVISIONING_HOST Titik akhir yang digunakan untuk menyambungkan ke instans DPS Anda. Untuk tutorial ini, gunakan titik akhir global, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE Cakupan ID untuk instans DPS Anda.
    PROVISIONING_REGISTRATION_ID ID pendaftaran untuk perangkat Anda. Ini harus cocok dengan nama umum subjek dalam sertifikat perangkat.
    CERTIFICATE_FILE Jalur ke file sertifikat rantai penuh perangkat Anda.
    KEY_FILE Jalur ke file kunci privat sertifikat perangkat Anda.

    Metode ini ProvisioningDeviceClient.register() mencoba mendaftarkan perangkat Anda.

  5. Tambahkan variabel lingkungan untuk titik akhir perangkat global dan cakupan ID. Ganti <id-scope> dengan nilai yang Anda salin dari portal Azure.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. Atur variabel lingkungan untuk ID pendaftaran perangkat. ID pendaftaran untuk perangkat IoT harus cocok dengan nama umum subjek pada sertifikat perangkatnya. Untuk tutorial ini, perangkat-01 adalah nama subjek dan ID pendaftaran untuk perangkat.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. Atur variabel lingkungan untuk sertifikat rantai penuh perangkat dan file kunci privat perangkat yang Anda buat sebelumnya. Ganti <your-certificate-folder> dengan jalur ke folder tempat Anda menjalankan perintah OpenSSL Anda.

    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. Jalankan sampel dan verifikasi bahwa perangkat berhasil disediakan.

    node register_x509.js
    

    Anda harus melihat output yang mirip dengan berikut ini:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=device-01
    Client connected
    send status: MessageEnqueued
    
  9. Perbarui variabel lingkungan untuk perangkat kedua Anda (device-02) sesuai dengan tabel berikut dan jalankan sampel lagi.

    Variabel lingkungan Nilai
    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

Dalam langkah-langkah berikut, gunakan prompt perintah Windows Anda.

  1. Di portal Azure, pilih tab Gambaran Umum untuk Device Provisioning Service Anda.

  2. Salin Cakupan ID.

    Screenshot of the ID scope in the Azure portal.

  3. Di prompt perintah Windows Anda, buka direktori sampel provision_x509.py . Jalur yang ditampilkan relatif terhadap lokasi tempat Anda mengkloning SDK.

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

    Sampel ini menggunakan enam variabel lingkungan untuk mengautentikasi dan memprovisikan perangkat IoT menggunakan DPS. Variabel lingkungan ini adalah:

    Nama variabel Deskripsi
    PROVISIONING_HOST Titik akhir yang digunakan untuk menyambungkan ke instans DPS Anda. Untuk tutorial ini, gunakan titik akhir global, global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE Cakupan ID untuk instans DPS Anda.
    DPS_X509_REGISTRATION_ID ID pendaftaran untuk perangkat Anda. Ini harus cocok dengan nama umum subjek dalam sertifikat perangkat.
    X509_CERT_FILE Jalur ke file sertifikat rantai penuh perangkat Anda.
    X509_KEY_FILE Jalur ke file kunci privat sertifikat perangkat Anda.
    PASS_PHRASE Frasa pass yang digunakan untuk mengenkripsi file kunci privat (jika digunakan). Tidak diperlukan untuk tutorial ini.
  4. Tambahkan variabel lingkungan untuk titik akhir perangkat global dan cakupan ID. Untuk variabel cakupan ID, gunakan nilai yang Anda salin dari portal Azure.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Atur variabel lingkungan untuk ID pendaftaran perangkat. ID pendaftaran untuk perangkat IoT harus cocok dengan nama umum subjek pada sertifikat perangkatnya. Untuk tutorial ini, perangkat-01 adalah nama subjek dan ID pendaftaran untuk perangkat.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. Atur variabel lingkungan untuk sertifikat rantai penuh perangkat dan file kunci privat perangkat yang Anda buat sebelumnya. Ganti <your-certificate-folder> dengan jalur ke folder tempat Anda menjalankan perintah OpenSSL Anda.

    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. Tinjau kode untuk provision_x509.py. Jika Anda tidak menggunakan Python versi 3.7 atau yang lebih baru, buat perubahan kode yang disebutkan di sini untuk mengganti asyncio.run(main()).

  8. Jalankan sampel. Sampel terhubung ke DPS, yang akan memprovisikan perangkat ke hub IoT. Setelah perangkat disediakan, sampel mengirim beberapa pesan pengujian ke hub IoT.

    python provision_x509.py
    

    Anda harus melihat output yang mirip dengan berikut ini:

    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. Perbarui variabel lingkungan untuk perangkat kedua Anda (device-02) sesuai dengan tabel berikut dan jalankan sampel lagi.

    Variabel lingkungan Nilai
    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

Dalam langkah-langkah berikut, Anda menggunakan prompt perintah Windows dan permintaan Git Bash Anda.

  1. Di portal Azure, pilih tab Gambaran Umum untuk Device Provisioning Service Anda.

  2. Salin Cakupan ID.

    Screenshot of the ID scope in the Azure portal.

  3. Di prompt perintah Windows Anda, navigasikan ke folder proyek sampel. Jalur yang ditampilkan relatif terhadap lokasi tempat Anda mengkloning SDK

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Masukkan layanan provisi dan informasi identitas X.509 dalam kode sampel. Ini digunakan selama provisi, untuk pengesahan perangkat yang disimulasikan, sebelum pendaftaran perangkat.

    1. Buka file .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java di editor favorit Anda.

    2. Perbarui nilai berikut. Untuk idScope, gunakan Cakupan ID yang Anda salin sebelumnya. Untuk titik akhir global, gunakan Titik akhir perangkat global. Titik akhir ini sama untuk setiap instans DPS, global.azure-devices-provisioning.net.

      private static final String idScope = "[Your ID scope here]";
      private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
      
    3. Sampel default untuk menggunakan HTTPS sebagai protokol transportasi. Jika Anda ingin mengubah protokol, komentari baris berikut, dan batalkan komentar baris untuk protokol yang ingin Anda gunakan.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Perbarui nilai leafPublicPem string konstanta dengan nilai sertifikat perangkat Anda, device-01.cert.pem.

      Sintaks teks sertifikat harus cocok dengan pola berikut tanpa spasi atau karakter tambahan.

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

      Memperbarui nilai string ini secara manual dapat rentan terhadap kesalahan. Untuk menghasilkan sintaks yang tepat, Anda dapat menyalin dan menempelkan perintah berikut ke permintaan Git Bash Anda, dan menekan ENTER. Perintah ini menghasilkan sintaks untuk leafPublicPem nilai konstanta string dan menulisnya ke output.

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

      Salin dan tempel teks sertifikat output untuk nilai konstanta.

    5. Perbarui nilai leafPrivateKey string konstanta dengan kunci privat yang tidak terenkripsi untuk sertifikat perangkat Anda, unencrypted-device-key.pem.

      Sintaks teks kunci privat harus cocok dengan pola berikut tanpa spasi atau karakter tambahan.

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

      Untuk menghasilkan sintaks yang tepat, Anda dapat menyalin dan menempelkan perintah berikut ke permintaan Git Bash Anda, dan menekan ENTER. Perintah ini menghasilkan sintaks untuk leafPrivateKey nilai konstanta string dan menulisnya ke output.

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

      Salin dan tempel teks kunci privat output untuk nilai konstanta.

    6. rootPublicPem Tambahkan string konstanta dengan nilai sertifikat CA akar Anda, azure-iot-test-only.root.ca.cert.pem. Anda dapat menambahkannya tepat setelah leafPrivateKey konstanta.

      Sintaks teks sertifikat harus cocok dengan pola berikut tanpa spasi atau karakter tambahan.

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

      Untuk menghasilkan sintaks yang tepat, Anda dapat menyalin dan menempelkan perintah berikut ke permintaan Git Bash Anda, dan menekan ENTER. Perintah ini menghasilkan sintaks untuk rootPublicPem nilai konstanta string dan menulisnya ke output.

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

      Salin dan tempel teks sertifikat output untuk nilai konstanta.

    7. intermediatePublicPem Tambahkan string konstanta dengan nilai sertifikat OS menengah Anda, azure-iot-test-only.intermediate.cert.pem. Anda dapat menambahkannya tepat setelah konstanta sebelumnya.

      Sintaks teks sertifikat harus cocok dengan pola berikut tanpa spasi atau karakter tambahan.

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

      Untuk menghasilkan sintaks yang tepat, Anda dapat menyalin dan menempelkan perintah berikut ke permintaan Git Bash Anda, dan menekan ENTER. Perintah ini menghasilkan sintaks untuk intermediatePublicPem nilai konstanta string dan menulisnya ke output.

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

      Salin dan tempel teks sertifikat output untuk nilai konstanta.

    8. Temukan baris berikut dalam main metode .

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

      Tambahkan kedua baris ini langsung di bawahnya untuk menambahkan sertifikat OS menengah dan akar Anda ke rantai penandatanganan. Rantai penandatanganan Anda harus menyertakan seluruh rantai sertifikat hingga dan menyertakan sertifikat yang telah Anda verifikasi dengan DPS.

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

      Catatan

      Urutan bahwa sertifikat penandatanganan ditambahkan penting. Sampel akan gagal jika diubah.

    9. Simpan perubahan.

  5. Buat sampel, lalu buka target folder .

    mvn clean install
    cd target
    
  6. Build menghasilkan file .jar di target folder dengan format file berikut: provisioning-x509-sample-{version}-with-deps.jar; misalnya: provisioning-x509-sample-1.8.1-with-deps.jar. Jalankan file .jar. Anda mungkin perlu mengganti versi dalam perintah berikut.

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

    Sampel terhubung ke DPS, yang memprovisikan perangkat ke hub IoT. Setelah perangkat disediakan, sampel akan mengirim beberapa pesan pengujian ke hub IoT.

    Starting...
    Beginning setup.
    WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
    2022-10-21 10:41:20,476 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.2
    2022-10-21 10:41:20,479 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread...
    Waiting for Provisioning Service to register
    2022-10-21 10:41:20,482 INFO (global.azure-devices-provisioning.net-4f8279ac-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service...
    2022-10-21 10:41:20,652 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message
    2022-10-21 10:41:20,680 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates
    2022-10-21 10:41:21,603 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device...
    2022-10-21 10:41:21,605 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING
    2022-10-21 10:41:24,868 INFO (global.azure-devices-provisioning.net-4f8279ac-Cxn4f8279ac-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully
    IotHUb Uri : contoso-hub-2.azure-devices.net
    Device ID : device-01
    2022-10-21 10:41:30,514 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-21 10:41:30,526 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true
    2022-10-21 10:41:30,533 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.1.2
    2022-10-21 10:41:30,590 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection...
    2022-10-21 10:41:30,625 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet...
    2022-10-21 10:41:31,452 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged
    2022-10-21 10:41:31,453 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/#
    2022-10-21 10:41:31,523 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/device-01/messages/devicebound/# was acknowledged
    2022-10-21 10:41:31,525 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully
    2022-10-21 10:41:31,528 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established
    2022-10-21 10:41:31,531 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK
    2022-10-21 10:41:31,532 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads
    2022-10-21 10:41:31,535 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details
    2022-10-21 10:41:31,536 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully
    2022-10-21 10:41:31,537 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully
    Sending message from device to IoT Hub...
    2022-10-21 10:41:31,539 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    Press any key to exit...
    2022-10-21 10:41:31,540 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    2022-10-21 10:41:31,844 DEBUG (MQTT Call: device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] )
    2022-10-21 10:41:31,846 DEBUG (contoso-hub-2.azure-devices.net-device-01-d7c67552-Cxn0bd73809-420e-46fe-91ee-942520b775db-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [0d143280-dbc7-405f-a61e-fcc7a1d80b87] Message Id [4d8d39c8-5a38-4299-8f07-3ae02cdc3218] ) with status OK
    Message sent!
    
  7. Perbarui konstanta untuk perangkat kedua Anda (device-02) sesuai dengan tabel berikut, bangun ulang, dan jalankan sampel lagi.

    Terus-menerus File yang akan digunakan
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./private/device-02.key.pem

Konfirmasi pendaftaran provisi perangkat Anda

Periksa catatan pendaftaran grup pendaftaran untuk melihat detail pendaftaran untuk perangkat Anda:

  1. Di portal Azure, buka instans Device Provisioning Service Anda.

  2. Di menu Pengaturan, pilih Kelola pendaftaran.

  3. Pilih Grup pendaftaran. Entri grup pendaftaran X.509 yang Anda buat sebelumnya akan muncul dalam daftar.

  4. Pilih entri pendaftaran. Kemudian pilih Detail di samping Status pendaftaran untuk melihat perangkat yang telah didaftarkan melalui grup pendaftaran. Hub IoT tempat masing-masing perangkat Anda ditetapkan, ID perangkat mereka, serta tanggal dan waktu mereka terdaftar muncul dalam daftar.

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

  5. Anda dapat memilih salah satu perangkat untuk melihat detail lebih lanjut untuk perangkat tersebut.

Untuk memverifikasi perangkat di hub IoT Anda:

  1. Di portal Azure, buka hub IoT tempat perangkat Anda ditetapkan.

  2. Di menu Manajemen perangkat , pilih Perangkat.

  3. Jika perangkat Anda berhasil disediakan, ID perangkat, perangkat-01, dan perangkat-02, akan muncul dalam daftar, dengan Status diatur sebagai diaktifkan. Jika Anda tidak melihat perangkat, pilih Refresh.

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

Membersihkan sumber daya

Setelah selesai menguji dan menjelajahi sampel klien perangkat ini, gunakan langkah-langkah berikut untuk menghapus semua sumber daya yang dibuat oleh tutorial ini.

  1. Tutup jendela output sampel klien perangkat di komputer Anda.

Menghapus grup pendaftaran Anda

  1. Dari menu sebelah kiri di portal Azure, pilih Semua sumber daya.

  2. Pilih instans DPS Anda.

  3. Di menu Pengaturan, pilih Kelola pendaftaran.

  4. Pilih tab Grup pendaftaran.

  5. Pilih grup pendaftaran yang Anda gunakan untuk tutorial ini.

  6. Pada halaman Detail pendaftaran, pilih Detail di samping status Pendaftaran. Lalu pilih kotak centang di samping header kolom Id Perangkat untuk memilih semua rekaman pendaftaran untuk grup pendaftaran. Pilih Hapus di bagian atas halaman untuk menghapus rekaman pendaftaran.

    Penting

    Menghapus grup pendaftaran tidak menghapus catatan pendaftaran yang terkait dengannya. Catatan yatim piatu ini akan dihitung terhadap kuota pendaftaran untuk instans DPS. Untuk alasan ini, ini adalah praktik terbaik untuk menghapus semua catatan pendaftaran yang terkait dengan grup pendaftaran sebelum Anda menghapus grup pendaftaran itu sendiri.

  7. Kembali ke halaman Kelola pendaftaran dan pastikan tab Grup pendaftaran dipilih.

  8. Pilih kotak centang di samping nama grup grup pendaftaran yang Anda gunakan untuk tutorial ini.

  9. Di bagian atas halaman, pilih Hapus.

Menghapus sertifikat CA terdaftar dari DPS

  1. Pilih Sertifikat dari menu sebelah kiri instans DPS Anda. Untuk setiap sertifikat yang Anda unggah dan verifikasi dalam tutorial ini, pilih sertifikat dan pilih Hapus dan konfirmasikan pilihan Anda untuk menghapusnya.

Menghapus pendaftaran perangkat dari IoT Hub

  1. Dari menu sebelah kiri di portal Azure, pilih Semua sumber daya.

  2. Pilih IoT hub Anda.

  3. Di menu Explorers, pilih Perangkat IoT.

  4. Pilih kotak centang di samping ID perangkat perangkat yang Anda daftarkan dalam tutorial ini. Misalnya, perangkat-01 dan perangkat-02.

  5. Di bagian atas halaman, pilih Hapus.

Langkah berikutnya

Dalam tutorial ini, Anda memprovisikan beberapa perangkat X.509 ke hub IoT Anda menggunakan grup pendaftaran. Selanjutnya, pelajari cara memprovisikan perangkat IoT di beberapa hub.