البرنامج التعليمي: تكوين التسجيل عبر خادم النقل الآمن ل Azure IoT Edge

ينطبق على:IoT Edge 1.4 علامة اختيار IoT Edge 1.4

هام

IoT Edge 1.4 هو الإصدار المدعوم. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.

باستخدام Azure IoT Edge، يمكنك تكوين أجهزتك لاستخدام خادم التسجيل عبر النقل الآمن (EST) لإدارة شهادات x509.

يرشدك هذا البرنامج التعليمي خلال استضافة خادم اختبار EST وتكوين جهاز IoT Edge لتسجيل شهادات x509 وتجديدها. في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء خادم اختبار EST واستضافته
  • تكوين تسجيل مجموعة DPS
  • تكوين الجهاز

رسم تخطيطي يوضح نظرة عامة عالية المستوى على الخطوات الثلاث اللازمة لإكمال هذا البرنامج التعليمي.

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

ما هو التسجيل عبر النقل الآمن؟

التسجيل عبر النقل الآمن (EST) هو بروتوكول تشفير يقوم بأتمتة إصدار شهادات x.509. يتم استخدامه لعملاء البنية الأساسية للمفتاح العام (PKI)، مثل IoT Edge الذين يحتاجون إلى شهادات العميل المقترنة بمرجع مصدق (CA). يحل EST محل الحاجة إلى إدارة الشهادات اليدوية، والتي يمكن أن تكون محفوفة بالمخاطر وعرضة للخطأ.

خادم EST

لإصدار الشهادة وتجديدها، تحتاج إلى خادم EST يمكن لأجهزتك الوصول إليه.

هام

للحصول على حلول على مستوى المؤسسة، ضع في اعتبارك: GlobalSign IoT Edge Enroll أو DigiCert IoT Device Manager.

للاختبار والتطوير، يمكنك استخدام خادم اختبار EST. في هذا البرنامج التعليمي، سننشئ خادم اختبار EST.

تشغيل خادم EST على الجهاز

للبدء بسرعة، يعرض هذا البرنامج التعليمي خطوات نشر خادم EST بسيط في حاوية محليا على جهاز IoT Edge. هذا الأسلوب هو أبسط نهج لتجربته.

يستخدم Dockerfile Ubuntu 18.04، ومكتبة Cisco تسمى libest، ونموذج التعليمات البرمجية للخادم. تم تكوينه باستخدام الإعداد التالي الذي يمكنك تغييره:

  • المرجع المصدق الجذر صالح لمدة 20 عاما
  • شهادة خادم EST صالحة لمدة 10 سنوات
  • تعيين الأيام الافتراضية للشهادة إلى 1 لاختبار تجديد EST
  • يتم تشغيل خادم EST محليا على جهاز IoT Edge في حاوية

تنبيه

لا تستخدم Dockerfile هذا في الإنتاج.

  1. اتصل بالجهاز، على سبيل المثال باستخدام SSH، حيث قمت بتثبيت IoT Edge.

  2. أنشئ ملفا باسم 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
    
  3. في الدليل الذي يحتوي على Dockerfile، أنشئ صورتك من نموذج Dockerfile.

    sudo docker build . --tag est
    
  4. ابدأ تشغيل الحاوية وكشف منفذ الحاوية 8085 إلى المنفذ 8085 على المضيف.

    sudo docker run -d -p 8085:8085 est
    
  5. الآن، خادم EST الخاص بك قيد التشغيل ويمكن الوصول إليه باستخدام localhost على المنفذ 8085. تحقق من توفره عن طريق تشغيل أمر لمشاهدة شهادة الخادم الخاصة به.

    openssl s_client -showcerts -connect localhost:8085
    
  6. يجب أن تشاهد -----BEGIN CERTIFICATE----- في منتصف الطريق من خلال الإخراج. يتحقق استرداد الشهادة من إمكانية الوصول إلى الخادم ويمكنه تقديم شهادته.

تلميح

لتشغيل هذه الحاوية في السحابة، قم بإنشاء الصورة ودفع الصورة إلى Azure Container Registry. بعد ذلك، اتبع التشغيل السريع للنشر إلى مثيل حاوية Azure.

تنزيل شهادة المرجع المصدق

يتطلب كل جهاز شهادة المرجع المصدق (CA) المقترنة بشهادة هوية الجهاز.

  1. على جهاز IoT Edge، قم بإنشاء /var/aziot/certs الدليل إذا لم يكن موجودا، ثم قم بتغيير الدليل إليه.

    # If the certificate directory doen'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
    
  2. استرجع شهادة المرجع المصدق من خادم 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
    
  3. يجب أن تكون الشهادات مملوكة لمستخدم الخدمة الرئيسية 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 مع مجموعة التسجيل بتجديد شهادات هوية الجهاز دون أي خطوات يدوية.

تحميل شهادة CA إلى DPS

  1. إذا لم يكن لديك خدمة تزويد الأجهزة مرتبطة ب IoT Hub، فشاهد التشغيل السريع: إعداد خدمة توفير جهاز IoT Hub باستخدام مدخل Microsoft Azure.

  2. cacert.crt.pem نقل الملف من جهازك إلى كمبيوتر لديه حق الوصول إلى مدخل Microsoft Azure مثل كمبيوتر التطوير الخاص بك. إحدى الطرق السهلة لنقل الشهادة هي الاتصال عن بعد بجهازك، وعرض الشهادة باستخدام الأمر cat /var/aziot/certs/cacert.crt.pem، ونسخ الإخراج بأكمله، ولصق المحتويات في ملف جديد على كمبيوتر التطوير الخاص بك.

  3. في مدخل Microsoft Azure، انتقل إلى مثيل IoT Hub Device Provisioning Service.

  4. ضمن الإعدادات، حدد الشهادات، ثم +إضافة.

    لقطة شاشة تضيف شهادة CA إلى خدمة توفير الجهاز باستخدام مدخل Microsoft Azure.

    إعداد القيمة
    اسم الشهادة أدخل اسما مألوفا لشهادة المرجع المصدق
    ملف الشهادة .pem أو .cer استعرض للوصول إلى cacert.crt.pem من خادم EST
    تعيين حالة الشهادة إلى تم التحقق منها عند التحميل حدد خانة الاختيار
  5. حدد ⁧⁩حفظ⁧⁩.

إنشاء مجموعة تسجيل

  1. في مدخل Microsoft Azure، انتقل إلى مثيل IoT Hub Device Provisioning Service.

  2. ضمن Settings، حدد Manage enrollments.

  3. حدد Add enrollment group ثم أكمل الخطوات التالية لتكوين التسجيل.

  4. في علامة التبويب Registration + provisioning ، اختر الإعدادات التالية:

    لقطة شاشة تضيف مجموعة تسجيل DPS باستخدام مدخل Microsoft Azure.

    إعداد القيمة
    آلية الإثبات حدد شهادات X.509 التي تم تحميلها إلى مثيل خدمة توفير الأجهزة هذا
    الشهادة الأساسية اختر شهادتك من القائمة المنسدلة
    اسم المجموعة أدخل اسما مألوفا لتسجيل هذه المجموعة
    حالة التوفير حدد خانة الاختيار Enable this enrollment
  5. في علامة التبويب IoT hubs ، اختر IoT Hub من القائمة.

  6. في علامة التبويب Device settings ، حدد خانة الاختيار Enable IoT Edge on provisioned devices .

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

  7. حدد Review + create.

الآن بعد وجود تسجيل للجهاز، يمكن لوقت تشغيل IoT Edge إدارة شهادات الجهاز تلقائيا لمركز IoT المرتبط.

تكوين جهاز IoT Edge

على جهاز IoT Edge، قم بتحديث ملف تكوين IoT Edge لاستخدام شهادات الجهاز من خادم EST.

  1. افتح ملف تكوين IoT Edge باستخدام محرر. على سبيل المثال، استخدم nano المحرر لفتح /etc/aziot/config.toml الملف.

    sudo nano /etc/aziot/config.toml
    
  2. أضف المقاطع التالية أو استبدلها في ملف التكوين. تستخدم إعدادات التكوين هذه مصادقة اسم المستخدم وكلمة المرور في البداية للحصول على شهادة الجهاز من خادم 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 أيضا. لتعديل للإنتاج:

    1. ضع في اعتبارك استخدام شهادات bootstrap طويلة الأمد التي يمكن تخزينها على الجهاز أثناء التصنيع على غرار النهج الموصى به ل DPS. لمعرفة كيفية تكوين شهادة bootstrap لخادم EST، راجع مصادقة جهاز باستخدام الشهادات الصادرة ديناميكيا عبر EST.
    2. تكوين [cert_issuance.est.identity_auto_renew] باستخدام نفس بناء الجملة مثل تكوين التجديد التلقائي لشهادة التوفير أعلاه.

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

  3. قم بتشغيل sudo iotedge config apply لتطبيق الإعدادات الجديدة.

  4. قم بتشغيل sudo iotedge check للتحقق من تكوين جهاز IoT Edge. يجب أن تنجح جميع عمليات التحقق من التكوين . بالنسبة لهذا البرنامج التعليمي، يمكنك تجاهل أخطاء الاستعداد للإنتاج والتحذيرات، وتحذيرات خادم DNS، وعمليات التحقق من الاتصال.

  5. انتقل إلى جهازك في IoT Hub. تمت إضافة بصمات إبهام الشهادة إلى الجهاز تلقائيا باستخدام DPS وخادم EST.

    لقطة شاشة لإعدادات جهاز IoT Hub في مدخل Microsoft Azure. تعرض حقول بصمة إبهام الشهادة القيم.

    ملاحظة

    عند إنشاء جهاز IoT Edge جديد، فإنه يعرض رمز 417 -- The device's deployment configuration is not set in the Azure portal. الحالة هذه الحالة عادية، ويعني أن الجهاز جاهز لتلقي توزيع وحدة نمطية.

اختبار تجديد الشهادة

يمكنك إعادة إصدار شهادات هوية الجهاز على الفور عن طريق إزالة الشهادات والمفاتيح الموجودة من الجهاز ثم تطبيق تكوين IoT Edge. يكتشف IoT Edge الملفات المفقودة ويطلب شهادات جديدة.

  1. على جهاز IoT Edge، أوقف وقت تشغيل IoT Edge.

    sudo iotedge system stop
    
  2. احذف الشهادات والمفاتيح الموجودة.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. تطبيق تكوين IoT Edge لتجديد الشهادات.

    sudo iotedge config apply
    

    قد تحتاج إلى الانتظار بضع دقائق حتى يبدأ وقت التشغيل.

  4. انتقل إلى جهازك في IoT Hub. تم تحديث بصمات إبهام الشهادة.

    لقطة شاشة لإعدادات جهاز IoT Hub في مدخل Microsoft Azure. تعرض حقول بصمة إبهام الشهادة قيما جديدة.

  5. سرد ملفات الشهادة باستخدام الأمر sudo ls -l /var/lib/aziot/certd/certs. يجب أن تشاهد تواريخ الإنشاء الأخيرة لملفات شهادة الجهاز.

  6. openssl استخدم الأمر للتحقق من محتويات الشهادة الجديدة. على سبيل المثال:

    sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
    

    استبدل اسم ملف شهادة الجهاز (.cer) بملف شهادة جهازك.

    يجب أن تلاحظ أن نطاق تاريخ صلاحية الشهادة قد تغير.

فيما يلي طرق أخرى اختيارية يمكنك من خلالها اختبار تجديد الشهادة. توضح هذه الفحوصات كيفية تجديد IoT Edge للشهادات من خادم EST عند انتهاء صلاحيتها أو فقدانها. بعد كل اختبار، يمكنك التحقق من بصمات الإبهام الجديدة في مدخل Microsoft Azure واستخدام openssl الأمر للتحقق من الشهادة الجديدة.

  1. حاول الانتظار لمدة يوم حتى تنتهي صلاحية الشهادة. تم تكوين خادم اختبار EST لإنشاء شهادات تنتهي صلاحيتها بعد يوم واحد. يقوم IoT Edge تلقائيا بتجديد الشهادة.
  2. حاول ضبط النسبة المئوية للتجديد threshold التلقائي المعين في config.toml (تم تعيينه حاليا إلى 80٪ في تكوين المثال). على سبيل المثال، قم بتعيينه إلى 10% ولاحظ تجديد الشهادة كل ~2 ساعة.
  3. حاول ضبط إلى threshold عدد صحيح متبوعا ب m (دقائق). على سبيل المثال، قم بتعيينه إلى 60m ولاحظ تجديد الشهادة قبل ساعة واحدة من انتهاء الصلاحية.

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

يمكنك الاحتفاظ بالموارد والتكوينات التي قمت بإنشائها في هذا البرنامج التعليمي وإعادة استخدامها. غير ذلك يمكنك حذف التكوينات المحلية وموارد Azure التي استخدمتها في هذه المقالة لتجنب التكاليف.

حذف موارد Azure

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

لحذف الموارد:

  1. سجّل الدخول إلى مدخل Microsoft Azure، ثم حدد Resource groups.

  2. حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.

  3. راجع قائمة الموارد الموجودة في مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، فيمكنك النقر فوق كل مورد لحذفها بشكل فردي.

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