البرنامج التعليمي: تكوين التسجيل عبر خادم النقل الآمن ل Azure IoT Edge
ينطبق على: IoT Edge 1.5
هام
IoT Edge 1.5 LTS هو الإصدار المدعوم. IoT Edge 1.4 LTS هو نهاية العمر الافتراضي اعتبارا من 12 نوفمبر 2024. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.
باستخدام Azure IoT Edge، يمكنك تكوين أجهزتك لاستخدام خادم التسجيل عبر النقل الآمن (EST) لإدارة شهادات x509.
يرشدك هذا البرنامج التعليمي من خلال استضافة خادم اختبار EST وتكوين جهاز IoT Edge لتسجيل شهادات x509 وتجديدها. في هذا البرنامج التعليمي، تتعلم كيفية:
- إنشاء خادم اختبار EST واستضافته
- تكوين تسجيل مجموعة DPS
- تكوين الجهاز
المتطلبات الأساسية
- جهاز IoT Edge موجود مع تثبيت أحدث وقت تشغيل Azure IoT Edge. إذا كنت بحاجة إلى إنشاء جهاز اختبار، فأكمل التشغيل السريع: نشر أول وحدة IoT Edge على جهاز Linux ظاهري.
- يتطلب جهاز IoT Edge وقت تشغيل Azure IoT Edge 1.2 أو أحدث لدعم EST. وقت تشغيل Azure IoT Edge 1.3 أو أحدث مطلوب لتجديد شهادة EST.
- خدمة توفير جهاز IoT Hub (DPS) المرتبطة ب IoT Hub. للحصول على معلومات حول تكوين DPS، راجع التشغيل السريع: إعداد خدمة توفير جهاز IoT Hub باستخدام مدخل Microsoft Azure.
إشعار
لاستخدام EST وIoT Edge لإصدار شهادة هوية الجهاز تلقائيا وتجديدها، وهو ما يوصى به للإنتاج، يجب توفير IoT Edge كجزء من مجموعة التسجيل المستندة إلى DPS CA. لا تدعم الطرق الأخرى للتزويد، بما في ذلك تزويد X.509 اليدوي مع IoT Hub وDPS مع التسجيل الفردي تجديد شهادة هوية الجهاز التلقائية.
ما هو التسجيل عبر النقل الآمن؟
التسجيل عبر النقل الآمن (EST) هو بروتوكول تشفير يقوم بأتمتة إصدار شهادات x.509. يتم استخدامه لعملاء البنية الأساسية للمفتاح العام (PKI)، مثل IoT Edge الذي يحتاج إلى شهادات العميل المرتبطة بمرجع مصدق (CA). تحل EST محل الحاجة إلى إدارة الشهادات اليدوية، والتي يمكن أن تكون محفوفة بالمخاطر وعرضة للخطأ.
خادم EST
لإصدار الشهادة وتجديدها، تحتاج إلى خادم EST يمكن لأجهزتك الوصول إليه.
هام
بالنسبة لحلول درجة المؤسسة، ضع في اعتبارك: GlobalSign IoT Edge Enroll أو DigiCert IoT إدارة الأجهزة.
للاختبار والتطوير، يمكنك استخدام خادم اختبار EST. في هذا البرنامج التعليمي، سنقوم بإنشاء خادم اختبار EST.
تشغيل خادم EST على الجهاز
للبدء بسرعة، يعرض هذا البرنامج التعليمي خطوات نشر خادم EST بسيط في حاوية محليا على جهاز IoT Edge. هذا الأسلوب هو أبسط نهج لتجربته.
يستخدم Dockerfile Ubuntu 18.04، ومكتبة Cisco تسمى libest
، ونموذج التعليمات البرمجية للخادم. تم تكوينه بالإعداد التالي الذي يمكنك تغييره:
- المرجع المصدق الجذر صالح لمدة 20 عاما
- شهادة خادم EST صالحة لمدة 10 سنوات
- تعيين أيام الشهادة الافتراضية إلى 1 لاختبار تجديد EST
- يتم تشغيل خادم EST محليا على جهاز IoT Edge في حاوية
تنبيه
لا تستخدم Dockerfile هذا في الإنتاج.
اتصل بالجهاز، على سبيل المثال باستخدام SSH، حيث قمت بتثبيت IoT Edge.
أنشئ ملفا باسم
Dockerfile
(حساس لحالة الأحرف) وأضف نموذج المحتوى باستخدام محرر النص المفضل لديك.تلميح
إذا كنت ترغب في استضافة خادم EST الخاص بك في مثيل حاوية Azure، قم بالتغيير
myestserver.westus.azurecontainer.io
إلى اسم DNS لخادم EST الخاص بك. عند اختيار اسم DNS، يجب أن تكون على علم بأن تسمية DNS لمثيل حاوية Azure يجب أن يكون طولها خمسة أحرف على الأقل.# DO NOT USE IN PRODUCTION - Use only for testing # FROM ubuntu:18.04 RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \ git clone https://github.com/cisco/libest.git && cd libest && \ ./configure --disable-safec && make install && \ rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \ apt autoremove -y && apt clean -y && apt autoclean -y && \ rm -rf /var/lib/apt /tmp/* /var/tmp/* WORKDIR /libest/example/server/ # Setting the root CA expiration to 20 years RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh ## If you want to host your EST server remotely (for example, an Azure Container Instance), ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server ## OR, change the IP address ## and uncomment the corresponding line. # RUN sed -i "s|DNS.2 = ip6-localhost|DNS.2 = myestserver.westus.azurecontainer.io|g" ./ext.cnf # RUN sed -i "s|IP.2 = ::1|IP.2 = <YOUR EST SERVER IP ADDRESS>|g" ./ext.cnf # Set EST server certificate to be valid for 10 years RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh # Create the CA RUN echo 1 | ./createCA.sh # Set cert default-days to 1 to show EST renewal RUN sed -i "s|default_days = 365|default_days = 1 |g" ./estExampleCA.cnf # The EST server listens on port 8085 by default # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085. # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh EXPOSE 8085 CMD ./runserver.sh
في الدليل الذي يحتوي على
Dockerfile
، أنشئ صورتك من نموذج Dockerfile.sudo docker build . --tag est
ابدأ تشغيل الحاوية وعرض منفذ الحاوية 8085 إلى المنفذ 8085 على المضيف.
sudo docker run -d -p 8085:8085 est
الآن، خادم EST الخاص بك قيد التشغيل ويمكن الوصول إليه باستخدام
localhost
على المنفذ 8085. تحقق من توفره عن طريق تشغيل أمر لمشاهدة شهادة الخادم الخاصة به.openssl s_client -showcerts -connect localhost:8085
يجب أن تشاهد
-----BEGIN CERTIFICATE-----
في منتصف المخرجات. يتحقق استرداد الشهادة من إمكانية الوصول إلى الخادم ويمكنه تقديم شهادته.
تلميح
لتشغيل هذه الحاوية في السحابة، قم بإنشاء الصورة ودفع الصورة إلى Azure Container Registry. ثم اتبع التشغيل السريع للنشر إلى مثيل حاوية Azure.
تنزيل شهادة المرجع المصدق
يتطلب كل جهاز شهادة المرجع المصدق (CA) المقترنة بشهادة هوية الجهاز.
على جهاز IoT Edge، قم بإنشاء
/var/aziot/certs
الدليل إذا لم يكن موجودا، ثم قم بتغيير الدليل إليه.# If the certificate directory doesn't exist, create, set ownership, and set permissions sudo mkdir -p /var/aziot/certs sudo chown aziotcs:aziotcs /var/aziot/certs sudo chmod 755 /var/aziot/certs # Change directory to /var/aziot/certs cd /var/aziot/certs
استرجع شهادة المرجع المصدق من خادم EST إلى
/var/aziot/certs
الدليل وقم بتسمية .cacert.crt.pem
openssl s_client -showcerts -verify 5 -connect localhost:8085 < /dev/null | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
يجب أن تكون الشهادات مملوكة من قبل aziotcs مستخدم الخدمة الرئيسية. تعيين الملكية إلى aziotcs لجميع ملفات الشهادة وتعيين الأذونات. لمزيد من المعلومات حول ملكية الشهادة والأذونات، راجع متطلبات الأذونات.
# Give aziotcs ownership to certificates sudo chown -R aziotcs:aziotcs /var/aziot/certs # Read and write for aziotcs, read-only for others sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
توفير جهاز IoT Edge باستخدام DPS
يتيح لك استخدام خدمة تزويد الأجهزة إصدار الشهادات وتجديدها تلقائيا من خادم EST في IoT Edge. عند استخدام خادم EST البرنامج التعليمي، تنتهي صلاحية شهادات الهوية في يوم واحد مما يجعل التوفير اليدوي مع IoT Hub غير عملي نظرا لأنه في كل مرة تنتهي فيها صلاحية الشهادة، يجب تحديث بصمة الإبهام يدويا في IoT Hub. تسمح مصادقة المرجع المصدق DPS مع مجموعة التسجيل بتجديد شهادات هوية الجهاز دون أي خطوات يدوية.
تحميل شهادة CA إلى DPS
إذا لم يكن لديك خدمة تزويد الأجهزة مرتبطة ب IoT Hub، فشاهد التشغيل السريع: إعداد خدمة توفير جهاز IoT Hub باستخدام مدخل Microsoft Azure.
cacert.crt.pem
انقل الملف من جهازك إلى كمبيوتر لديه حق الوصول إلى مدخل Microsoft Azure مثل كمبيوتر التطوير الخاص بك. طريقة سهلة لنقل الشهادة هي الاتصال عن بعد بجهازك، وعرض الشهادة باستخدام الأمرcat /var/aziot/certs/cacert.crt.pem
، ونسخ الإخراج بأكمله، ولصق المحتويات إلى ملف جديد على كمبيوتر التطوير الخاص بك.في مدخل Microsoft Azure، انتقل إلى مثيل خدمة توفير جهاز IoT Hub.
ضمن الإعدادات، حدد الشهادات، ثم +إضافة.
الإعداد القيمة اسم الشهادة أدخل اسما مألوفا لشهادة المرجع المصدق ملف الشهادة .pem أو .cer استعرض للوصول إلى cacert.crt.pem
من خادم ESTتعيين حالة الشهادة إلى تم التحقق منها عند التحميل تحديد خانة الاختيار حدد حفظ.
إنشاء مجموعة تسجيل
في مدخل Microsoft Azure، انتقل إلى مثيل خدمة توفير جهاز IoT Hub.
ضمن Settings، حدد Manage enrollments.
حدد Add enrollment group ثم أكمل الخطوات التالية لتكوين التسجيل.
في علامة التبويب Registration + provisioning ، اختر الإعدادات التالية:
الإعداد القيمة آلية الإثبات حدد شهادات X.509 التي تم تحميلها إلى مثيل خدمة تزويد الأجهزة هذا الشهادة الأساسية اختر شهادتك من القائمة المنسدلة اسم المجموعة أدخل اسما مألوفا لتسجيل المجموعة هذا حالة التوفير حدد خانة الاختيار Enable this enrollment في علامة التبويب IoT hubs ، اختر IoT Hub من القائمة.
في علامة التبويب Device settings ، حدد خانة الاختيار Enable IoT Edge on provisioned devices .
الإعدادات الأخرى غير ذات صلة بالبرنامج التعليمي. يمكنك قبول الإعدادات الافتراضية.
حدد "Review + create".
الآن بعد وجود تسجيل للجهاز، يمكن لوقت تشغيل IoT Edge إدارة شهادات الجهاز تلقائيا لمركز IoT المرتبط.
تكوين جهاز IoT Edge
على جهاز IoT Edge، قم بتحديث ملف تكوين IoT Edge لاستخدام شهادات الجهاز من خادم EST.
افتح ملف تكوين IoT Edge باستخدام محرر. على سبيل المثال، استخدم
nano
المحرر لفتح/etc/aziot/config.toml
الملف.sudo nano /etc/aziot/config.toml
إضافة الأقسام التالية أو استبدالها في ملف التكوين. تستخدم إعدادات التكوين هذه مصادقة اسم المستخدم وكلمة المرور في البداية للحصول على شهادة الجهاز من خادم EST. يتم استخدام شهادة الجهاز للمصادقة على خادم EST لتجديد الشهادات المستقبلية.
استبدل نص العنصر النائب التالي:
<DPS-ID-SCOPE>
مع نطاق معرف DPS المرتبط بمركز IoT الذي يحتوي على الجهاز المسجل، ومعmyiotedgedevice
معرف الجهاز المسجل في Azure IoT Hub. يمكنك العثور على قيمة نطاق المعرف في صفحة نظرة عامة على DPS.# DPS provisioning with X.509 certificate # Replace with ID Scope from your DPS [provisioning] source = "dps" global_endpoint = "https://global.azure-devices-provisioning.net" id_scope = "<DPS-ID-SCOPE>" [provisioning.attestation] method = "x509" registration_id = "myiotedgedevice" [provisioning.attestation.identity_cert] method = "est" common_name = "myiotedgedevice" # Auto renewal settings for the identity cert # Available only from IoT Edge 1.3 and above [provisioning.attestation.identity_cert.auto_renew] rotate_key = false threshold = "80%" retry = "4%" # Trusted root CA certificate in the global EST options # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates. [cert_issuance.est] trusted_certs = [ "file:///var/aziot/certs/cacert.crt.pem", ] # The default username and password for libest # Used for initial authentication to EST server # # Not recommended for production [cert_issuance.est.auth] username = "estuser" password = "estpwd" [cert_issuance.est.urls] default = "https://localhost:8085/.well-known/est"
إشعار
في هذا المثال، يستخدم IoT Edge اسم المستخدم وكلمة المرور للمصادقة على خادم EST في كل مرة يحتاج فيها إلى الحصول على شهادة. هذا الأسلوب غير مستحسن في الإنتاج لأن 1) يتطلب تخزين سر في نص عادي و2) يجب أن يستخدم IoT Edge شهادة هوية للمصادقة على خادم EST أيضا. لتعديل الإنتاج:
- ضع في اعتبارك استخدام شهادات bootstrap طويلة العمر التي يمكن تخزينها على الجهاز أثناء التصنيع على غرار النهج الموصى به ل DPS. لمعرفة كيفية تكوين شهادة bootstrap لخادم EST، راجع مصادقة جهاز باستخدام الشهادات الصادرة ديناميكيا عبر EST.
- قم بالتكوين
[cert_issuance.est.identity_auto_renew]
باستخدام نفس بناء الجملة مثل تكوين التجديد التلقائي لشهادة التوفير أعلاه.
بهذه الطريقة، تستخدم خدمة شهادة IoT Edge شهادة bootstrap للمصادقة الأولية مع خادم EST، وتطالب بشهادة هوية لطلبات EST المستقبلية إلى نفس الخادم. إذا انتهت صلاحية شهادة هوية EST قبل التجديد لسبب ما، يعود IoT Edge إلى استخدام شهادة bootstrap.
قم بتشغيل
sudo iotedge config apply
لتطبيق الإعدادات الجديدة.قم بتشغيل
sudo iotedge check
للتحقق من تكوين جهاز IoT Edge. يجب أن تنجح جميع عمليات التحقق من التكوين. بالنسبة لهذا البرنامج التعليمي، يمكنك تجاهل أخطاء الاستعداد للإنتاج والتحذيرات، وتحذيرات خادم DNS، وعمليات التحقق من الاتصال.انتقل إلى جهازك في IoT Hub. تمت إضافة بصمات إبهام الشهادة إلى الجهاز تلقائيا باستخدام DPS وخادم EST.
إشعار
عند إنشاء جهاز IoT Edge جديد، فإنه يعرض رمز
417 -- The device's deployment configuration is not set in the Azure portal.
الحالة هذه الحالة عادية، ويعني أن الجهاز جاهز لتلقي نشر وحدة نمطية.
اختبار تجديد الشهادة
يمكنك إعادة إصدار شهادات هوية الجهاز على الفور عن طريق إزالة الشهادات والمفاتيح الموجودة من الجهاز ثم تطبيق تكوين IoT Edge. يكتشف IoT Edge الملفات المفقودة ويطلب شهادات جديدة.
على جهاز IoT Edge، أوقف وقت تشغيل IoT Edge.
sudo iotedge system stop
احذف الشهادات والمفاتيح الموجودة.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
تطبيق تكوين IoT Edge لتجديد الشهادات.
sudo iotedge config apply
قد تحتاج إلى الانتظار بضع دقائق حتى يبدأ وقت التشغيل.
انتقل إلى جهازك في IoT Hub. تم تحديث بصمة إبهام الشهادة.
سرد ملفات الشهادة باستخدام الأمر
sudo ls -l /var/lib/aziot/certd/certs
. يجب أن تشاهد تواريخ الإنشاء الأخيرة لملفات شهادة الجهاز.openssl
استخدم الأمر للتحقق من محتويات الشهادة الجديدة. على سبيل المثال:sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
استبدل اسم ملف شهادة الجهاز (.cer) بملف شهادة جهازك.
يجب أن تلاحظ أن نطاق تاريخ صلاحية الشهادة قد تغير.
فيما يلي طرق أخرى اختيارية يمكنك من خلالها اختبار تجديد الشهادة. توضح هذه الفحوصات كيفية تجديد IoT Edge للشهادات من خادم EST عند انتهاء صلاحيتها أو فقدانها. بعد كل اختبار، يمكنك التحقق من بصمات الإبهام الجديدة في مدخل Microsoft Azure واستخدام openssl
الأمر للتحقق من الشهادة الجديدة.
- حاول الانتظار لمدة يوم حتى تنتهي صلاحية الشهادة. تم تكوين خادم اختبار EST لإنشاء شهادات تنتهي صلاحيتها بعد يوم واحد. يقوم IoT Edge تلقائيا بتجديد الشهادة.
- حاول ضبط النسبة المئوية
threshold
للتجديد التلقائي المعين فيconfig.toml
(تم تعيينه حاليا إلى 80٪ في تكوين المثال). على سبيل المثال، قم بتعيينه إلى10%
ومراقبة تجديد الشهادة كل ساعتين تقريبا. - حاول ضبط إلى
threshold
عدد صحيح متبوعا بm
(دقائق). على سبيل المثال، قم بتعيينه إلى60m
ومراقبة تجديد الشهادة قبل ساعة من انتهاء الصلاحية.
تنظيف الموارد
يمكنك الاحتفاظ بالموارد والتكوينات التي قمت بإنشائها في هذا البرنامج التعليمي وإعادة استخدامها. غير ذلك يمكنك حذف التكوينات المحلية وموارد Azure التي استخدمتها في هذه المقالة لتجنب التكاليف.
قم بحذف موارد Azure.
حذف موارد Azure ومجموعات الموارد لا رجعة فيه. يُرجى التأكد من عدم حذف مجموعة الموارد أو الموارد غير الصحيحة عن طريق الخطأ. إذا قمت بإنشاء مركز IoT داخل مجموعة موارد موجودة لديها موارد تريد الاحتفاظ بها، فاحذف فقط مورد محور IoT نفسه، وليس مجموعة الموارد.
لحذف الموارد:
سجل الدخول إلى مدخل Azure، وحدد "Resource groups".
حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.
راجع قائمة الموارد التي تحتويها مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، يمكنك تحديد كل مورد لحذفها بشكل فردي.
الخطوات التالية
- لاستخدام خادم EST لإصدار شهادات المرجع المصدق Edge، راجع مثال التكوين.
- لا ينصح باستخدام اسم المستخدم وكلمة المرور لمصادقة bootstrap إلى خادم EST للإنتاج. بدلا من ذلك، ضع في اعتبارك استخدام شهادات bootstrap طويلة الأمد التي يمكن تخزينها على الجهاز أثناء التصنيع مشابهة للنهج الموصى به ل DPS. لمعرفة كيفية تكوين شهادة bootstrap لخادم EST، راجع مصادقة جهاز باستخدام الشهادات الصادرة ديناميكيا عبر EST.
- يمكن استخدام خادم EST لإصدار شهادات لجميع الأجهزة في التسلسل الهرمي أيضا. اعتمادا على ما إذا كان لديك متطلبات ISA-95، قد يكون من الضروري تشغيل سلسلة من خوادم EST مع واحد في كل طبقة أو استخدام وحدة وكيل واجهة برمجة التطبيقات لإعادة توجيه الطلبات. لمعرفة المزيد، راجع مدونة كيفن.
- بالنسبة لحلول درجة المؤسسة، ضع في اعتبارك: GlobalSign IoT Edge Enroll وDigiCert IoT إدارة الأجهزة وKeytos EZCA.
- لمعرفة المزيد حول الشهادات، راجع فهم كيفية استخدام Azure IoT Edge للشهادات.