البرنامج التعليمي: تكوين إعدادات تشغيل أجهزة X.509 متعددة باستخدام مجموعات التسجيل

في هذا البرنامج التعليمي، ستتعلم كيفية توفير مجموعات من أجهزة IoT التي تستخدم شهادات X.509 للمصادقة. سيتم تنفيذ نموذج التعليمات البرمجية للجهاز من Azure IoT SDK على جهاز التطوير الخاص بك لمحاكاة توفير أجهزة X.509. على الأجهزة الحقيقية، سيتم نشر التعليمات البرمجية للجهاز وتشغيله من جهاز IoT.

تدعم خدمة توفير جهاز Azure IoT Hub نوعين من التسجيلات لأجهزة التوفير:

  • مجموعات التسجيل: تُستخدم لتسجيل أجهزة متعددة ذات صلة. يوضح هذا البرنامج التعليمي التوفير مع مجموعات التسجيل.
  • التسجيلات الفردية: تُستخدم لتسجيل جهاز واحد.

تدعم خدمة توفير جهاز Azure IoT Hub ثلاثة أشكال من المصادقة لتوفير الأجهزة:

  • شهادات X.509 - يوضح هذا البرنامج التعليمي شهادة X.509
  • وحدة النظام الأساسي الموثوق بها (TPM)
  • مفاتيح متماثلة

في سيناريوهات الإنتاج، يتم استخدام وحدة أمان الأجهزة (HSM) للتخزين الآمن المستند إلى الأجهزة لبيانات الجهاز السرية. يمكن استخدام وحدة أمان الأجهزة مع مفتاح متماثل أو شهادة X.509 أو إثبات TPM لتوفير تخزين آمن للأسرار. يوصى بالتخزين المستند إلى الأجهزة للبيانات السرية للجهاز للمساعدة في حماية المعلومات الحساسة مثل المفتاح الخاص بشهادة جهازك.

في هذا البرنامج التعليمي، يمكنك إكمال الأهداف التالية:

  • إنشاء سلسلة شهادات الثقة لتنظيم مجموعة من الأجهزة باستخدام شهادات X.509.
  • إنشاء تسجيل مجموعة جديد يستخدم سلسلة الشهادات.
  • إعداد بيئة التطوير.
  • توفير الأجهزة باستخدام سلسلة الشهادات باستخدام نموذج التعليمات البرمجية في SDK لجهاز Azure IoT.

المتطلبات الأساسية

المتطلبات الأساسية التالية لبيئة تطوير Windows المستخدمة لمحاكاة الأجهزة. بالنسبة إلى Linux أو macOS، راجع القسم المناسب في إعداد بيئة التطوير في وثائق SDK.

  • تثبيت Visual Studio 2022 مع تمكين حمل العمل "تطوير سطح المكتب مع C++". يتم أيضا دعم Visual Studio 2015 وVisual Studio 2017 وVisual Studio 19.

  • تثبيت أحدث نظام بناء CMake. تأكد من التحقق من الخيار الذي يضيف CMake القابل للتنفيذ إلى المسار الخاص بك.

    هام

    تأكد من تثبيت المتطلبات الأساسية ل Visual Studio (Visual Studio و "تطوير سطح المكتب مع حمل العمل C++" على جهازك قبل بدء CMake التثبيت. بمجرد أن يتم وضع المتطلبات الأساسية، ويتم التحقق من التنزيل، قم بتثبيت نظام بنية CMake. أيضا، كن على علم بأن الإصدارات القديمة من نظام بناء CMake تفشل في إنشاء ملف الحل المستخدم في هذا البرنامج التعليمي. تأكد من استخدام أحدث إصدار من CMake.

المتطلبات الأساسية التالية هي لبيئة تطوير Windows. بالنسبة إلى Linux أو macOS، راجع القسم المناسب في إعداد بيئة التطوير في وثائق SDK.

  • قم بتثبيت .NET SDK 6.0 أو أحدث على جهازك المستند إلى Windows. يمكنك استخدام الأمر التالي للتحقق من الإصدار الخاص بك.

    dotnet --info
    

المتطلبات الأساسية التالية هي لبيئة تطوير Windows. بالنسبة إلى Linux أو macOS، راجع القسم المناسب في إعداد بيئة التطوير في وثائق SDK.

المتطلبات الأساسية التالية هي لبيئة تطوير Windows.

المتطلبات الأساسية التالية هي لبيئة تطوير Windows. بالنسبة إلى Linux أو macOS، راجع القسم المناسب في إعداد بيئة التطوير في وثائق SDK.

  • ‏‏تثبيت آخر إصدار من Git. تأكد من إضافة Git إلى متغيرات البيئة التي يمكن الوصول إليها من نافذة الأمر.

  • تأكد من تثبيت OpenSSL على جهازك. على Windows، يتضمن تثبيت Git تثبيت OpenSSL. يمكنك الوصول إلى OpenSSL من موجه Git Bash. للتحقق من تثبيت OpenSSL، افتح موجه Git Bash وأدخل openssl version.

    إشعار

    ما لم تكن على دراية ب OpenSSL وقمت بتثبيته بالفعل على جهاز Windows، نوصي باستخدام OpenSSL من موجه Git Bash. بدلا من ذلك، يمكنك اختيار تنزيل التعليمات البرمجية المصدر وإنشاء OpenSSL. إذا اخترت إنشاء OpenSSL أو تنزيله، فتأكد من إمكانية الوصول إلى ثنائي OpenSSL في المسار الخاص بك ومن OPENSSL_CNF تعيين متغير البيئة إلى مسار ملف openssl.cnf .

جهز بيئة التطوير الخاصة بك

في هذا القسم، تقوم بإعداد بيئة تطوير تستخدم لإنشاء Azure IoT C SDK. يتضمن SDK نموذج التعليمات البرمجية والأدوات المستخدمة من قبل الأجهزة التي توفر مع DPS.

  1. في مستعرض ويب، انتقل إلى صفحة الإصدار من Azure IoT C SDK.

  2. انسخ اسم العلامة لأحدث إصدار من Azure IoT C SDK، على سبيل المثال: lts_03_2024.

  3. افتح موجه أوامر Windows وقم بتشغيل الأوامر التالية لاستنساخ أحدث إصدار من Azure IoT Device SDK لمستودع C GitHub. استبدل <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
    

    توقع أن تستغرق هذه العملية عدة دقائق لإكمالها.

  4. عند اكتمال العملية، قم بتشغيل الأوامر التالية من دليل azure-iot-sdk-c:

    mkdir cmake
    cd cmake
    
  5. يستخدم نموذج التعليمات البرمجية شهادة X.509 لتوفير المصادقة عبر مصادقة X.509. قم بتشغيل الأمر التالي لإنشاء إصدار من SDK خاص بمنصة التطوير الخاصة بك، والتي تتضمن عميل توفير الجهاز. يتم إنشاء حل Visual Studio للجهاز المحاكي في cmake الدليل.

    استبدل <path بالمسار المطلق إلى C SDK الذي نسخته.

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

    تلميح

    إذا cmake لم يعثر على المحول البرمجي C++، فقد تحصل على أخطاء في الإنشاء أثناء تشغيل الأمر أعلاه. إذا حدث ذلك، فحاول تشغيل الأمر في موجه الأوامر Visual Studio.

  6. عند نجاح البناء، تبدو أسطر الإخراج القليلة الأخيرة مشابهة للإخراج التالي:

    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
    

افتح موجه أوامر Windows وانسخ مستودع Azure IoT SDK ل C#‎ GitHub باستخدام الأمر التالي:

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

افتح موجه أوامر Windows وانسخ Azure IoT SDK Node.js مستودع GitHub باستخدام الأمر التالي:

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

افتح موجه أوامر Windows وانسخ Azure IoT Device SDK لمستودع Python GitHub باستخدام الأمر التالي:

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

إشعار

العينات المستخدمة في هذا البرنامج التعليمي موجودة في فرع v2 من مستودع azure-iot-sdk-python. يتوفر الإصدار 3 من Python SDK للاستخدام في الإصدار التجريبي.

  1. افتح موجه أوامر Windows وانسخ Azure IoT Samples لمستودع Java GitHub باستخدام الأمر التالي:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  2. بادر بالانتقال إلى الدليل azure-iot-sdk-javaالجذر وبناء المشروع لتنزيل جميع الحزم المطلوبة.

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

إنشاء سلسلة شهادات X.509

في هذا القسم، يمكنك إنشاء سلسلة شهادات X.509 من ثلاث شهادات لاختبار كل جهاز باستخدام هذا البرنامج التعليمي. تحتوي الشهادات على التسلسل الهرمي التالي.

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

شهادة الجذر التي تقوم بتحميلها والتحقق من شهادة الجذر باستخدام DPS. يمكن هذا التحقق DPS من الثقة في تلك الشهادة والتحقق من الشهادات الموقعة من قبلها.

الشهادة المتوسطة: من الشائع استخدام الشهادات المتوسطة لتجميع الأجهزة منطقيا حسب خطوط المنتج أو أقسام الشركة أو معايير أخرى. يستخدم هذا البرنامج التعليمي سلسلة شهادات بشهادة وسيطة واحدة، ولكن في سيناريو الإنتاج قد يكون لديك عدة شهادات. يتم توقيع الشهادة المتوسطة في هذه السلسلة بواسطة الشهادة الجذر. يتم توفير هذه الشهادة إلى مجموعة التسجيل التي تم إنشاؤها في DPS. يسمح هذا التكوين بإدارة مجموعة كاملة من الأجهزة التي تحتوي على شهادات جهاز موقعة من قبل نفس الشهادة المتوسطة.

شهادات الجهاز: يتم توقيع شهادات الجهاز (تسمى أحيانا شهادة طرفية) بواسطة الشهادة المتوسطة وتخزينها على الجهاز مع مفتاحه الخاص. من الناحية المثالية سيتم تخزين هذه العناصر الحساسة بشكل آمن مع وحدة أمان الأجهزة. يمكن توقيع شهادات جهاز متعددة بواسطة نفس الشهادة المتوسطة. يقدم كل جهاز شهادته ومفتاحه الخاص، جنبا إلى جنب مع سلسلة الشهادات، عند محاولة التوفير.

لمزيد من المعلومات حول سلاسل الشهادات، راجع شهادة شهادة X.509.

إعداد بيئة X.509 OpenSSL

في هذا القسم، يمكنك إنشاء ملفات تكوين Openssl وبنية الدليل والملفات الأخرى المستخدمة بواسطة أوامر Openssl.

  1. افتح موجه أوامر Git Bash وانتقل إلى مجلد حيث تريد إنشاء شهادات ومفاتيح X.509 لهذا البرنامج التعليمي.

  2. إنشاء ملف تكوين OpenSSL يسمى openssl_root_ca.cnf لشهادة المرجع المصدق الجذر. تحتوي ملفات تكوين OpenSSL على نهج وتعريفات يتم استهلاكها بواسطة أوامر OpenSSL. انسخ النص التالي والصقه في ملف 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. إنشاء ملف تكوين OpenSSL يسمى openssl_device_intermediate_ca.cnf لاستخدامه لشهادات الجهاز والمتوسطة. انسخ النص التالي والصقه في ملف 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. إنشاء بنية الدليل وملف قاعدة البيانات index.txt والتسلسل لملف الرقم التسلسلي التي تستخدمها أوامر OpenSSL في هذا البرنامج التعليمي:

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

إنشاء شهادة CA جذرية

قم بتشغيل الأوامر التالية لإنشاء مفتاح خاص ل CA الجذر وشهادة المرجع المصدق الجذر. يمكنك استخدام هذه الشهادة والمفتاح لتوقيع شهادتك المتوسطة.

  1. في محطة Git Bash الطرفية الخاصة بك، قم بإنشاء مفتاح خاص ل CA الجذر:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
    
  2. إنشاء شهادة المرجع المصدق الجذر:

    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
    

    هام

    لا تكون الشرطة الإضافية المائلة للأمام المكتوبة مع اسم الموضوع (//CN=Azure IoT Hub CA Cert Test Only) ضرورية سوى لتخطي السلسة التي تحتوي على Git في منصات نظام Windows. على أنظمة Linux الأساسية، قم بتوفير اسم الموضوع بشرطة مائلة للأمام واحدة فقط (/CN=Azure IoT Hub CA Cert Test Only).

  3. فحص شهادة المرجع المصدق الجذر:

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

    لاحظ أن المصدر والموضوع هما المرجع المصدق الجذر.

    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)
    

إنشاء شهادة CA وسيطة

قم بتشغيل الأوامر التالية لإنشاء مفتاح CA خاص وسيط وشهادة CA وسيطة. يمكنك استخدام هذه الشهادة والمفتاح لتوقيع شهادات جهازك.

  1. في محطة Git Bash الطرفية الخاصة بك، قم بإنشاء مفتاح خاص متوسط CA:

    openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
    
  2. إنشاء طلب توقيع شهادة CA وسيطة (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
    

    هام

    لا تكون الشرطة الإضافية المائلة للأمام المكتوبة مع اسم الموضوع (//CN=Azure IoT Hub Intermediate Cert Test Only) ضرورية سوى لتخطي السلسة التي تحتوي على Git في منصات نظام Windows. على أنظمة Linux الأساسية، قم بتوفير اسم الموضوع بشرطة مائلة للأمام واحدة (/CN=Azure IoT Hub Intermediate Cert Test Only).

  3. توقيع الشهادة المتوسطة باستخدام شهادة المرجع المصدق الجذر

    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. فحص شهادة المرجع المصدق المتوسطة:

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

    لاحظ أن المصدر هو المرجع المصدق الجذر، والموضوع هو المرجع المصدق المتوسط.

    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)
    

إنشاء شهادات الجهاز

في هذا القسم، يمكنك إنشاء شهادتي جهاز وشهادات السلسلة الكاملة الخاصة بهم. تحتوي شهادة السلسلة الكاملة على شهادة الجهاز وشهادة المرجع المصدق الوسيط وشهادة المرجع المصدق الجذر. يجب أن يقدم الجهاز شهادة السلسلة الكاملة الخاصة به عند تسجيله مع DPS.

  1. إنشاء المفتاح الخاص الأول للجهاز.

    openssl genrsa -out ./private/device-01.key.pem 4096
    
  2. إنشاء شهادة الجهاز CSR.

    يجب تعيين الاسم الشائع للموضوع (CN) لشهادة الجهاز إلى معرف التسجيل الذي يستخدمه جهازك للتسجيل مع DPS. معرف التسجيل هو سلسلة غير حساسة لحالة الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، '.'، ، '_'. ':' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-'). يجب أن يلتزم الاسم الشائع بهذا التنسيق. يدعم DPS معرفات التسجيل التي يصل طولها إلى 128 حرفا؛ ومع ذلك، فإن الحد الأقصى لطول الاسم الشائع للموضوع في شهادة X.509 هو 64 حرفا. لذلك، يقتصر معرف التسجيل على 64 حرفا عند استخدام شهادات X.509. بالنسبة لتسجيلات المجموعة، يتم أيضا استخدام معرف التسجيل كمعرف الجهاز في IoT Hub.

    يتم تعيين الاسم الشائع للموضوع باستخدام المعلمة -subj . في الأمر التالي، يتم تعيين الاسم الشائع إلى 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
    

    هام

    لا تكون الشرطة الإضافية المائلة للأمام المكتوبة مع اسم الموضوع (//CN=device-01) ضرورية سوى لتخطي السلسة التي تحتوي على Git في منصات نظام Windows. على أنظمة Linux الأساسية، قم بتوفير اسم الموضوع بشرطة مائلة للأمام واحدة (/CN=device-01).

  3. توقيع شهادة الجهاز.

    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. فحص شهادة الجهاز:

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

    لاحظ أن المصدر هو المرجع المصدق المتوسط، والموضوع هو معرف تسجيل الجهاز، 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. يجب أن يقدم الجهاز سلسلة الشهادات الكاملة عند المصادقة مع DPS. استخدم الأمر التالي لإنشاء سلسلة الشهادات:

    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. افتح ملف سلسلة الشهادات. /certs/device-01-full-chain.cert.pem، في محرر نصوص لفحصه. يحتوي نص سلسلة الشهادات على السلسلة الكاملة من الشهادات الثلاث. يمكنك استخدام سلسلة الشهادات هذه لاحقا في هذا البرنامج التعليمي لتوفير device-01.

    يحتوي نص السلسلة الكاملة على التنسيق التالي:

    -----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. لإنشاء المفتاح الخاص وشهادة X.509 وشهادة السلسلة الكاملة للجهاز الثاني، انسخ هذا البرنامج النصي والصقه في موجه أوامر Git Bash. لإنشاء شهادات لمزيد من الأجهزة، يمكنك تعديل المتغير المعلن registration_id في بداية البرنامج النصي.

    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
    

    هام

    لا تكون الشرطة الإضافية المائلة للأمام المكتوبة مع اسم الموضوع (//CN=$registration_id) ضرورية سوى لتخطي السلسة التي تحتوي على Git في منصات نظام Windows. على أنظمة Linux الأساسية، قم بتوفير اسم الموضوع بشرطة مائلة للأمام واحدة (/CN=$registration_id).

    إشعار

    يستخدم هذا البرنامج النصي معرف التسجيل باعتباره اسم الملف الأساسي للمفتاح الخاص وملفات الشهادة. إذا كان معرف التسجيل يحتوي على أحرف غير صالحة لاسم الملف، فستحتاج إلى تعديل البرنامج النصي وفقا لذلك.

    تحذير

    يحتوي نص الشهادات على معلومات المفتاح العمومي فقط.

    ومع ذلك، يجب أن يمتلك الجهاز أيضًا الوصول إلى المفتاح الخاص لشهادة الجهاز. هذا ضروري لأن الجهاز يجب أن يقوم بالتحقق باستخدام هذا المفتاح في وقت التشغيل عندما يحاول التوفير. حساسية هذا المفتاح هي أحد الأسباب الرئيسية التي ينصح لأجلها باستخدام التخزين المستند إلى الأجهزة في وحدة أمان الأجهزة الحقيقية للمساعدة في تأمين مفاتيح خاصة.

يمكنك استخدام الملفات التالية في بقية هذا البرنامج التعليمي:

شهادة الملف ‏‏الوصف
شهادة المرجع المصدق الجذر. certs/azure-iot-test-only.root.ca.cert.pem تم تحميله إلى DPS وتم التحقق منه.
شهادة CA متوسطة certs/azure-iot-test-only.intermediate.cert.pem يستخدم لإنشاء مجموعة تسجيل في DPS.
مفتاح خاص ل device-01 private/device-01.key.pem يستخدمه الجهاز للتحقق من ملكية شهادة الجهاز أثناء المصادقة مع DPS.
شهادة سلسلة كاملة ل device-01 certs/device-01-full-chain.cert.pem يقدمه الجهاز للمصادقة والتسجيل مع DPS.
مفتاح خاص ل device-02 private/device-02.key.pem يستخدمه الجهاز للتحقق من ملكية شهادة الجهاز أثناء المصادقة مع DPS.
شهادة سلسلة كاملة للجهاز-02 certs/device-02-full-chain.cert.pem يقدمه الجهاز للمصادقة والتسجيل مع DPS.

تحقق من ملكية الشهادة الجذر

لكي تتمكن DPS من التحقق من صحة سلسلة شهادات الجهاز أثناء المصادقة، يجب تحميل شهادة المرجع المصدق الجذري والتحقق منها. لإضافة شهادة المرجع المصدق الجذر إلى مثيل DPS، اتبع الخطوات التالية:

  1. في مدخل Microsoft Azure، انتقل إلى مثيل خدمة تزويد الأجهزة.

  2. افتح Certificates من القائمة اليسرى ثم حدد Add لإضافة شهادة جديدة.

  3. أدخل اسم عرض مألوف لشهادتك. استعرض للوصول إلى موقع ملف certs/azure-iot-test-only.root.ca.cert.pemشهادة المرجع المصدق الجذر . حدد تحميل.

  4. حدد المربع لتعيين حالة الشهادة إلى تم التحقق منها عند التحميل.

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

  5. حدد حفظ.

  6. تأكد من ظهور شهادتك في علامة تبويب الشهادة بحالة تم التحقق منها.

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

تحديث مخزن الشهادات على الأجهزة المستندة إلى Windows

على الأجهزة غير المستندة إلى Windows، يمكنك تمرير سلسلة الشهادات من التعليمات البرمجية كمخزن الشهادات.

على الأجهزة المستندة إلى Windows، يجب أن تضيف شهادات التوقيع (الجذر والمتوسطة) إلى مخزن شهادات Windows. وإلا، لن يتم نقل شهادات التوقيع إلى DPS بواسطة قناة آمنة باستخدام أمان طبقة النقل (TLS).

تلميح

من الممكن أيضا استخدام OpenSSL بدلا من القناة الآمنة (Schannel) مع C SDK. لمزيد من المعلومات عن استخدام OpenSSL، راجع استخدام OpenSSL في SDK.

لإضافة شهادات التوقيع إلى مخزن الشهادات في الأجهزة المستندة إلى Windows:

  1. في محطة Git Bash الطرفية، قم بتحويل شهادات التوقيع الخاصة بك إلى .pfx كما يلي.

    شهادة المرجع المصدق الجذر:

    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
    

    شهادة CA المتوسطة:

    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، ثم حدد تشغيل. أدخل certmgr.msc وحدد Ok لبدء إدارة الشهادات.

  3. في إدارة الشهادات، ضمن Certificates - Current User، حدد Trusted Root Certification Authorities. ثم في القائمة، حدد إجراء>استيراد كافة المهام.>

  4. اتبع خطوات معالج استيراد الشهادة لاستيراد root.pfx.

    • تأكد أن تبحث بواسطة تبادل المعلومات الشخصية (.pfx)
    • استخدم 1234 ككلمة المرور.
    • ضع الشهادة في مخزن شهادة مسؤولو الشهادة الجذر الموثوق بهم.
  5. كرر خطوات إدارة الشهادات هذه لاستيراد intermediate.pfx.

    • ضع الشهادة في مخزن شهادة مسؤولو الشهادة المتوسطة.

شهادات التوقيع الخاصة بك الآن موثوق بها على الجهاز المستند إلى Windows ويمكن نقل السلسلة الكاملة إلى DPS.

أنشئ مجموعة تسجيل

  1. سجل الدخول إلى مدخل Microsoft Azure وانتقل إلى مثيل خدمة تزويد الأجهزة.

  2. حدد إدارة التسجيلات من قسم الإعدادات من قائمة التنقل.

  3. في أعلى الصفحة، حدد Add enrollment group.

  4. في علامة التبويب Registration + provisioning في صفحة Add enrollment group ، قم بتوفير المعلومات التالية لتكوين تفاصيل مجموعة التسجيل:

    الحقل ‏‏الوصف
    شهاده حدد X.509 شهادات وسيطة كآلية تصديق إذا كنت تريد تحميل شهادات وسيطة لاستخدامها لمجموعة التسجيل هذه فقط، أو حدد شهادات X.509 التي تم تحميلها إلى خدمة تزويد الأجهزة هذه إذا كنت قد قمت بالفعل بتحميل شهادات وسيطة.
    إعدادات شهادة X.509 اعتمادا على أسلوب التصديق الذي اخترته، إما تحميل أو تحديد الشهادات المتوسطة الأساسية والثانوية لمجموعة التسجيل هذه.
    اسم المجموعة أدخل اسما لمجموعة الأجهزة. اسم مجموعة التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، '.'، ، '_'. ':' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-').
    حالة التوفير حدد المربع تمكين هذا التسجيل إذا كنت تريد أن تكون مجموعة التسجيل هذه متاحة لتوفير الأجهزة. قم بإلغاء تحديد هذا المربع إذا كنت تريد تعطيل المجموعة. يمكنك تغيير هذا الإعداد لاحقا.
    نهج إعادة التزويد اختر نهج إعادة توفير يعكس الطريقة التي تريد أن تتعامل بها DPS مع الأجهزة التي تطلب إعادة التزويد. لمزيد من المعلومات، راجع نهج إعادة التوفير

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

  5. حدد Next: IoT hubs.

  6. في علامة التبويب IoT hubs في صفحة Add enrollment group ، قم بتوفير المعلومات التالية لتحديد مراكز IoT التي يمكن لمجموعة التسجيل توفير الأجهزة لها:

    الحقل ‏‏الوصف
    مراكز IoT المستهدفة حدد واحدا أو أكثر من مراكز IoT المرتبطة، أو أضف ارتباطا جديدا إلى مركز IoT. لمعرفة المزيد حول ربط مراكز IoT بمثيل DPS، راجع كيفية ربط مراكز IoT وإدارتها.
    نهج التخصيص إذا حددت أكثر من مركز IoT مرتبط واحد، فحدد الطريقة التي تريد بها تعيين الأجهزة إلى المراكز المختلفة. لمعرفة المزيد حول نهج التخصيص، راجع كيفية استخدام نهج التخصيص.

    إذا حددت مركز IoT مرتبطا واحدا فقط، نوصي باستخدام نهج التوزيع المرجح بالتساوي.

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

  7. حدد Next: Device settings

  8. في علامة التبويب Device settings في صفحة Add enrollment group ، قم بتوفير المعلومات التالية لتحديد كيفية تكوين الأجهزة التي تم توفيرها حديثا:

    الحقل ‏‏الوصف
    IoT Edge تحقق من تمكين IoT Edge على الأجهزة المتوفرة إذا كانت جميع الأجهزة التي تم توفيرها من خلال هذه المجموعة ستقوم بتشغيل Azure IoT Edge. قم بإلغاء تحديد هذا المربع إذا كانت هذه المجموعة مخصصة للأجهزة التي لا تدعم IoT Edge فقط. إما أن تكون جميع الأجهزة في المجموعة ممكنة ل IoT Edge أو لا يمكن أن يكون أي منها ممكنا.
    علامات الجهاز استخدم مربع النص هذا لتوفير أي علامات تريد تطبيقها على توائم الجهاز للأجهزة المتوفرة.
    الخصائص المطلوبة استخدم مربع النص هذا لتوفير أي خصائص مطلوبة تريد تطبيقها على توائم الجهاز للأجهزة المتوفرة.

    لمزيد من المعلومات، راجع فهم واستخدام الجهاز المزدوج في IoT Hub.

  9. حدّد Next: Review + create.

  10. في علامة التبويب Review + create ، تحقق من جميع القيم الخاصة بك ثم حدد Create.

إعداد وتشغيل التعليمات البرمجية لتوفير الجهاز

في هذا المقطع، يمكنك تحديث نموذج التعليمات البرمجية مع معلومات مثيل خدمة تكوين إعدادات تشغيل الجهاز. إذا تمت مصادقة جهاز، يتم تعيينه إلى مركز IoT مرتبط بمثيل خدمة توفير الأجهزة الذي تم تكوينه في هذا القسم.

في هذا القسم، يمكنك استخدام موجه Git Bash وVisual Studio IDE.

تكوين التعليمات البرمجية لإعدادات تشغيل الجهاز

في هذا المقطع، يمكنك تحديث نموذج التعليمات البرمجية مع معلومات مثيل خدمة تكوين إعدادات تشغيل الجهاز.

  1. في مدخل Microsoft Azure، حدد علامة التبويب Overview لمثيل Device Provisioning Service ولاحظ قيمة ID Scope .

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

  2. شغّل Visual Studio وافتح ملف الحل الجديد الذي تمَّ إنشاؤه في cmakeالدليل الذي أنشأته في جذر مخزن azure-lot-sdk-c git. ملف الحل اسمه azure_iot_sdks.sln.

  3. في مستكشف الحلول ل Visual Studio، انتقل إلى Provision_Samples > prov_dev_client_sample > Source Files وافتح prov_dev_client_sample.c.

  4. ابحث عن id_scope الثابت، واستبدل القيمة بقيمة نطاق معرفك التي قمت بنسخها سابقاً. على سبيل المثال:

    static const char* id_scope = "0ne00000A0A";
    
  5. ابحث عن تعريف الدالة main() في نفس الملف. تأكد من hsm_type تعيين المتغير إلى SECURE_DEVICE_TYPE_X509 ومن التعليق على كافة الأسطر الأخرى hsm_type . على سبيل المثال:

    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. احفظ تغييراتك.

  7. انقر بزر الماوس الأيمن فوق مشروع prov_dev_client_sample وحدد تعيين كمشروع بدء التشغيل.

تكوين التعليمات البرمجية المتبقية لوحدة أمان الأجهزة المخصصة

تختلف تفاصيل التفاعل مع التخزين الفعلي الآمن المستند إلى الأجهزة اعتمادا على أجهزة الجهاز. سيتم ترميز سلاسل الشهادات المستخدمة من قبل أجهزة المحاكاة في هذا البرنامج التعليمي في التعليمات البرمجية المخصصة لكعب HSM. في سيناريو العالم الحقيقي، سيتم تخزين سلسلة الشهادات في أجهزة وحدة أمان الأجهزة الفعلية لتوفير أمان أفضل للمعلومات الحساسة. ثم سيتم تطبيق أساليب مشابهة للأساليب المتبقية المستخدمة في هذه العينة لقراءة أسرار التخزين المستندة إلى الأجهزة.

في حين أن أجهزة HSM غير مطلوبة، فمن المستحسن حماية المعلومات الحساسة مثل المفتاح الخاص للشهادة. إذا تم استدعاء HSM فعلي بواسطة العينة، فلن يكون المفتاح الخاص موجودا في التعليمات البرمجية المصدر. يعرض وجود المفتاح في التعليمات البرمجية المصدر المفتاح لأي شخص يمكنه عرض التعليمات البرمجية. يتم ذلك فقط في هذا البرنامج التعليمي للمساعدة في التعلم.

لتحديث رمز كعب HSM المخصص لمحاكاة هوية الجهاز بالمعرف device-01:

  1. في مستكشف الحلول ل Visual Studio، انتقل إلى Provision_Samples > custom_hsm_example > Source Files وافتح custom_hsm_example.c.

  2. تحديث قيمة السلسلة COMMON_NAMEلثابت السلسلة باستخدام الاسم الشائع الذي استخدمته عند إنشاء شهادة الجهاز.

    static const char* const COMMON_NAME = "device-01";
    
  3. في محطة Git Bash الطرفية، قم بتشغيل الأمر التالي لإنشاء ثابت السلسلة لشهادة جهازك:

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

    انسخ إخراج هذا الأمر.

  4. قم بتحديث قيمة السلسلة للسلسلة CERTIFICATE الثابتة باستخدام سلسلة الشهادات التي حفظتها في ./certs/device-01-full-chain.cert.pem بعد إنشاء الشهادات الخاصة بك. استخدم نص شهادة الإخراج من الخطوة السابقة للقيمة الثابتة.

    يجب أن يتطابق بناء جملة نص الشهادة مع النمط التالي مع عدم وجود مسافات إضافية أو تحليل تم بواسطة 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. في Git Bash، قم بتشغيل الأمر التالي لإنشاء ثابت السلسلة للمفتاح الخاص بجهازك:

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

    انسخ إخراج هذا الأمر.

  6. قم بتحديث قيمة السلسلة للثابت PRIVATE_KEY باستخدام المفتاح الخاص لشهادة جهازك. استخدم نص المفتاح الخاص للإخراج من الخطوة السابقة للقيمة الثابتة.

    يجب أن يتطابق بناء جملة نص المفتاح الخاص مع النمط التالي مع عدم وجود مسافات إضافية أو تحليل تم بواسطة 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. احفظ تغييراتك.

  8. انقر بزر الماوس الأيمن فوق مشروع custom_hsm_example وحدد Build.

    هام

    يجب إنشاء مشروع custom_hsm_example قبل إنشاء بقية الحل في القسم التالي.

تشغيل تطبيق العرض التوضيحي

  1. في القائمة Visual Studio حدد Debug> البدء من دون تصحيح الأخطاء لتشغيل الحل. عند المطالبة بإعادة إنشاء المشروع، حدد نعم لإعادة إنشاء المشروع قبل تشغيله.

    الإخراج التالي هو مثال على تشغيل الجهاز device-01 الذي تمت محاكاته بنجاح والاتصال بخدمة التزويد. تم تعيين الجهاز إلى مركز IoT وتم تسجيله:

    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. كرر الخطوات الواردة في تكوين التعليمات البرمجية كعب الروتين المخصص ل HSM لجهازك الثاني (device-02) وقم بتشغيل العينة مرة أخرى. استخدم القيم التالية لهذا الجهاز:

    ‏‏الوصف القيمة‬
    الاسم الشائع "device-02"
    سلسلة الشهادات الكاملة إنشاء النص باستخدام ./certs/device-02-full-chain.cert.pem
    المفتاح الخاص إنشاء النص باستخدام ./private/device-02.key.pem

    الإخراج التالي مثال لجهاز تمت محاكاته device-02والذي يبدأ العمل بنجاح ويتصل بخدمة تكوين إعدادات التشغيل. تم تعيين الجهاز إلى مركز IoT وتم تسجيله:

    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# لاستخدام شهادات X.509 المخزنة في ملف بتنسيق PKCS#12 محمي بكلمة مرور (.pfx). شهادات السلسلة الكاملة التي قمت بإنشائها مسبقا بتنسيق PEM. لتحويل شهادات السلسلة الكاملة إلى تنسيق PKCS#12، أدخل الأوامر التالية في موجه Git Bash من الدليل حيث قمت مسبقا بتشغيل أوامر 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
    

في بقية هذا القسم، استخدم موجه أوامر Windows.

  1. في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.

  2. انسخ قيمة ID Scope.

    Screenshot of the ID scope on Azure portal.

  3. في موجه أوامر Windows، قم بالتغيير إلى دليل X509Sample . يقع هذا الدليل في مستودع SDK الذي نسخته في خطوة سابقة: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.

  4. أدخل الأمر التالي لإنشاء نموذج توفير جهاز X.509 وتشغيله. استبدل <id-scope> بالنطاق المعرف الذي نسخته من مدخل Microsoft Azure. استبدل <your-certificate-folder> بالمسار إلى المجلد حيث قمت بتشغيل أوامر OpenSSL.

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

    يتصل الجهاز ب DPS ويتم تعيينه إلى مركز IoT. ثم يرسل الجهاز رسالة بيانات تتبع الاستخدام إلى مركز IoT. يجب أن ترى مخرجات مماثلة للمثال التالي:

    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.
    

    إشعار

    إذا لم تحدد الشهادة وكلمة المرور في سطر الأوامر، فسيتم تعيين ملف الشهادة افتراضيا إلى ./certificate.pfx وستتم مطالبتك بكلمة المرور الخاصة بك.

    يمكن تمرير معلمات إضافية لتغيير TransportType (-t) و GlobalDeviceEndpoint (-g). للحصول على قائمة كاملة بنوع dotnet run -- --helpالمعلمات .

  5. لتسجيل جهازك الثاني، أعد تشغيل العينة باستخدام شهادة السلسلة الكاملة الخاصة به.

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

في الخطوات التالية، استخدم موجه أوامر Windows.

  1. في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.

  2. انسخ قيمة ID Scope.

    Screenshot of the ID scope in the Azure portal.

  3. في موجه أوامر Windows، انتقل إلى نموذج الدليل، وقم بتثبيت الحزم التي يحتاجها النموذج. المسار المعروض نسبة إلى الموقع الذي نسخت فيه SDK.

    cd .\azure-iot-sdk-node\provisioning\device\samples
    npm install
    
  4. في المجلد provisioning\device\samples ، افتح register_x509.js وراجع التعليمات البرمجية.

    يتم تعيين النموذج افتراضيا إلى MQTT كبروتوكول نقل. إذا كنت ترغب في استخدام بروتوكول مختلف، فعلق على السطر التالي وقم بإلغاء التعليق على السطر للبروتوكول المناسب.

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

    يستخدم النموذج خمسة متغيرات بيئة لمصادقة وتوفير جهاز IoT باستخدام DPS. متغيرات البيئة هذه هي:

    اسم المتغير ‏‏الوصف
    PROVISIONING_HOST نقطة النهاية التي يجب استخدامها للاتصال بمثيل DPS. لهذا البرنامج التعليمي، استخدم نقطة النهاية العمومية، global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE نطاق المعرف لمثيل DPS الخاص بك.
    PROVISIONING_REGISTRATION_ID معرف التسجيل لجهازك. يجب أن يتطابق مع الاسم الشائع للموضوع في شهادة الجهاز.
    CERTIFICATE_FILE المسار إلى ملف شهادة السلسلة الكاملة لجهازك.
    KEY_FILE المسار إلى ملف المفتاح الخاص بشهادة جهازك.

    ProvisioningDeviceClient.register() يحاول الأسلوب تسجيل جهازك.

  5. إضافة متغيرات البيئة لنقطة نهاية الجهاز العمومي ونطاق المعرف. استبدل <id-scope> بالقيمة التي نسختها من مدخل Microsoft Azure.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<id-scope>
    
  6. تعيين متغير البيئة لمعرف تسجيل الجهاز. يجب أن يتطابق معرف التسجيل لجهاز IoT مع الاسم الشائع للموضوع على شهادة الجهاز الخاصة به. بالنسبة لهذا البرنامج التعليمي، device-01 هو اسم الموضوع ومعرف التسجيل للجهاز.

    set PROVISIONING_REGISTRATION_ID=device-01
    
  7. تعيين متغيرات البيئة لشهادة السلسلة الكاملة للجهاز وملفات المفاتيح الخاصة بالجهاز التي أنشأتها مسبقا. استبدل <your-certificate-folder> بالمسار إلى المجلد حيث قمت بتشغيل أوامر OpenSSL.

    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. قم بتشغيل العينة وتحقق من توفير الجهاز بنجاح.

    node register_x509.js
    

    يجب أن ترى مخرجات مماثلة للمثال التالي:

    registration succeeded
    assigned hub=contoso-hub-2.azure-devices.net
    deviceId=device-01
    Client connected
    send status: MessageEnqueued
    
  9. تحديث متغيرات البيئة لجهازك الثاني (device-02) وفقا للجدول التالي وتشغيل العينة مرة أخرى.

    متغير بيئة القيمة‬
    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

في الخطوات التالية، استخدم موجه أوامر Windows.

  1. في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.

  2. انسخ نطاق المعرف.

    Screenshot of the ID scope in the Azure portal.

  3. في موجه أوامر Windows، انتقل إلى دليل نموذج provision_x509.py . المسار المعروض نسبة إلى الموقع الذي نسخت فيه SDK.

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

    يستخدم هذا النموذج سنة متغيرات بيئة لمصادقة وتوفير جهاز IoT باستخدام DPS. متغيرات البيئة هذه هي:

    اسم المتغير ‏‏الوصف
    PROVISIONING_HOST نقطة النهاية التي يجب استخدامها للاتصال بمثيل DPS. لهذا البرنامج التعليمي، استخدم نقطة النهاية العمومية، global.azure-devices-provisioning.net.
    PROVISIONING_IDSCOPE نطاق المعرف لمثيل DPS الخاص بك.
    DPS_X509_REGISTRATION_ID معرف التسجيل لجهازك. يجب أن يتطابق مع الاسم الشائع للموضوع في شهادة الجهاز.
    X509_CERT_FILE المسار إلى ملف شهادة السلسلة الكاملة لجهازك.
    X509_KEY_FILE المسار إلى ملف المفتاح الخاص بشهادة جهازك.
    PASS_PHRASE عبارة المرور المستخدمة لتشفير ملف المفتاح الخاص (إذا تم استخدامه). غير مطلوب لهذا البرنامج التعليمي.
  4. أضف متغيرات البيئة لنقطة نهاية الجهاز العمومي ونطاق المعرف. بالنسبة لمتغير نطاق المعرف، استخدم القيمة التي نسختها من مدخل Microsoft Azure.

    set PROVISIONING_HOST=global.azure-devices-provisioning.net
    set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
    
  5. تعيين متغير البيئة لمعرف تسجيل الجهاز. يجب أن يتطابق معرف التسجيل لجهاز IoT مع الاسم الشائع للموضوع على شهادة الجهاز الخاصة به. بالنسبة لهذا البرنامج التعليمي، device-01 هو اسم الموضوع ومعرف التسجيل للجهاز.

    set DPS_X509_REGISTRATION_ID=device-01
    
  6. تعيين متغيرات البيئة لشهادة السلسلة الكاملة للجهاز وملفات المفاتيح الخاصة بالجهاز التي أنشأتها مسبقا. استبدل <your-certificate-folder> بالمسار إلى المجلد حيث قمت بتشغيل أوامر OpenSSL.

    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. إذا لم تكن تستخدم Python الإصدار 3.7 أو أحدث، اجعل تغيير التعليمة البرمجية المذكور هنا ليحل محل asyncio.run(main()).

  8. قم بتشغيل العينة. يتصل النموذج ب DPS، والذي سيوفر الجهاز إلى مركز IoT. بعد توفير الجهاز، يرسل النموذج بعض رسائل الاختبار إلى مركز IoT.

    python provision_x509.py
    

    يجب أن ترى مخرجات مماثلة للمثال التالي:

    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. تحديث متغيرات البيئة لجهازك الثاني (device-02) وفقا للجدول التالي وتشغيل العينة مرة أخرى.

    متغير بيئة القيمة‬
    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

في الخطوات التالية، يمكنك استخدام كل من موجه أوامر Windows ومطالبة Git Bash.

  1. في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.

  2. انسخ نطاق المعرف.

    Screenshot of the ID scope in the Azure portal.

  3. في موجه أوامر Windows، انتقل إلى مجلد نموذج المشروع. المسار المعروض مرتبط بالموقع الذي نسخت فيه SDK

    cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
    
  4. أدخل خدمة التزويد ومعلومات هوية X.509 في نموذج التعليمات البرمجية. يتم استخدام هذا أثناء التزويد، لإثبات جهاز المحاكاة، قبل تسجيل الجهاز.

    1. افتح الملف .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java في المحرر المفضل لديك.

    2. تحديث القيم التالية. بالنسبة إلى idScope، استخدم نطاق المعرف الذي نسخته مسبقا. بالنسبة لنقطة النهاية العمومية ، استخدم نقطة نهاية الجهاز العمومي. نقطة النهاية هذه هي نفسها لكل مثيل 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. العينة افتراضيا لاستخدام HTTPS كبروتوكول نقل. إذا كنت ترغب في تغيير البروتوكول، فقم بالتعليق خارج السطر التالي، وقم بإلغاء التعليق على السطر الخاص بالبروتوكول الذي تريد استخدامه.

      private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
      
    4. قم بتحديث قيمة leafPublicPem السلسلة الثابتة بقيمة شهادة جهازك، device-01.cert.pem.

      يجب أن يتطابق بناء جملة نص الشهادة مع النمط التالي بدون مسافات أو أحرف إضافية.

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

      يمكن أن يكون تحديث قيمة السلسلة هذه يدويا عرضة للخطأ. لإنشاء بناء الجملة المناسب، يمكنك نسخ الأمر التالي ولصقه في موجه Git Bash، واضغط على ENTER. ينشئ هذا الأمر بناء الجملة للقيمة leafPublicPem الثابتة للسلسلة ويكتبها في الإخراج.

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

      انسخ والصق نص شهادة الإخراج للقيمة الثابتة.

    5. قم بتحديث قيمة leafPrivateKey سلسلة الثابت باستخدام المفتاح الخاص غير المشفرة لشهادة جهازك، unencrypted-device-key.pem.

      يجب أن يتطابق بناء جملة نص المفتاح الخاص مع النمط التالي بدون مسافات أو أحرف إضافية.

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

      لإنشاء بناء الجملة المناسب، يمكنك نسخ الأمر التالي ولصقه في موجه Git Bash، واضغط على ENTER. ينشئ هذا الأمر بناء الجملة للقيمة leafPrivateKey الثابتة للسلسلة ويكتبها في الإخراج.

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

      انسخ والصق نص المفتاح الخاص للإخراج للقيمة الثابتة.

    6. أضف سلسلة rootPublicPem ثابتة بقيمة شهادة المرجع المصدق الجذر، azure-iot-test-only.root.ca.cert.pem. يمكنك إضافته بعد leafPrivateKey الثابت.

      يجب أن يتطابق بناء جملة نص الشهادة مع النمط التالي بدون مسافات أو أحرف إضافية.

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

      لإنشاء بناء الجملة المناسب، يمكنك نسخ الأمر التالي ولصقه في موجه Git Bash، واضغط على ENTER. ينشئ هذا الأمر بناء الجملة للقيمة rootPublicPem الثابتة للسلسلة ويكتبها في الإخراج.

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

      انسخ والصق نص شهادة الإخراج للقيمة الثابتة.

    7. أضف سلسلة intermediatePublicPem ثابتة بقيمة شهادة المرجع المصدق الوسيطة، azure-iot-test-only.intermediate.cert.pem. يمكنك إضافته بعد الثابت السابق.

      يجب أن يتطابق بناء جملة نص الشهادة مع النمط التالي بدون مسافات أو أحرف إضافية.

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

      لإنشاء بناء الجملة المناسب، يمكنك نسخ الأمر التالي ولصقه في موجه Git Bash، واضغط على ENTER. ينشئ هذا الأمر بناء الجملة للقيمة intermediatePublicPem الثابتة للسلسلة ويكتبها في الإخراج.

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

      انسخ والصق نص شهادة الإخراج للقيمة الثابتة.

    8. ابحث عن الأسطر التالية في main الأسلوب .

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

      أضف هذين السطرين مباشرة أسفلهما لإضافة شهادات المرجع المصدق المتوسطة والجذرية إلى سلسلة التوقيع. يجب أن تتضمن سلسلة التوقيع سلسلة الشهادات بأكملها حتى وتضمين شهادة قمت بالتحقق منها باستخدام DPS.

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

      إشعار

      الترتيب الذي تتم به إضافة شهادات التوقيع مهم. ستفشل العينة إذا تم تغييرها.

    9. احفظ تغييراتك.

  5. أنشئ النموذج، ثم انتقل إلى target المجلد.

    mvn clean install
    cd target
    
  6. مخرجات البنية .jar الملف في target المجلد بتنسيق الملف التالي: provisioning-x509-sample-{version}-with-deps.jar؛ على سبيل المثال: provisioning-x509-sample-1.8.1-with-deps.jar. تنفيذ ملف .jar. قد تحتاج إلى استبدال الإصدار في الأمر التالي.

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

    تتصل العينة ب DPS، والتي توفر الجهاز إلى مركز IoT. بعد توفير الجهاز، سيرسل النموذج بعض رسائل الاختبار إلى مركز 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. قم بتحديث الثوابت لجهازك الثاني (device-02) وفقا للجدول التالي، وإعادة إنشاء النموذج وتشغيله مرة أخرى.

    ثابت الملف المراد استخدامه
    leafPublicPem ./certs/device-02.cert.pem
    leafPrivateKey ./private/device-02.key.pem

تأكد من تسجيل توفير جهازك

افحص سجلات التسجيل لمجموعة التسجيل للاطلاع على تفاصيل التسجيل لأجهزتك:

  1. في مدخل Microsoft Azure، انتقل إلى مثيل خدمة تزويد الأجهزة.

  2. في قائمة الإعدادات، حدد ⁧⁩"إدارة التسجيلات"⁧⁩.

  3. حدد Enrollment groups. يجب أن يظهر إدخال مجموعة التسجيل X.509 الذي قمت بإنشائه مسبقا في القائمة.

  4. حدد إدخال التسجيل. ثم حدد Details بجوار حالة التسجيل لمشاهدة الأجهزة التي تم تسجيلها من خلال مجموعة التسجيل. يظهر مركز IoT الذي تم تعيين كل جهاز من أجهزتك إليه ومعرفات أجهزته والتواريخ والأوقات التي تم تسجيلها فيها في القائمة.

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

  5. يمكنك تحديد أحد الأجهزة للاطلاع على مزيد من التفاصيل لهذا الجهاز.

للتحقق من الأجهزة على مركز IoT الخاص بك:

  1. في مدخل Microsoft Azure، انتقل إلى مركز IoT الذي تم تعيين جهازك إليه.

  2. في قائمة إدارة الأجهزة، حدد الأجهزة.

  3. إذا تم توفير أجهزتك بنجاح، يجب أن تظهر معرفات أجهزتهم، device-01 وdevice-02، في القائمة، مع تعيين الحالة على أنها ممكنة. إذا لم تتمكن من رؤية أجهزتك، فحدد تحديث.

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

تنظيف الموارد

عند الانتهاء من اختبار واستكشاف نموذج عميل الجهاز هذا، استخدم الخطوات التالية لحذف كافة الموارد التي تم إنشاؤها بواسطة هذا البرنامج التعليمي.

  1. أغلق نموذج إطار إخراج نموذج الجهاز على الجهاز.

حذف مجموعة التسجيل

  1. في مدخل Azure، حدد All resources في القائمة اليسرى.

  2. حدد مثيل DPS الخاص بك.

  3. في قائمة الإعدادات، حدد ⁧⁩"إدارة التسجيلات"⁧⁩.

  4. حدد علامة التبويب Enrollment groups.

  5. حدد مجموعة التسجيل التي استخدمتها لهذا البرنامج التعليمي.

  6. في صفحة Enrollment details ، حدد Details بجوار حالة التسجيل. ثم حدد خانة الاختيار بجوار رأس عمود معرف الجهاز لتحديد جميع سجلات التسجيل لمجموعة التسجيل. حدد حذف في أعلى الصفحة لحذف سجلات التسجيل.

    هام

    لا يؤدي حذف مجموعة تسجيل إلى حذف سجلات التسجيل المقترنة بها. سيتم حساب هذه السجلات المعزولة مقابل الحصة النسبية للتسجيلات لمثيل DPS. لهذا السبب، من الأفضل حذف جميع سجلات التسجيل المقترنة بمجموعة تسجيل قبل حذف مجموعة التسجيل نفسها.

  7. ارجع إلى صفحة إدارة التسجيلات وتأكد من تحديد علامة التبويب مجموعات التسجيل.

  8. حدد خانة الاختيار بجوار اسم المجموعة لمجموعة التسجيل التي استخدمتها لهذا البرنامج التعليمي.

  9. في الجزء العلوي من الصفحة، حدد حذف.

حذف شهادات CA المسجلة من DPS

  1. حدد Certificates من القائمة اليسرى لمثيل DPS. لكل شهادة قمت بتحميلها والتحقق منها في هذا البرنامج التعليمي، حدد الشهادة وحدد حذف وأكد اختيارك لإزالتها.

حذف تسجيلات الجهاز من IoT Hub

  1. في مدخل Azure، حدد All resources في القائمة اليسرى.

  2. حدد مركز IoT.

  3. في قائمة Explorers، حدد IoT devices.

  4. حدد خانة الاختيار بجوار معرف الجهاز للأجهزة التي سجلتها في هذا البرنامج التعليمي. على سبيل المثال، device-01 و device-02.

  5. في الجزء العلوي من الصفحة، حدد حذف.

الخطوات التالية

في هذا البرنامج التعليمي، قمت بتوفير أجهزة X.509 متعددة إلى مركز IoT الخاص بك باستخدام مجموعة تسجيل. بعد ذلك، تعرف على كيفية توفير أجهزة IoT عبر مراكز متعددة.