Aracılığıyla paylaş


Öğretici: Kayıt gruplarını kullanarak birden çok X.509 cihazı sağlama

Bu öğreticide, kimlik doğrulaması için X.509 sertifikalarını kullanan IoT cihaz gruplarını sağlamayı öğreneceksiniz. Azure IoT SDK'sından alınan örnek cihaz kodu, X.509 cihazlarının sağlama benzetimini yapmak için geliştirme makinenizde yürütülür. Gerçek cihazlarda, cihaz kodu IoT cihazından dağıtılır ve çalıştırılır.

Azure IoT Hub Cihaz Sağlama Hizmeti, cihaz sağlama için iki tür kaydı destekler:

  • Kayıt grupları: Birden fazla ilgili cihazı kaydetmek için kullanılır. Bu öğreticide kayıt gruplarıyla sağlama gösterilmektedir.
  • Bireysel kayıtlar: Tek bir cihazı kaydetmek için kullanılır.

Azure IoT Hub Cihaz Sağlama Hizmeti, cihaz sağlama için üç kimlik doğrulama biçimi destekler:

  • X.509 sertifikaları - Bu öğreticide X.509 sertifika kanıtlaması gösterilmektedir
  • Güvenilen platform modülü (TPM)
  • Simetrik anahtarlar

Üretim senaryolarında, cihaz gizli dizilerinin güvenli, donanım tabanlı depolanması için bir Donanım Güvenlik Modülü (HSM) kullanılır. Gizli diziler için güvenli depolama sağlamak için bir HSM simetrik anahtar, X.509 sertifikası veya TPM kanıtlama ile kullanılabilir. Cihaz sertifikanızın özel anahtarı gibi hassas bilgilerin korunmasına yardımcı olmak için cihaz gizli dizilerinin donanım tabanlı depolanması önerilir.

Bu öğreticide aşağıdaki hedefleri tamamlaacaksınız:

  • X.509 sertifikalarını kullanarak bir cihaz kümesini düzenlemek için bir sertifika güven zinciri oluşturun.
  • Sertifika zincirini kullanan yeni bir grup kaydı oluşturun.
  • Geliştirme ortamını ayarlayın.
  • Azure IoT cihaz SDK'sında örnek kodu kullanarak sertifika zincirini kullanarak cihazları sağlayın.

Önkoşullar

Aşağıdaki önkoşullar, cihazların benzetimini yapmak için kullanılan bir Windows geliştirme ortamına yöneliktir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.

  • 'C++ile masaüstü geliştirme' iş yükü etkinken Visual Studio 2022'yi yükleyin. Visual Studio 2015, Visual Studio 2017 ve Visual Studio 19 da desteklenir.

  • En son CMake derleme sistemini yükleyin. CMake yürütülebilir dosyasını yolunuza ekleyen seçeneği işaretlediğinizden emin olun.

    Önemli

    Yüklemeyi başlatmadan CMake önce makinenizde Visual Studio önkoşullarının (Visual Studio ve 'C++ile masaüstü geliştirme' iş yükü) yüklü olduğunu onaylayın. Önkoşullar sağlandıktan ve indirme doğrulandıktan sonra, CMake derleme sistemini yükleyin. Ayrıca, CMake derleme sisteminin eski sürümlerinin bu öğreticide kullanılan çözüm dosyasını oluşturamaya çalışmadığını unutmayın. CMake'nin en son sürümünü kullandığınızdan emin olun.

Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.

  • Windows tabanlı makinenize .NET SDK 6.0 veya üzerini yükleyin. Sürümünüzü denetlemek için aşağıdaki komutu kullanabilirsiniz.

    dotnet --info
    

Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.

  • Makinenize Node.js v4.0 veya üzerini yükleyin.

Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir.

Aşağıdaki önkoşullar bir Windows geliştirme ortamı içindir. Linux veya macOS için SDK belgelerindeki Geliştirme ortamınızı hazırlama bölümündeki uygun bölüme bakın.

  • En son Git sürümünü yükleyin. Git'in komut penceresi tarafından erişilebilen ortam değişkenlerine eklendiğinden emin olun.

  • Makinenizde OpenSSL'nin yüklü olduğundan emin olun. Windows'da, Git yüklemeniz openSSL yüklemesini içerir. OpenSSL'ye Git Bash isteminden erişebilirsiniz. OpenSSL'nin yüklü olduğunu doğrulamak için bir Git Bash istemi açın ve girin openssl version.

    Not

    OpenSSL hakkında bilgi sahibi değilseniz ve Windows makinenizde zaten yüklü değilse Git Bash isteminden OpenSSL kullanmanızı öneririz. Alternatif olarak, kaynak kodu indirmeyi ve OpenSSL oluşturmayı seçebilirsiniz. OpenSSL oluşturmayı veya indirmeyi seçerseniz, OpenSSL ikili dosyasının yolunuzda erişilebilir olduğundan ve ortam değişkeninin OPENSSL_CNF openssl.cnf dosyanızın yoluna ayarlandığından emin olun.

Geliştirme ortamınızı hazırlama

Bu bölümde, Azure IoT C SDK'sını oluşturmak için kullanılan bir geliştirme ortamı hazırlamış olacaksınız. SDK, DPS ile cihaz sağlama tarafından kullanılan örnek kodu ve araçları içerir.

  1. Web tarayıcısında Azure IoT C SDK'sının Yayın sayfasına gidin.

  2. Azure IoT C SDK'sının en son sürümünün etiket adını kopyalayın, örneğin: lts_03_2024.

  3. Bir Windows komut istemi açın ve C GitHub deposu için Azure IoT Cihaz SDK'sının en son sürümünü kopyalamak için aşağıdaki komutları çalıştırın. değerini önceki adımda kopyaladığınız etiketle değiştirin <release-tag> .

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

    Bu işlemin tamamlanması birkaç dakika sürebilir.

  4. İşlem tamamlandığında dizinden azure-iot-sdk-c aşağıdaki komutları çalıştırın:

    mkdir cmake
    cd cmake
    
  5. Kod örneği, X.509 kimlik doğrulaması aracılığıyla kanıtlama sağlamak için bir X.509 sertifikası kullanır. Sdk'nın geliştirme platformunuza özgü ve cihaz sağlama istemcisini içeren bir sürümünü oluşturmak için aşağıdaki komutu çalıştırın. Dizinde cmake simülasyon cihazı için bir Visual Studio çözümü oluşturulur.

    değerini kopyaladığınız C SDK'sının mutlak yoluyla değiştirin <path .

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

    İpucu

    cmake C++ derleyicinizi bulamazsanız, yukarıdaki komutu çalıştırırken derleme hataları alabilirsiniz. Böyle bir durumda Visual Studio komut isteminde komutunu çalıştırmayı deneyin.

  6. Derleme başarılı olduğunda, son birkaç çıkış satırı aşağıdaki çıkışa benzer şekilde görünür:

    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
    

Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak C# GitHub deposu için Azure IoT SDK'sını kopyalayın:

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

Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak Node.js GitHub deposu için Azure IoT SDK'sını kopyalayın:

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

Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak Python GitHub deposu için Azure IoT Cihaz SDK'sını kopyalayın:

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

Not

Bu öğreticide kullanılan örnekler azure-iot-sdk-python deposunun v2 dalında yer alır. Python SDK'sının V3'leri beta sürümünde kullanılabilir.

  1. Bir Windows komut istemi açın ve aşağıdaki komutu kullanarak Java GitHub deposu için Azure IoT Örnekleri'ni kopyalayın:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. Kök azure-iot-sdk-java dizine gidin ve gerekli tüm paketleri indirmek için projeyi oluşturun.

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

X.509 sertifika zinciri oluşturma

Bu bölümde, bu öğreticiyle her cihazı test için üç sertifikadan oluşan bir X.509 sertifika zinciri oluşturacaksınız. Sertifikalar aşağıdaki hiyerarşiye sahiptir.

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

Kök sertifika Kök sertifikayı DPS ile karşıya yükler ve doğrularsınız. Bu doğrulama, DPS'nin bu sertifikaya güvenmesini ve sertifika tarafından imzalanan sertifikaları doğrulamasını sağlar.

Ara sertifika: Cihazları ürün satırlarına, şirket bölümlerine veya diğer ölçütlere göre mantıksal olarak gruplandırmak için ara sertifikaların kullanılması yaygındır. Bu öğreticide bir ara sertifikaya sahip bir sertifika zinciri kullanılır, ancak bir üretim senaryosunda birkaç sertifikanız olabilir. Bu zincirdeki ara sertifika kök sertifika tarafından imzalanır. Bu sertifika, DPS'de oluşturulan kayıt grubuna sağlanır. Bu yapılandırma, aynı ara sertifika tarafından imzalanan cihaz sertifikaları olan bir cihaz grubunun tamamını yönetmeye olanak tanır.

Cihaz sertifikaları: Bir cihaz sertifikaları (bazen yaprak sertifika olarak adlandırılır) ara sertifika tarafından imzalanır ve özel anahtarıyla birlikte cihazda depolanır. İdeal olan bu hassas öğelerin bir HSM ile güvenli bir şekilde depolanmasıdır. Aynı ara sertifika tarafından birden çok cihaz sertifikası imzalanabilir. Her cihaz, sağlamayı denerken sertifika zinciriyle birlikte sertifikasını ve özel anahtarını sunar.

Sertifika zincirleri hakkında daha fazla bilgi için bkz . X.509 sertifika kanıtlama.

X.509 OpenSSL ortamını ayarlama

Bu bölümde, Openssl yapılandırma dosyalarını, dizin yapısını ve Openssl komutları tarafından kullanılan diğer dosyaları oluşturursunuz.

  1. Git Bash komut istemini açın ve bu öğretici için X.509 sertifikalarını ve anahtarlarını oluşturmak istediğiniz klasöre gidin.

  2. Kök CA sertifikanız için openssl_root_ca.cnf adlı bir OpenSSL yapılandırma dosyası oluşturun. OpenSSL yapılandırma dosyaları, OpenSSL komutları tarafından kullanılan ilkeler ve tanımlar içerir. Aşağıdaki metni kopyalayıp openssl_root_ca.cnf dosyasına yapıştırın:

    # 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. Ara sertifikalar ve cihaz sertifikaları için kullanmak üzere openssl_device_intermediate_ca.cnf adlı bir OpenSSL yapılandırma dosyası oluşturun. Aşağıdaki metni kopyalayıp openssl_device_intermediate_ca.cnf dosyasına yapıştırın:

    # 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. Bu öğreticide OpenSSL komutları tarafından kullanılan dizin yapısını, veritabanı dosyasını index.txt ve seri numarası dosyası serisini oluşturun:

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

Kök CA sertifikası oluşturma

Kök CA özel anahtarı ve kök CA sertifikası oluşturmak için aşağıdaki komutları çalıştırın. Ara sertifikanızı imzalamak için bu sertifikayı ve anahtarı kullanırsınız.

  1. Git Bash terminalinizde bir kök CA özel anahtarı oluşturun:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. Kök CA sertifikası oluşturma:

    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
    

    Önemli

    Konu adı (//CN=Azure IoT Hub CA Cert Test Only) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını yalnızca bir eğik çizgi (/CN=Azure IoT Hub CA Cert Test Only ) ile belirtin.

  3. Kök CA sertifikasını inceleyin:

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

    Verenin ve Konunun kök CA olduğunu gözlemleyin.

    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)
    

Ara CA sertifikası oluşturma

Ara CA özel anahtarı ve ara CA sertifikası oluşturmak için aşağıdaki komutları çalıştırın. Cihaz sertifikalarınızı imzalamak için bu sertifikayı ve anahtarı kullanırsınız.

  1. Git Bash terminalinizde bir ara CA özel anahtarı oluşturun:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. Ara CA sertifikası imzalama isteği (CSR) oluşturun:

    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
    

    Önemli

    Konu adı (//CN=Azure IoT Hub Intermediate Cert Test Only) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını tek bir eğik çizgi (/CN=Azure IoT Hub Intermediate Cert Test Only ) ile belirtin.

  3. Ara sertifikayı kök CA sertifikasıyla imzalama

    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. Ara CA sertifikasını inceleyin:

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

    Verenin kök CA olduğunu ve Konu'nın ara CA olduğunu gözlemleyin.

    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)
    

Cihaz sertifikaları oluşturma

Bu bölümde iki cihaz sertifikası ve bunların tam zincir sertifikaları oluşturacaksınız. Tam zincir sertifikası cihaz sertifikasını, ara CA sertifikasını ve kök CA sertifikasını içerir. Cihaz, DPS'ye kaydolduğunda tam zincir sertifikasını sunmalıdır.

  1. İlk cihaz özel anahtarını oluşturun.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. Cihaz sertifikası CSR'sini oluşturun.

    Cihaz sertifikasının konu ortak adı (CN), cihazınızın DPS'ye kaydolmak için kullandığı kayıt kimliğine ayarlanmalıdır. Kayıt kimliği, alfasayısal karakterlerden oluşan büyük/küçük harfe duyarlı olmayan ve özel karakterler içeren bir dizedir: '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır. Ortak ad bu biçime uymalıdır. DPS, 128 karakter uzunluğunda kayıt kimliklerini destekler; ancak, X.509 sertifikasındaki konu ortak adının uzunluğu üst sınırı 64 karakterdir. Bu nedenle, X.509 sertifikaları kullanılırken kayıt kimliği 64 karakterle sınırlıdır. Grup kayıtları için kayıt kimliği, IoT Hub'da cihaz kimliği olarak da kullanılır.

    Konu ortak adı parametresi kullanılarak -subj ayarlanır. Aşağıdaki komutta ortak ad, device-01 olarak ayarlanır.

    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
    

    Önemli

    Konu adı (//CN=device-01) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını tek bir eğik çizgi (/CN=device-01 ) ile belirtin.

  3. Cihaz sertifikasını imzalayın.

    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. Cihaz sertifikasını inceleyin:

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

    Verenin ara CA olduğunu ve Konu değerinin cihaz kayıt kimliği device-01olduğunu gözleyin.

    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. Cihaz, DPS ile kimlik doğrulaması yaparken tam sertifika zincirini sunmalıdır. Sertifika zincirini oluşturmak için aşağıdaki komutu kullanın:

    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. Incelemek için bir metin düzenleyicisinde ./certs/device-01-full-chain.cert.pem sertifika zinciri dosyasını açın. Sertifika zinciri metni, üç sertifikanın da tam zincirini içerir. Sağlamak için bu öğreticinin devamında bu sertifika zincirini device-01kullanacaksınız.

    Tam zincir metni aşağıdaki biçime sahiptir:

    -----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. İkinci cihaz için özel anahtar, X.509 sertifikası ve tam zincir sertifikası oluşturmak için bu betiği kopyalayıp Git Bash komut isteminize yapıştırın. Daha fazla cihaz için sertifika oluşturmak için betiğin registration_id başında bildirilen değişkeni değiştirebilirsiniz.

    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
    

    Önemli

    Konu adı (//CN=$registration_id) için verilen ek eğik çizgi yalnızca Windows platformlarında Git ile dizeden kaçmak için gereklidir. Linux platformlarında konu adını tek bir eğik çizgi (/CN=$registration_id ) ile belirtin.

    Not

    Bu betik, özel anahtar ve sertifika dosyaları için temel dosya adı olarak kayıt kimliğini kullanır. Kayıt kimliğiniz geçerli dosya adı karakterleri olmayan karakterler içeriyorsa, betiği buna göre değiştirmeniz gerekir.

    Uyarı

    Sertifikaların metni yalnızca ortak anahtar bilgilerini içerir.

    Ancak, cihazın cihaz sertifikasının özel anahtarına da erişimi olmalıdır. Cihaz sağlamayı denediğinde çalışma zamanında bu anahtarı kullanarak doğrulama gerçekleştirmesi gerektiğinden bu gereklidir. Bu anahtarın duyarlılığı, özel anahtarların güvenliğini sağlamaya yardımcı olmak için gerçek bir HSM'de donanım tabanlı depolama kullanmanızın başlıca nedenlerinden biridir.

Bu öğreticinin geri kalanında aşağıdaki dosyaları kullanırsınız:

Sertifika Dosya Açıklama
kök CA sertifikası. certs/azure-iot-test-only.root.ca.cert.pem DPS'ye yüklendi ve doğrulandı.
ara CA sertifikası certs/azure-iot-test-only.intermediate.cert.pem DPS'de kayıt grubu oluşturmak için kullanılır.
device-01 özel anahtarı private/device-01.key.pem CIHAZ tarafından DPS ile kimlik doğrulaması sırasında cihaz sertifikasının sahipliğini doğrulamak için kullanılır.
device-01 tam zincir sertifikası certs/device-01-full-chain.cert.pem Kimlik doğrulaması yapmak ve DPS'ye kaydolmak için cihaz tarafından sunulur.
device-02 özel anahtarı private/device-02.key.pem CIHAZ tarafından DPS ile kimlik doğrulaması sırasında cihaz sertifikasının sahipliğini doğrulamak için kullanılır.
device-02 tam zincir sertifikası certs/device-02-full-chain.cert.pem Kimlik doğrulaması yapmak ve DPS'ye kaydolmak için cihaz tarafından sunulur.

Kök sertifikanın sahipliğini doğrulama

DPS'nin kimlik doğrulaması sırasında cihazın sertifika zincirini doğrulayabilmesi için kök CA sertifikasının sahipliğini karşıya yüklemeniz ve doğrulamanız gerekir. Kök CA sertifikasını DPS örneğinize eklemek için şu adımları izleyin:

  1. Azure portalında Cihaz Sağlama Hizmeti örneğine gidin.

  2. Sol taraftaki menüden Sertifikalar'ı açın ve yeni bir sertifika eklemek için Ekle'yi seçin.

  3. Sertifikanız için kolay görünen bir ad girin. Kök CA sertifika dosyasının certs/azure-iot-test-only.root.ca.cert.pemkonumuna göz atın. Yükle'yi seçin.

  4. Karşıya yüklemede sertifika durumunu doğrulandı olarak ayarla kutusunu seçin.

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

  5. Kaydet'i seçin.

  6. Sertifikanızın sertifika sekmesinde Doğrulandı durumuyla gösterildiğinden emin olun.

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

Windows tabanlı cihazlarda sertifika depoyu güncelleştirme

Windows olmayan cihazlarda, sertifika zincirini koddan sertifika deposu olarak geçirebilirsiniz.

Windows tabanlı cihazlarda, imzalama sertifikalarını (kök ve ara) bir Windows sertifika deposuna eklemeniz gerekir. Aksi takdirde, imzalama sertifikaları Aktarım Katmanı Güvenliği (TLS) ile güvenli bir kanal tarafından DPS'ye taşınmaz.

İpucu

C SDK ile güvenli kanal (Schannel) yerine OpenSSL de kullanılabilir. OpenSSL kullanma hakkında daha fazla bilgi için bkz . SDK'da OpenSSL kullanma.

İmzalama sertifikalarını Windows tabanlı cihazlardaki sertifika deposuna eklemek için:

  1. Git Bash terminalinizde, imzalama sertifikalarınızı .pfx aşağıdaki gibi olarak dönüştürün.

    Kök CA sertifikası:

    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
    

    Ara CA sertifikası:

    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. Windows Başlangıç düğmesine sağ tıklayın ve çalıştır'ı seçin. Sertifika yöneticisini başlatmak için certmgr.msc girin ve Tamam'ı seçin.

  3. Sertifika yöneticisinde, Sertifikalar - Geçerli Kullanıcı'nın altında Güvenilen Kök Sertifika Yetkilileri'ni seçin. Ardından menüde Tüm Görevleri>İçeri Aktar eylemini>seçin.

  4. İçeri aktarmak root.pfxiçin Sertifika İçeri Aktarma Sihirbazı adımlarını izleyin.

    • Kişisel Bilgi Değişimi 'ne (.pfx) göre arama yaptığınızdan emin olun
    • Parola olarak kullanın 1234 .
    • Sertifikayı Güvenilen Kök Sertifika Yetkilileri sertifika deposuna yerleştirin.
  5. İçeri aktarmak intermediate.pfxiçin bu sertifika yöneticisi adımlarını yineleyin.

    • Sertifikayı Ara Sertifika Yetkilileri sertifika deposuna yerleştirin.

İmzalama sertifikalarınız artık Windows tabanlı cihazda güvenilirdir ve tam zincir DPS'ye taşınabilir.

Kayıt grubu oluşturma

  1. Azure portalında oturum açın ve Cihaz Sağlama Hizmeti örneğine gidin.

  2. Gezinti menüsünün Ayarlar bölümünde Kayıtları yönet'i seçin.

  3. Sayfanın üst kısmında Kayıt grubu ekle'yi seçin.

  4. Kayıt grubu ekle sayfasının Kayıt + sağlama sekmesinde, kayıt grubu ayrıntılarını yapılandırmak için aşağıdaki bilgileri sağlayın:

    Alan Açıklama
    Tasdik Yalnızca bu kayıt grubu için kullanılacak ara sertifikaları karşıya yüklemek istiyorsanız Kanıtlama mekanizması olarak X.509 ara sertifikaları seçin veya ara sertifikaları zaten yüklediyseniz bu Cihaz Sağlama Hizmeti'ne yüklenmiş X.509 sertifikalarını seçin.
    X.509 sertifika ayarları Seçtiğiniz kanıtlama yöntemine bağlı olarak, bu kayıt grubu için birincil ve ikincil ara sertifikaları karşıya yükleyin veya seçin.
    Grup adı Cihaz grubu için bir ad belirtin. Kayıt grubu adı, alfasayısal karakterlerin yanı sıra özel karakterler içeren büyük/küçük harfe duyarlı olmayan bir dizedir (en fazla 128 karakter uzunluğundadır): '-', '.', '_', ':'. Son karakter alfasayısal veya tire ('-') olmalıdır.
    Sağlama durumu Bu kayıt grubunun cihazları sağlamak için kullanılabilir olmasını istiyorsanız Bu kaydı etkinleştir kutusunu işaretleyin. Grubun devre dışı bırakılmasını istiyorsanız bu kutunun işaretini kaldırın. Bu ayarı daha sonra değiştirebilirsiniz.
    yeniden sağlama ilkesi DPS'nin yeniden sağlama isteyen cihazları nasıl işlemesini istediğinizi yansıtan bir yeniden sağlama ilkesi seçin. Daha fazla bilgi için bkz . İlkeleri yeniden sağlama

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

  5. İleri: IoT hub'ları'ı seçin.

  6. Kayıt grubu ekle sayfasının IoT hub'ları sekmesinde, kayıt grubunun cihazları hangi IoT hub'larına sağlayabileceğini belirlemek için aşağıdaki bilgileri sağlayın:

    Alan Açıklama
    Hedef IoT hub'ları Bağlı IoT hub'larınızdan birini veya daha fazlasını seçin veya bir IoT hub'ına yeni bir bağlantı ekleyin. IoT hub'larını DPS örneğinize bağlama hakkında daha fazla bilgi edinmek için bkz . IoT hub'larını bağlama ve yönetme.
    Ayırma ilkesi Birden fazla bağlı IoT hub'ı seçtiyseniz cihazları farklı hub'lara nasıl atamak istediğinizi seçin. Ayırma ilkeleri hakkında daha fazla bilgi edinmek için bkz . Ayırma ilkelerini kullanma.

    Yalnızca bir bağlantılı IoT hub'ı seçtiyseniz, Eşit ağırlıklı dağıtım ilkesini kullanmanızı öneririz.

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

  7. İleri: Cihaz ayarları'nı seçin

  8. Kayıt grubu ekle sayfasının Cihaz ayarları sekmesinde, yeni sağlanan cihazların nasıl yapılandırılacağını tanımlamak için aşağıdaki bilgileri sağlayın:

    Alan Açıklama
    IoT Edge Bu grup aracılığıyla sağlanan tüm cihazlar Azure IoT Edge çalıştıracaksa sağlanan cihazlarda IoT Edge'i etkinleştir seçeneğini işaretleyin. Bu grup yalnızca IoT Edge özellikli olmayan cihazlar içinse bu kutunun işaretini kaldırın. Bir gruptaki tüm cihazlar IoT Edge etkin olur veya hiçbiri olamaz.
    Cihaz etiketleri Sağlanan cihazların cihaz ikizlerine uygulamak istediğiniz etiketleri sağlamak için bu metin kutusunu kullanın.
    İstenen özellikler Sağlanan cihazların cihaz ikizlerine uygulamak istediğiniz tüm istenen özellikleri sağlamak için bu metin kutusunu kullanın.

    Daha fazla bilgi için bkz. IoT Hub'ındaki cihaz ikizlerini kavrama ve kullanma.

  9. Sonraki: Gözden geçirme ve oluşturma’yı seçin.

  10. Gözden Geçir + oluştur sekmesinde tüm değerlerinizi doğrulayın ve Oluştur'u seçin.

Cihaz sağlama kodunu hazırlama ve çalıştırma

Bu bölümde, örnek kodu Cihaz Sağlama Hizmeti örnek bilgilerinizle güncelleştirin. Bir cihazın kimliği doğrulanmışsa, bu bölümde yapılandırılan Cihaz Sağlama Hizmeti örneğine bağlı bir IoT hub'ına atanır.

Bu bölümde Git Bash isteminizi ve Visual Studio IDE'yi kullanacaksınız.

Sağlama cihaz kodunu yapılandırma

Bu bölümde, örnek kodu Cihaz Sağlama Hizmeti örnek bilgilerinizle güncelleştirin.

  1. Azure portalında, Cihaz Sağlama Hizmeti örneğiniz için Genel Bakış sekmesini seçin ve Kimlik Kapsamı değerini not edin.

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

  2. Visual Studio'yu başlatın ve azure-iot-sdk-c git deposunun kökünde oluşturduğunuz dizinde oluşturulan cmake yeni çözüm dosyasını açın. Çözüm dosyası olarak adlandırılır azure_iot_sdks.sln.

  3. Visual Studio için Çözüm Gezgini Provision_Samples prov_dev_client_sample Kaynak Dosyaları'na > gidin ve prov_dev_client_sample.c dosyasını açın.>

  4. id_scope sabitini bulun ve değeri daha önce kopyalamış olduğunuz Kimlik Kapsamı değerinizle değiştirin. Örneğin:

    static const char* id_scope = "0ne00000A0A";
    
  5. Aynı dosyada main() işlevinin tanımını bulun. Değişkenin olarak ayarlandığından hsm_typeSECURE_DEVICE_TYPE_X509 ve diğer hsm_type tüm satırların açıklama satırı olduğundan emin olun. Örneğin:

    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. Değişikliklerinizi kaydedin.

  7. prov_dev_client_sample projesine sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.

Özel HSM saplama kodunu yapılandırma

Gerçek güvenli donanım tabanlı depolama alanıyla etkileşim kurmanın özellikleri, cihaz donanımına bağlı olarak değişir. Bu öğreticide simülasyon cihazları tarafından kullanılan sertifika zincirleri özel HSM saplama kodunda sabit kodlanır. Gerçek dünya senaryosunda, hassas bilgiler için daha iyi güvenlik sağlamak için sertifika zinciri gerçek HSM donanımında depolanır. Bu örnekte kullanılan saplama yöntemlerine benzer yöntemler, bu donanım tabanlı depolamadan gizli dizileri okumak için uygulanır.

HSM donanımı gerekli olmasa da sertifikanın özel anahtarı gibi hassas bilgilerin korunması önerilir. Örnek tarafından gerçek bir HSM çağrıldıysa, özel anahtar kaynak kodda mevcut olmaz. Anahtarın kaynak kodda bulunması, anahtarı kodu görüntüleyebilen herkesin görmesine neden olabilir. Bu yalnızca öğrenme konusunda yardımcı olmak için bu öğreticide gerçekleştirilir.

Özel HSM saplama kodunu, kimliğiyle device-01cihazın kimliğinin benzetimini yapmak üzere güncelleştirmek için:

  1. Visual Studio için Çözüm Gezgini'nde Provision_Samples custom_hsm_example Kaynak Dosyaları'na gidin ve custom_hsm_example.c dosyasını açın.>>

  2. Cihaz sertifikasını COMMON_NAME oluştururken kullandığınız ortak adı kullanarak dize sabitinin dize değerini güncelleştirin.

    static const char* const COMMON_NAME = "device-01";
    
  3. Git Bash terminalinizde aşağıdaki komutu çalıştırarak cihaz sertifikanızın dize sabitini oluşturun:

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

    Bu komutun çıkışını kopyalayın.

  4. Sertifikalarınızı oluşturdıktan sonra ./certs/device-01-full-chain.cert.pem içinde kaydettiğiniz sertifika zincirini kullanarak sabit dizenin dize değerini CERTIFICATE güncelleştirin. Sabit değer için önceki adımda yer alan çıkış sertifikası metnini kullanın.

    Sertifika metninin söz dizimi, Visual Studio tarafından fazladan boşluk veya ayrıştırma yapılmadan aşağıdaki desenle eşleşmelidir.

    // <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. Git Bash'te aşağıdaki komutu çalıştırarak cihazınızın özel anahtarının dize sabitini oluşturun:

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

    Bu komutun çıkışını kopyalayın.

  6. Sabitin dize değerini PRIVATE_KEY cihaz sertifikanızın özel anahtarıyla güncelleştirin. Sabit değer için önceki adımda yer alan çıkış özel anahtar metnini kullanın.

    Özel anahtar metninin söz dizimi, Visual Studio tarafından fazladan boşluk veya ayrıştırma yapılmadan aşağıdaki desenle eşleşmelidir.

    static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n"
    "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n"
        ...
    "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n"
    "-----END RSA PRIVATE KEY-----";
    
  7. Değişikliklerinizi kaydedin.

  8. custom_hsm_example projesine sağ tıklayın ve Oluştur'a tıklayın.

    Önemli

    Sonraki bölümde çözümün geri kalanını derlemeden önce custom_hsm_example projesini oluşturmanız gerekir.

Örneği çalıştırma

  1. Çözümü çalıştırmak için Visual Studio menüsünde Hata Ayıkla>Hata ayıklama olmadan başlat'ı seçin. Projeyi yeniden oluşturmanız istendiğinde, çalıştırmadan önce projeyi yeniden derlemek için Evet'i seçin.

    Aşağıdaki çıkış, simülasyon cihazının device-01 başarıyla önyüklenmesi ve sağlama hizmetine bağlanması örneğidir. Cihaz bir IoT hub'ına atandı ve kaydedildi:

    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. İkinci cihazınızdevice-02 () için özel HSM saptama kodunu yapılandırma'daki adımları yineleyin ve örneği yeniden çalıştırın. Bu cihaz için aşağıdaki değerleri kullanın:

    Açıklama Değer
    Ortak ad "device-02"
    Tam sertifika zinciri ./certs/device-02-full-chain.cert.pem kullanarak metin oluşturma
    Özel anahtar ./private/device-02.key.pem kullanarak metin oluşturma

    Aşağıdaki çıkış, simülasyon cihazının device-02 başarıyla önyüklenmesi ve sağlama hizmetine bağlanması örneğidir. Cihaz bir IoT hub'ına atandı ve kaydedildi:

    Provisioning API Version: 1.8.0
    
    Registering Device
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service: contoso-hub-2.azure-devices.net, deviceId: device-02
    Press enter key to exit:
    

C# örnek kodu, parola korumalı PKCS#12 biçimli bir dosyada (.pfx) depolanan X.509 sertifikalarını kullanacak şekilde ayarlanır. Daha önce oluşturduğunuz tam zincir sertifikaları PEM biçimindedir. Tam zincir sertifikalarını PKCS#12 biçimine dönüştürmek için, Daha önce OpenSSL komutlarını çalıştırdığınız dizinden Git Bash isteminize aşağıdaki komutları girin.

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

Bu bölümün geri kalanında Windows komut isteminizi kullanın.

  1. Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.

  2. Kimlik Kapsamı değerini kopyalayın.

    Screenshot of the ID scope on Azure portal.

  3. Windows komut isteminizde X509Sample dizinine geçin. Bu dizin, önceki bir adımda kopyaladığınız SDK deposunda bulunur: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. X.509 cihaz sağlama örneğini derlemek ve çalıştırmak için aşağıdaki komutu girin. değerini Azure portalından kopyaladığınız Kimlik Kapsamı ile değiştirin <id-scope> . değerini OpenSSL komutlarınızı çalıştırdığınız klasörün yoluyla değiştirin <your-certificate-folder> .

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

    Cihaz DPS'ye bağlanır ve bir IoT hub'ına atanır. Ardından cihaz IoT hub'ına bir telemetri iletisi gönderir. Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:

    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.
    

    Not

    Komut satırında sertifika ve parola belirtmezseniz, sertifika dosyası varsayılan olarak ./certificate.pfx olur ve parolanız istenir.

    TransportType (-t) ve GlobalDeviceEndpoint (-g) değerlerini değiştirmek için ek parametreler geçirilebilir. Parametrelerin tam listesi için yazın dotnet run -- --help.

  5. İkinci cihazınızı kaydetmek için tam zincir sertifikasını kullanarak örneği yeniden çalıştırın.

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

Aşağıdaki adımlarda Windows komut isteminizi kullanın.

  1. Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.

  2. Kimlik Kapsamı değerini kopyalayın.

    Screenshot of the ID scope in the Azure portal.

  3. Windows komut isteminizde örnek dizine gidin ve örneğin ihtiyaç duyduğu paketleri yükleyin. Gösterilen yol, SDK'yı kopyaladığınız konuma göredir.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    
  4. provisioning\device\samples klasöründe register_x509.js açın ve kodu gözden geçirin.

    Örnek, aktarım protokolü olarak varsayılan olarak MQTT'ye sahiptir. Farklı bir protokol kullanmak istiyorsanız, aşağıdaki satırı açıklama satırı yapın ve uygun protokol için satırın açıklamasını kaldırın.

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

    Örnek, DPS kullanarak bir IoT cihazının kimliğini doğrulamak ve sağlamak için beş ortam değişkeni kullanır. Bu ortam değişkenleri şunlardır:

    Değişken adı Açıklama
    PROVISIONING_HOST DPS örneğine bağlanmak için kullanılacak uç nokta. Bu öğretici için genel uç nokta global.azure-devices-provisioning.netolan kullanın.
    PROVISIONING_IDSCOPE DPS örneğinizin Kimlik Kapsamı.
    PROVISIONING_REGISTRATION_ID Cihazınızın kayıt kimliği. Cihaz sertifikasındaki konu ortak adıyla eşleşmelidir.
    CERTIFICATE_FILE Cihazınızın tam zincir sertifika dosyasının yolu.
    KEY_FILE Cihaz sertifikanızın özel anahtar dosyasının yolu.

    ProvisioningDeviceClient.register() yöntemi cihazınızı kaydetmeye çalışır.

  5. Genel cihaz uç noktası ve kimlik kapsamı için ortam değişkenleri ekleyin. değerini Azure portalından kopyaladığınız değerle değiştirin <id-scope> .

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. Cihaz kayıt kimliği için ortam değişkenini ayarlayın. IoT cihazının kayıt kimliği, cihaz sertifikasındaki konu ortak adıyla eşleşmelidir. Bu öğreticide, device-01 cihazın hem konu adı hem de kayıt kimliğidir.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. Daha önce oluşturduğunuz cihaz tam zincir sertifikası ve cihaz özel anahtar dosyaları için ortam değişkenlerini ayarlayın. değerini OpenSSL komutlarınızı çalıştırdığınız klasörün yoluyla değiştirin <your-certificate-folder> .

    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. Örneği çalıştırın ve cihazın başarıyla sağlandığını doğrulayın.

    node register_x509.js
    

    Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=device-01
    Client connected
    send status: MessageEnqueued
    
  9. İkinci cihazınızdevice-02 () için ortam değişkenlerini aşağıdaki tabloya göre güncelleştirin ve örneği yeniden çalıştırın.

    Ortam değişkeni Değer
    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

Aşağıdaki adımlarda Windows komut isteminizi kullanın.

  1. Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.

  2. Kimlik Kapsamını kopyalayın.

    Screenshot of the ID scope in the Azure portal.

  3. Windows komut isteminizde provision_x509.py örneğinin dizinine gidin. Gösterilen yol, SDK'yı kopyaladığınız konuma göredir.

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

    Bu örnek, DPS kullanarak bir IoT cihazının kimliğini doğrulamak ve sağlamak için altı ortam değişkeni kullanır. Bu ortam değişkenleri şunlardır:

    Değişken adı Açıklama
    PROVISIONING_HOST DPS örneğine bağlanmak için kullanılacak uç nokta. Bu öğretici için genel uç nokta global.azure-devices-provisioning.netolan kullanın.
    PROVISIONING_IDSCOPE DPS örneğinizin Kimlik Kapsamı.
    DPS_X509_REGISTRATION_ID Cihazınızın kayıt kimliği. Cihaz sertifikasındaki konu ortak adıyla eşleşmelidir.
    X509_CERT_FILE Cihazınızın tam zincir sertifika dosyasının yolu.
    X509_KEY_FILE Cihaz sertifikanızın özel anahtar dosyasının yolu.
    PASS_PHRASE Özel anahtar dosyasını şifrelemek için kullanılan geçiş tümceciği (kullanılıyorsa). Bu öğretici için gerekli değildir.
  4. Genel cihaz uç noktası ve kimlik kapsamı için ortam değişkenlerini ekleyin. Kimlik kapsamı değişkeni için Azure portalından kopyaladığınız değeri kullanın.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. Cihaz kayıt kimliği için ortam değişkenini ayarlayın. IoT cihazının kayıt kimliği, cihaz sertifikasındaki konu ortak adıyla eşleşmelidir. Bu öğreticide, device-01 cihazın hem konu adı hem de kayıt kimliğidir.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. Daha önce oluşturduğunuz cihaz tam zincir sertifikası ve cihaz özel anahtar dosyaları için ortam değişkenlerini ayarlayın. değerini OpenSSL komutlarınızı çalıştırdığınız klasörün yoluyla değiştirin <your-certificate-folder> .

    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. provision_x509.py kodunu gözden geçirin. Python sürüm 3.7 veya üzerini kullanmıyorsanız, yerine asyncio.run(main())burada belirtilen kod değişikliğini yapın.

  8. Örnek uygulamayı çalıştırın. Örnek, cihazı bir IoT hub'ına sağlayacak olan DPS'ye bağlanır. Cihaz sağlandıktan sonra örnek, IoT hub'ına bazı test iletileri gönderir.

    python provision_x509.py
    

    Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:

    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. İkinci cihazınızdevice-02 () için ortam değişkenlerini aşağıdaki tabloya göre güncelleştirin ve örneği yeniden çalıştırın.

    Ortam değişkeni Değer
    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

Aşağıdaki adımlarda hem Windows komut isteminizi hem de Git Bash isteminizi kullanırsınız.

  1. Azure portalında, Cihaz Sağlama Hizmetiniz için Genel Bakış sekmesini seçin.

  2. Kimlik Kapsamını kopyalayın.

    Screenshot of the ID scope in the Azure portal.

  3. Windows komut isteminizde örnek proje klasörüne gidin. Gösterilen yol, SDK'yı kopyaladığınız konuma göredir

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. Sağlama hizmetini ve X.509 kimlik bilgilerini örnek koda girin. Bu, cihaz kaydından önce simülasyon cihazının kanıtlaması için sağlama sırasında kullanılır.

    1. Dosyayı .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java sık kullandığınız düzenleyicide açın.

    2. Aşağıdaki değerleri güncelleştirin. içinidScope, daha önce kopyaladığınız Kimlik Kapsamını kullanın. Genel uç nokta için Genel cihaz uç noktasını kullanın. Bu uç nokta, her DPS örneği için aynıdır. 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. Örnek varsayılan olarak aktarım protokolü olarak HTTPS kullanır. Protokolü değiştirmek istiyorsanız, aşağıdaki satırı açıklama satırı yapın ve kullanmak istediğiniz protokolün satırının açıklamasını kaldırın.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. Sabit dizenin leafPublicPem değerini cihaz sertifikanızın değeri olan device-01.cert.pem ile güncelleştirin.

      Sertifika metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.

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

      Bu dize değerini el ile güncelleştirmek hataya eğilimli olabilir. Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini leafPublicPem oluşturur ve çıkışa yazar.

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

      Sabit değer için çıkış sertifikası metnini kopyalayıp yapıştırın.

    5. Sabitin dize değerini leafPrivateKey cihaz sertifikanızın şifrelenmemiş özel anahtarı olan unencrypted-device-key.pem ile güncelleştirin.

      Özel anahtar metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.

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

      Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini leafPrivateKey oluşturur ve çıkışa yazar.

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

      Sabit değer için çıkış özel anahtar metnini kopyalayıp yapıştırın.

    6. Kök CA sertifikanızın değeri olan azure-iot-test-only.root.ca.cert.pem sabit bir rootPublicPem dize ekleyin. Sabitin leafPrivateKey hemen arkasına ekleyebilirsiniz.

      Sertifika metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.

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

      Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini rootPublicPem oluşturur ve çıkışa yazar.

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

      Sabit değer için çıkış sertifikası metnini kopyalayıp yapıştırın.

    7. Ara CA sertifikanızın değeri olan azure-iot-test-only.intermediate.cert.pem ile sabit bir intermediatePublicPem dize ekleyin. Önceki sabitin hemen arkasına ekleyebilirsiniz.

      Sertifika metninin söz dizimi, ek boşluk veya karakter içermeyen aşağıdaki desenle eşleşmelidir.

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

      Doğru söz dizimini oluşturmak için aşağıdaki komutu kopyalayıp Git Bash isteminize yapıştırabilir ve ENTER tuşuna basabilirsiniz. Bu komut, dize sabit değeri için söz dizimini intermediatePublicPem oluşturur ve çıkışa yazar.

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

      Sabit değer için çıkış sertifikası metnini kopyalayıp yapıştırın.

    8. yönteminde main aşağıdaki satırları bulun.

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

      Ara ve kök CA sertifikalarınızı imzalama zincirine eklemek için bu iki satırı doğrudan altına ekleyin. İmzalama zinciriniz, DPS ile doğruladığınız bir sertifikaya kadar tüm sertifika zincirini içermelidir.

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

      Not

      İmzalama sertifikalarının eklenmesinin sırası önemlidir. Örnek değiştirilirse başarısız olur.

    9. Değişikliklerinizi kaydedin.

  5. Örneği derleyin ve ardından klasörüne target gidin.

    mvn clean install
    cd target
    
  6. Derleme, klasördeki target .jar dosyasını şu dosya biçiminde verir: provisioning-x509-sample-{version}-with-deps.jar; örneğin: provisioning-x509-sample-1.8.1-with-deps.jar. .jar dosyasını yürütür. Aşağıdaki komutta sürümü değiştirmeniz gerekebilir.

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

    Örnek, cihazı bir IoT hub'ına sağlayan DPS'ye bağlanır. Cihaz sağlandıktan sonra örnek IoT hub'ına bazı test iletileri gönderir.

    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. İkinci cihazınızın sabitlerini (device-02) aşağıdaki tabloya göre güncelleştirin, yeniden derleyin ve örneği yeniden çalıştırın.

    Sabit Kullanılacak dosya
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./private/device-02.key.pem

Cihaz sağlama kaydınızı onaylayın

Cihazlarınızın kayıt ayrıntılarını görmek için kayıt grubunun kayıt kayıtlarını inceleyin:

  1. Azure portalında Cihaz Sağlama Hizmeti örneğine gidin.

  2. Ayarlar menüsünde Kayıtları yönet'i seçin.

  3. Kayıt grupları'nı seçin. Daha önce oluşturduğunuz X.509 kayıt grubu girdisi listede görünmelidir.

  4. Kayıt girişini seçin. Ardından kayıt grubu aracılığıyla kaydedilen cihazları görmek için Kayıt durumu'nun yanındaki Ayrıntılar'ı seçin. Cihazlarınızın her birinin atandığı IoT hub'ı, cihaz kimlikleri ve kayıtlı oldukları tarihler ve saatler listede görünür.

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

  5. Cihazla ilgili diğer ayrıntıları görmek için cihazlardan birini seçebilirsiniz.

IoT hub'ınızdaki cihazları doğrulamak için:

  1. Azure portalında, cihazınızın atandığı IoT hub'ına gidin.

  2. Cihaz yönetimi menüsünde Cihazlar'ı seçin.

  3. Cihazlarınız başarıyla sağlandıysa cihaz kimlikleri, device-01 ve device-02 listede, Durum etkin olarak ayarlı olarak görünmelidir. Cihazlarınızı görmüyorsanız Yenile'yi seçin.

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

Kaynakları temizleme

Bu cihaz istemci örneğini test edip incelemeyi bitirdiğinizde, bu öğretici tarafından oluşturulan tüm kaynakları silmek için aşağıdaki adımları kullanın.

  1. Makinenizde cihaz istemci örnek çıktı penceresini kapatın.

Kayıt grubunuzu silme

  1. Azure portalının sol tarafındaki menüden Tüm kaynaklar'ı seçin.

  2. DPS örneğinizi seçin.

  3. Ayarlar menüsünde Kayıtları yönet'i seçin.

  4. Kayıt grupları sekmesini seçin.

  5. Bu öğretici için kullandığınız kayıt grubunu seçin.

  6. Kayıt ayrıntıları sayfasında Kayıt durumunun yanındaki Ayrıntılar'ıseçin. Ardından Cihaz Kimliği sütun üst bilgisinin yanındaki onay kutusunu seçerek kayıt grubunun tüm kayıt kayıtlarını seçin. Kayıt kayıtlarını silmek için sayfanın üst kısmındaki Sil'i seçin.

    Önemli

    Kayıt grubu silindiğinde, onunla ilişkilendirilmiş kayıt kayıtları silinmez. Bu yalnız bırakılmış kayıtlar, DPS örneğinin kayıt kotasına göre sayılır. Bu nedenle, kayıt grubunun kendisini silmeden önce bir kayıt grubuyla ilişkili tüm kayıt kayıtlarını silmek en iyi yöntemdir.

  7. Kayıtları yönet sayfasına dönün ve Kayıt grupları sekmesinin seçili olduğundan emin olun.

  8. Bu öğretici için kullandığınız kayıt grubunun grup adının yanındaki onay kutusunu seçin.

  9. Sayfanın üst kısmından Sil’i seçin.

KAYıTLı CA sertifikalarını DPS'den silme

  1. DPS örneğinizin sol tarafındaki menüden Sertifikalar'ı seçin. Bu öğreticide karşıya yüklediğiniz ve doğruladığınız her sertifika için sertifikayı seçin ve Sil'i seçip kaldırma seçiminizi onaylayın.

IoT Hub'dan cihaz kayıtlarını silme

  1. Azure portalının sol tarafındaki menüden Tüm kaynaklar'ı seçin.

  2. IoT hub'ınızı seçin.

  3. Explorers menüsünde IoT cihazları'nı seçin.

  4. Bu öğreticide kaydettiğiniz cihazların cihaz kimliğinin yanındaki onay kutusunu seçin. Örneğin, device-01 ve device-02.

  5. Sayfanın üst kısmından Sil’i seçin.

Sonraki adımlar

Bu öğreticide, bir kayıt grubu kullanarak IoT hub'ınıza birden çok X.509 cihazı sağladınız. Ardından, IoT cihazlarını birden çok hub'da sağlamayı öğrenin.