البرنامج التعليمي: تكوين إعدادات تشغيل أجهزة 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.
المتطلبات الأساسية
في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
إكمال الخطوات في إعداد خدمة تزويد الأجهزة بمركز IoT باستخدام مدخل Microsoft Azure.
المتطلبات الأساسية التالية لبيئة تطوير 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.
- قم بتثبيت Node.js v4.0 أو إصدار أحدث على جهازك.
المتطلبات الأساسية التالية هي لبيئة تطوير Windows.
- Python 3.6 أو إصدار أحدث على جهازك.
المتطلبات الأساسية التالية هي لبيئة تطوير Windows. بالنسبة إلى Linux أو macOS، راجع القسم المناسب في إعداد بيئة التطوير في وثائق SDK.
تثبيت Java SE Development Kit 8 أو إصدار أحدث على جهازك.
تنزيل وتثبيت Maven.
تثبيت آخر إصدار من 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.
في مستعرض ويب، انتقل إلى صفحة الإصدار من Azure IoT C SDK.
انسخ اسم العلامة لأحدث إصدار من Azure IoT C SDK، على سبيل المثال:
lts_03_2024
.افتح موجه أوامر 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
توقع أن تستغرق هذه العملية عدة دقائق لإكمالها.
عند اكتمال العملية، قم بتشغيل الأوامر التالية من دليل
azure-iot-sdk-c
:mkdir cmake cd cmake
يستخدم نموذج التعليمات البرمجية شهادة 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.عند نجاح البناء، تبدو أسطر الإخراج القليلة الأخيرة مشابهة للإخراج التالي:
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 للاستخدام في الإصدار التجريبي.
افتح موجه أوامر Windows وانسخ Azure IoT Samples لمستودع Java GitHub باستخدام الأمر التالي:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
بادر بالانتقال إلى الدليل
azure-iot-sdk-java
الجذر وبناء المشروع لتنزيل جميع الحزم المطلوبة.cd azure-iot-sdk-java mvn install -DskipTests=true
إنشاء سلسلة شهادات X.509
في هذا القسم، يمكنك إنشاء سلسلة شهادات X.509 من ثلاث شهادات لاختبار كل جهاز باستخدام هذا البرنامج التعليمي. تحتوي الشهادات على التسلسل الهرمي التالي.
شهادة الجذر التي تقوم بتحميلها والتحقق من شهادة الجذر باستخدام DPS. يمكن هذا التحقق DPS من الثقة في تلك الشهادة والتحقق من الشهادات الموقعة من قبلها.
الشهادة المتوسطة: من الشائع استخدام الشهادات المتوسطة لتجميع الأجهزة منطقيا حسب خطوط المنتج أو أقسام الشركة أو معايير أخرى. يستخدم هذا البرنامج التعليمي سلسلة شهادات بشهادة وسيطة واحدة، ولكن في سيناريو الإنتاج قد يكون لديك عدة شهادات. يتم توقيع الشهادة المتوسطة في هذه السلسلة بواسطة الشهادة الجذر. يتم توفير هذه الشهادة إلى مجموعة التسجيل التي تم إنشاؤها في DPS. يسمح هذا التكوين بإدارة مجموعة كاملة من الأجهزة التي تحتوي على شهادات جهاز موقعة من قبل نفس الشهادة المتوسطة.
شهادات الجهاز: يتم توقيع شهادات الجهاز (تسمى أحيانا شهادة طرفية) بواسطة الشهادة المتوسطة وتخزينها على الجهاز مع مفتاحه الخاص. من الناحية المثالية سيتم تخزين هذه العناصر الحساسة بشكل آمن مع وحدة أمان الأجهزة. يمكن توقيع شهادات جهاز متعددة بواسطة نفس الشهادة المتوسطة. يقدم كل جهاز شهادته ومفتاحه الخاص، جنبا إلى جنب مع سلسلة الشهادات، عند محاولة التوفير.
لمزيد من المعلومات حول سلاسل الشهادات، راجع شهادة شهادة X.509.
إعداد بيئة X.509 OpenSSL
في هذا القسم، يمكنك إنشاء ملفات تكوين Openssl وبنية الدليل والملفات الأخرى المستخدمة بواسطة أوامر Openssl.
افتح موجه أوامر Git Bash وانتقل إلى مجلد حيث تريد إنشاء شهادات ومفاتيح X.509 لهذا البرنامج التعليمي.
إنشاء ملف تكوين 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
إنشاء ملف تكوين 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
إنشاء بنية الدليل وملف قاعدة البيانات index.txt والتسلسل لملف الرقم التسلسلي التي تستخدمها أوامر OpenSSL في هذا البرنامج التعليمي:
mkdir certs csr newcerts private touch index.txt openssl rand -hex 16 > serial
إنشاء شهادة CA جذرية
قم بتشغيل الأوامر التالية لإنشاء مفتاح خاص ل CA الجذر وشهادة المرجع المصدق الجذر. يمكنك استخدام هذه الشهادة والمفتاح لتوقيع شهادتك المتوسطة.
في محطة Git Bash الطرفية الخاصة بك، قم بإنشاء مفتاح خاص ل CA الجذر:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.root.ca.key.pem 4096
إنشاء شهادة المرجع المصدق الجذر:
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
).فحص شهادة المرجع المصدق الجذر:
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 وسيطة. يمكنك استخدام هذه الشهادة والمفتاح لتوقيع شهادات جهازك.
في محطة Git Bash الطرفية الخاصة بك، قم بإنشاء مفتاح خاص متوسط CA:
openssl genrsa -aes256 -passout pass:1234 -out ./private/azure-iot-test-only.intermediate.key.pem 4096
إنشاء طلب توقيع شهادة 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
).توقيع الشهادة المتوسطة باستخدام شهادة المرجع المصدق الجذر
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
فحص شهادة المرجع المصدق المتوسطة:
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.
إنشاء المفتاح الخاص الأول للجهاز.
openssl genrsa -out ./private/device-01.key.pem 4096
إنشاء شهادة الجهاز 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
).توقيع شهادة الجهاز.
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
فحص شهادة الجهاز:
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)
يجب أن يقدم الجهاز سلسلة الشهادات الكاملة عند المصادقة مع 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
افتح ملف سلسلة الشهادات. /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-----
لإنشاء المفتاح الخاص وشهادة 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، اتبع الخطوات التالية:
افتح Certificates من القائمة اليسرى ثم حدد Add لإضافة شهادة جديدة.
أدخل اسم عرض مألوف لشهادتك. استعرض للوصول إلى موقع ملف
certs/azure-iot-test-only.root.ca.cert.pem
شهادة المرجع المصدق الجذر . حدد تحميل.حدد المربع لتعيين حالة الشهادة إلى تم التحقق منها عند التحميل.
حدد حفظ.
تأكد من ظهور شهادتك في علامة تبويب الشهادة بحالة تم التحقق منها.
تحديث مخزن الشهادات على الأجهزة المستندة إلى Windows
على الأجهزة غير المستندة إلى Windows، يمكنك تمرير سلسلة الشهادات من التعليمات البرمجية كمخزن الشهادات.
على الأجهزة المستندة إلى Windows، يجب أن تضيف شهادات التوقيع (الجذر والمتوسطة) إلى مخزن شهادات Windows. وإلا، لن يتم نقل شهادات التوقيع إلى DPS بواسطة قناة آمنة باستخدام أمان طبقة النقل (TLS).
تلميح
من الممكن أيضا استخدام OpenSSL بدلا من القناة الآمنة (Schannel) مع C SDK. لمزيد من المعلومات عن استخدام OpenSSL، راجع استخدام OpenSSL في SDK.
لإضافة شهادات التوقيع إلى مخزن الشهادات في الأجهزة المستندة إلى Windows:
في محطة 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
انقر بزر الماوس الأيمن فوق زر البدء في Windows، ثم حدد تشغيل. أدخل certmgr.msc وحدد Ok لبدء إدارة الشهادات.
في إدارة الشهادات، ضمن Certificates - Current User، حدد Trusted Root Certification Authorities. ثم في القائمة، حدد إجراء>استيراد كافة المهام.>
اتبع خطوات معالج استيراد الشهادة لاستيراد
root.pfx
.- تأكد أن تبحث بواسطة تبادل المعلومات الشخصية (.pfx)
- استخدم
1234
ككلمة المرور. - ضع الشهادة في مخزن شهادة مسؤولو الشهادة الجذر الموثوق بهم.
كرر خطوات إدارة الشهادات هذه لاستيراد
intermediate.pfx
.- ضع الشهادة في مخزن شهادة مسؤولو الشهادة المتوسطة.
شهادات التوقيع الخاصة بك الآن موثوق بها على الجهاز المستند إلى Windows ويمكن نقل السلسلة الكاملة إلى DPS.
أنشئ مجموعة تسجيل
سجل الدخول إلى مدخل Microsoft Azure وانتقل إلى مثيل خدمة تزويد الأجهزة.
حدد إدارة التسجيلات من قسم الإعدادات في قائمة التنقل.
في أعلى الصفحة، حدد Add enrollment group.
في علامة التبويب Registration + provisioning في صفحة Add enrollment group ، قم بتوفير المعلومات التالية لتكوين تفاصيل مجموعة التسجيل:
الحقل الوصف شهاده حدد X.509 شهادات وسيطة كآلية تصديق إذا كنت تريد تحميل شهادات وسيطة لاستخدامها لمجموعة التسجيل هذه فقط، أو حدد شهادات X.509 التي تم تحميلها إلى خدمة تزويد الأجهزة هذه إذا كنت قد قمت بالفعل بتحميل شهادات وسيطة. إعدادات شهادة X.509 اعتمادا على أسلوب التصديق الذي اخترته، إما تحميل أو تحديد الشهادات المتوسطة الأساسية والثانوية لمجموعة التسجيل هذه. اسم المجموعة أدخل اسما لمجموعة الأجهزة. اسم مجموعة التسجيل عبارة عن سلسلة غير حساسة لحالة الأحرف (يصل طولها إلى 128 حرفا) من الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'
،'.'
، ،'_'
.':'
يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-'
).حالة التوفير حدد المربع تمكين هذا التسجيل إذا كنت تريد أن تكون مجموعة التسجيل هذه متاحة لتوفير الأجهزة. قم بإلغاء تحديد هذا المربع إذا كنت تريد تعطيل المجموعة. يمكنك تغيير هذا الإعداد لاحقا. نهج إعادة التزويد اختر نهج إعادة توفير يعكس الطريقة التي تريد أن تتعامل بها DPS مع الأجهزة التي تطلب إعادة التزويد. لمزيد من المعلومات، راجع نهج إعادة التوفير حدد Next: IoT hubs.
في علامة التبويب IoT hubs في صفحة Add enrollment group ، قم بتوفير المعلومات التالية لتحديد مراكز IoT التي يمكن لمجموعة التسجيل توفير الأجهزة لها:
الحقل الوصف مراكز IoT المستهدفة حدد واحدا أو أكثر من مراكز IoT المرتبطة، أو أضف ارتباطا جديدا إلى مركز IoT. لمعرفة المزيد حول ربط مراكز IoT بمثيل DPS، راجع كيفية ربط مراكز IoT وإدارتها. نهج التخصيص إذا حددت أكثر من مركز IoT مرتبط واحد، فحدد الطريقة التي تريد بها تعيين الأجهزة إلى المراكز المختلفة. لمعرفة المزيد حول نهج التخصيص، راجع كيفية استخدام نهج التخصيص.
إذا حددت مركز IoT مرتبطا واحدا فقط، نوصي باستخدام نهج التوزيع المرجح بالتساوي.حدد Next: Device settings
في علامة التبويب Device settings في صفحة Add enrollment group ، قم بتوفير المعلومات التالية لتحديد كيفية تكوين الأجهزة التي تم توفيرها حديثا:
الحقل الوصف IoT Edge تحقق من تمكين IoT Edge على الأجهزة المتوفرة إذا كانت جميع الأجهزة التي تم توفيرها من خلال هذه المجموعة ستقوم بتشغيل Azure IoT Edge. قم بإلغاء تحديد هذا المربع إذا كانت هذه المجموعة مخصصة للأجهزة التي لا تدعم IoT Edge فقط. إما أن تكون جميع الأجهزة في المجموعة ممكنة ل IoT Edge أو لا يمكن أن يكون أي منها ممكنا. علامات الجهاز استخدم مربع النص هذا لتوفير أي علامات تريد تطبيقها على توائم الجهاز للأجهزة المتوفرة. الخصائص المطلوبة استخدم مربع النص هذا لتوفير أي خصائص مطلوبة تريد تطبيقها على توائم الجهاز للأجهزة المتوفرة. لمزيد من المعلومات، راجع فهم واستخدام الجهاز المزدوج في IoT Hub.
حدّد Next: Review + create.
في علامة التبويب Review + create ، تحقق من جميع القيم الخاصة بك ثم حدد Create.
إعداد وتشغيل التعليمات البرمجية لتوفير الجهاز
في هذا المقطع، يمكنك تحديث نموذج التعليمات البرمجية مع معلومات مثيل خدمة تكوين إعدادات تشغيل الجهاز. إذا تمت مصادقة جهاز، يتم تعيينه إلى مركز IoT مرتبط بمثيل خدمة توفير الأجهزة الذي تم تكوينه في هذا القسم.
في هذا القسم، يمكنك استخدام موجه Git Bash وVisual Studio IDE.
تكوين التعليمات البرمجية لإعدادات تشغيل الجهاز
في هذا المقطع، يمكنك تحديث نموذج التعليمات البرمجية مع معلومات مثيل خدمة تكوين إعدادات تشغيل الجهاز.
في مدخل Microsoft Azure، حدد علامة التبويب Overview لمثيل Device Provisioning Service ولاحظ قيمة ID Scope .
شغّل Visual Studio وافتح ملف الحل الجديد الذي تمَّ إنشاؤه في
cmake
الدليل الذي أنشأته في جذر مخزن azure-lot-sdk-c git. ملف الحل اسمهazure_iot_sdks.sln
.في مستكشف الحلول ل Visual Studio، انتقل إلى Provision_Samples > prov_dev_client_sample > Source Files وافتح prov_dev_client_sample.c.
ابحث عن
id_scope
الثابت، واستبدل القيمة بقيمة نطاق معرفك التي قمت بنسخها سابقاً. على سبيل المثال:static const char* id_scope = "0ne00000A0A";
ابحث عن تعريف الدالة
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;
احفظ تغييراتك.
انقر بزر الماوس الأيمن فوق مشروع prov_dev_client_sample وحدد تعيين كمشروع بدء التشغيل.
تكوين التعليمات البرمجية المتبقية لوحدة أمان الأجهزة المخصصة
تختلف تفاصيل التفاعل مع التخزين الفعلي الآمن المستند إلى الأجهزة اعتمادا على أجهزة الجهاز. سيتم ترميز سلاسل الشهادات المستخدمة من قبل أجهزة المحاكاة في هذا البرنامج التعليمي في التعليمات البرمجية المخصصة لكعب HSM. في سيناريو العالم الحقيقي، سيتم تخزين سلسلة الشهادات في أجهزة وحدة أمان الأجهزة الفعلية لتوفير أمان أفضل للمعلومات الحساسة. ثم سيتم تطبيق أساليب مشابهة للأساليب المتبقية المستخدمة في هذه العينة لقراءة أسرار التخزين المستندة إلى الأجهزة.
في حين أن أجهزة HSM غير مطلوبة، فمن المستحسن حماية المعلومات الحساسة مثل المفتاح الخاص للشهادة. إذا تم استدعاء HSM فعلي بواسطة العينة، فلن يكون المفتاح الخاص موجودا في التعليمات البرمجية المصدر. يعرض وجود المفتاح في التعليمات البرمجية المصدر المفتاح لأي شخص يمكنه عرض التعليمات البرمجية. يتم ذلك فقط في هذا البرنامج التعليمي للمساعدة في التعلم.
لتحديث رمز كعب HSM المخصص لمحاكاة هوية الجهاز بالمعرف device-01
:
في مستكشف الحلول ل Visual Studio، انتقل إلى Provision_Samples > custom_hsm_example > Source Files وافتح custom_hsm_example.c.
تحديث قيمة السلسلة
COMMON_NAME
لثابت السلسلة باستخدام الاسم الشائع الذي استخدمته عند إنشاء شهادة الجهاز.static const char* const COMMON_NAME = "device-01";
في محطة Git Bash الطرفية، قم بتشغيل الأمر التالي لإنشاء ثابت السلسلة لشهادة جهازك:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./certs/device-01-full-chain.cert.pem
انسخ إخراج هذا الأمر.
قم بتحديث قيمة السلسلة للسلسلة
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-----";
في Git Bash، قم بتشغيل الأمر التالي لإنشاء ثابت السلسلة للمفتاح الخاص بجهازك:
sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' ./private/device-01.key.pem
انسخ إخراج هذا الأمر.
قم بتحديث قيمة السلسلة للثابت
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-----";
احفظ تغييراتك.
انقر بزر الماوس الأيمن فوق مشروع custom_hsm_example وحدد Build.
هام
يجب إنشاء مشروع custom_hsm_example قبل إنشاء بقية الحل في القسم التالي.
تشغيل تطبيق العرض التوضيحي
في القائمة 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:
كرر الخطوات الواردة في تكوين التعليمات البرمجية كعب الروتين المخصص ل 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.
في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.
انسخ قيمة ID Scope.
في موجه أوامر Windows، قم بالتغيير إلى دليل X509Sample . يقع هذا الدليل في مستودع SDK الذي نسخته في خطوة سابقة: .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample.
أدخل الأمر التالي لإنشاء نموذج توفير جهاز 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
المعلمات .لتسجيل جهازك الثاني، أعد تشغيل العينة باستخدام شهادة السلسلة الكاملة الخاصة به.
dotnet run -- -s <id-scope> -c <your-certificate-folder>\certs\device-02-full-chain.cert.pfx -p 1234
في الخطوات التالية، استخدم موجه أوامر Windows.
في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.
انسخ قيمة ID Scope.
في موجه أوامر Windows، انتقل إلى نموذج الدليل، وقم بتثبيت الحزم التي يحتاجها النموذج. المسار المعروض نسبة إلى الموقع الذي نسخت فيه SDK.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
في المجلد 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()
يحاول الأسلوب تسجيل جهازك.إضافة متغيرات البيئة لنقطة نهاية الجهاز العمومي ونطاق المعرف. استبدل
<id-scope>
بالقيمة التي نسختها من مدخل Microsoft Azure.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
تعيين متغير البيئة لمعرف تسجيل الجهاز. يجب أن يتطابق معرف التسجيل لجهاز IoT مع الاسم الشائع للموضوع على شهادة الجهاز الخاصة به. بالنسبة لهذا البرنامج التعليمي، device-01 هو اسم الموضوع ومعرف التسجيل للجهاز.
set PROVISIONING_REGISTRATION_ID=device-01
تعيين متغيرات البيئة لشهادة السلسلة الكاملة للجهاز وملفات المفاتيح الخاصة بالجهاز التي أنشأتها مسبقا. استبدل
<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
قم بتشغيل العينة وتحقق من توفير الجهاز بنجاح.
node register_x509.js
يجب أن ترى مخرجات مماثلة للمثال التالي:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=device-01 Client connected send status: MessageEnqueued
تحديث متغيرات البيئة لجهازك الثاني (
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.
في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.
انسخ نطاق المعرف.
في موجه أوامر 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
عبارة المرور المستخدمة لتشفير ملف المفتاح الخاص (إذا تم استخدامه). غير مطلوب لهذا البرنامج التعليمي. أضف متغيرات البيئة لنقطة نهاية الجهاز العمومي ونطاق المعرف. بالنسبة لمتغير نطاق المعرف، استخدم القيمة التي نسختها من مدخل Microsoft Azure.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
تعيين متغير البيئة لمعرف تسجيل الجهاز. يجب أن يتطابق معرف التسجيل لجهاز IoT مع الاسم الشائع للموضوع على شهادة الجهاز الخاصة به. بالنسبة لهذا البرنامج التعليمي، device-01 هو اسم الموضوع ومعرف التسجيل للجهاز.
set DPS_X509_REGISTRATION_ID=device-01
تعيين متغيرات البيئة لشهادة السلسلة الكاملة للجهاز وملفات المفاتيح الخاصة بالجهاز التي أنشأتها مسبقا. استبدل
<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
راجع التعليمات البرمجية لـ provision_x509.py. إذا لم تكن تستخدم Python الإصدار 3.7 أو أحدث، اجعل تغيير التعليمة البرمجية المذكور هنا ليحل محل
asyncio.run(main())
.قم بتشغيل العينة. يتصل النموذج ب 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
تحديث متغيرات البيئة لجهازك الثاني (
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.
في مدخل Azure، حدد علامة تبويب Overview لخدمة تكوين إعدادات تشغيل الجهاز لديك.
انسخ نطاق المعرف.
في موجه أوامر Windows، انتقل إلى مجلد نموذج المشروع. المسار المعروض مرتبط بالموقع الذي نسخت فيه SDK
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
أدخل خدمة التزويد ومعلومات هوية X.509 في نموذج التعليمات البرمجية. يتم استخدام هذا أثناء التزويد، لإثبات جهاز المحاكاة، قبل تسجيل الجهاز.
افتح الملف
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
في المحرر المفضل لديك.تحديث القيم التالية. بالنسبة إلى
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]";
العينة افتراضيا لاستخدام HTTPS كبروتوكول نقل. إذا كنت ترغب في تغيير البروتوكول، فقم بالتعليق خارج السطر التالي، وقم بإلغاء التعليق على السطر الخاص بالبروتوكول الذي تريد استخدامه.
private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
قم بتحديث قيمة
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
انسخ والصق نص شهادة الإخراج للقيمة الثابتة.
قم بتحديث قيمة
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
انسخ والصق نص المفتاح الخاص للإخراج للقيمة الثابتة.
أضف سلسلة
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
انسخ والصق نص شهادة الإخراج للقيمة الثابتة.
أضف سلسلة
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
انسخ والصق نص شهادة الإخراج للقيمة الثابتة.
ابحث عن الأسطر التالية في
main
الأسلوب .// For group enrollment uncomment this line //signerCertificatePemList.add("<Your Signer/intermediate Certificate Here>");
أضف هذين السطرين مباشرة أسفلهما لإضافة شهادات المرجع المصدق المتوسطة والجذرية إلى سلسلة التوقيع. يجب أن تتضمن سلسلة التوقيع سلسلة الشهادات بأكملها حتى وتضمين شهادة قمت بالتحقق منها باستخدام DPS.
signerCertificatePemList.add(intermediatePublicPem); signerCertificatePemList.add(rootPublicPem);
إشعار
الترتيب الذي تتم به إضافة شهادات التوقيع مهم. ستفشل العينة إذا تم تغييرها.
احفظ تغييراتك.
أنشئ النموذج، ثم انتقل إلى
target
المجلد.mvn clean install cd target
مخرجات البنية .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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 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 [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message sent!
قم بتحديث الثوابت لجهازك الثاني (
device-02
) وفقا للجدول التالي، وإعادة إنشاء النموذج وتشغيله مرة أخرى.ثابت الملف المراد استخدامه leafPublicPem
./certs/device-02.cert.pem leafPrivateKey
./private/device-02.key.pem
تأكد من تسجيل توفير جهازك
افحص سجلات التسجيل لمجموعة التسجيل للاطلاع على تفاصيل التسجيل لأجهزتك:
في مدخل Microsoft Azure، انتقل إلى مثيل خدمة تزويد الأجهزة.
في قائمة الإعدادات، حدد "إدارة التسجيلات".
حدد Enrollment groups. يجب أن يظهر إدخال مجموعة التسجيل X.509 الذي قمت بإنشائه مسبقا في القائمة.
حدد إدخال التسجيل. ثم حدد Details بجوار حالة التسجيل لمشاهدة الأجهزة التي تم تسجيلها من خلال مجموعة التسجيل. يظهر مركز IoT الذي تم تعيين كل جهاز من أجهزتك إليه ومعرفات أجهزته والتواريخ والأوقات التي تم تسجيلها فيها في القائمة.
يمكنك تحديد أحد الأجهزة للاطلاع على مزيد من التفاصيل لهذا الجهاز.
للتحقق من الأجهزة على مركز IoT الخاص بك:
في مدخل Microsoft Azure، انتقل إلى مركز IoT الذي تم تعيين جهازك إليه.
في قائمة إدارة الأجهزة، حدد الأجهزة.
إذا تم توفير أجهزتك بنجاح، يجب أن تظهر معرفات أجهزتهم، device-01 وdevice-02، في القائمة، مع تعيين الحالة على أنها ممكنة. إذا لم تتمكن من رؤية أجهزتك، فحدد تحديث.
تنظيف الموارد
عند الانتهاء من اختبار واستكشاف نموذج عميل الجهاز هذا، استخدم الخطوات التالية لحذف كافة الموارد التي تم إنشاؤها بواسطة هذا البرنامج التعليمي.
- أغلق نموذج إطار إخراج نموذج الجهاز على الجهاز.
حذف مجموعة التسجيل
في مدخل Azure، حدد All resources في القائمة اليسرى.
حدد مثيل DPS الخاص بك.
في قائمة الإعدادات، حدد "إدارة التسجيلات".
حدد علامة التبويب Enrollment groups.
حدد مجموعة التسجيل التي استخدمتها لهذا البرنامج التعليمي.
في صفحة Enrollment details ، حدد Details بجوار حالة التسجيل. ثم حدد خانة الاختيار بجوار رأس عمود معرف الجهاز لتحديد جميع سجلات التسجيل لمجموعة التسجيل. حدد حذف في أعلى الصفحة لحذف سجلات التسجيل.
ارجع إلى صفحة إدارة التسجيلات وتأكد من تحديد علامة التبويب مجموعات التسجيل.
حدد خانة الاختيار بجوار اسم المجموعة لمجموعة التسجيل التي استخدمتها لهذا البرنامج التعليمي.
في الجزء العلوي من الصفحة، حدد حذف.
حذف شهادات CA المسجلة من DPS
- حدد Certificates من القائمة اليسرى لمثيل DPS. لكل شهادة قمت بتحميلها والتحقق منها في هذا البرنامج التعليمي، حدد الشهادة وحدد حذف وأكد اختيارك لإزالتها.
حذف تسجيلات الجهاز من IoT Hub
في مدخل Azure، حدد All resources في القائمة اليسرى.
حدد مركز IoT.
في قائمة Explorers، حدد IoT devices.
حدد خانة الاختيار بجوار معرف الجهاز للأجهزة التي سجلتها في هذا البرنامج التعليمي. على سبيل المثال، device-01 و device-02.
في الجزء العلوي من الصفحة، حدد حذف.
الخطوات التالية
في هذا البرنامج التعليمي، قمت بتوفير أجهزة X.509 متعددة إلى مركز IoT الخاص بك باستخدام مجموعة تسجيل. بعد ذلك، تعرف على كيفية توفير أجهزة IoT عبر مراكز متعددة.