كيفية استخدام شهادات X.509 عبر HTTPS دون SDK

في هذه المقالة الإرشادية، ستقوم بتوفير جهاز باستخدام شهادات x.509 عبر HTTPS دون استخدام SDK لجهاز Azure IoT DPS. توفر معظم اللغات مكتبات لإرسال طلبات HTTP، ولكن بدلا من التركيز على لغة معينة، في هذه المقالة، ستستخدم أداة سطر أوامر cURL لإرسال HTTPS وتلقيه.

يمكنك اتباع الخطوات الواردة في هذه المقالة على جهاز Linux أو Windows. إذا كنت تعمل على نظام Windows الفرعي لـ Linux (WSL) أو تعمل على جهاز Linux، يمكنك إدخال جميع الأوامر على النظام المحلي في موجه Bash. إذا كنت تعمل على Windows، أدخل جميع الأوامر على النظام المحلي في موجه GitBash.

هناك مسارات متعددة من خلال هذه المقالة اعتمادا على نوع إدخال التسجيل وشهادة (شهادات) X.509 التي تختار استخدامها. بعد تثبيت المتطلبات الأساسية، تأكد من قراءة نظرة عامة قبل المتابعة.

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

  • في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

  • إكمال الخطوات في إعداد خدمة تزويد الأجهزة بمركز IoT باستخدام مدخل Microsoft Azure.

  • تأكد من تثبيت Python 3.7 أو إصدار أحدث على جهازك. يمكنك التحقق من إصدار Python الخاص بك عن طريق تشغيل python --version أو python3 --version.

  • إذا كنت تعمل في Windows، فقم بتثبيت أحدث إصدار من Git. تأكد من إضافة Git إلى متغيرات البيئة التي يمكن الوصول إليها من نافذة الأمر. راجع أدوات عميل Software Freedom Conservancy's Git للحصول على أحدث إصدار من أدوات git للتثبيت، والتي تتضمن Git Bash، وهو تطبيق سطر الأوامر الذي يمكن استخدامه للتفاعل مع مستودع Git المحلي خاصتك. في Windows، ستقوم بإدخال جميع الأوامر على النظام المحلي في موجه GitBash.

  • Azure CLI لديك خياران لتشغيل أوامر Azure CLI في هذه المقالة:

    • استخدم Azure Cloud Shell، وهي واجهة تفاعلية تقوم بتشغيل أوامر CLI في المستعرض. يوصى بهذا الخيار؛ لأنك لا تحتاج إلى تثبيت أي شيء. إذا كنت تستخدم Cloud Shell لأول مرة، فسجل الدخول إلى مدخل Azure. تتبع الخطوات في التشغيل السريع لـ Cloud Shellلبدء Cloud Shellوحدد بيئة Bash.
    • اختياريًا، قم بتشغيل Azure CLI على الجهاز المحلي. إذا تم بالفعل تثبيت Azure CLI، az upgrade فحدث CLI والملحقات إلى الإصدار الحالي. لتثبيت Azure CLI، راجع تثبيت Azure CLI.
  • إذا كنت تعمل في بيئة Linux أو WSL، فافتح موجه Bash لتشغيل الأوامر محليا. إذا كنت تعمل في بيئة Windows، فافتح موجه GitBash.

نظرة عامة

هناك ثلاثة سيناريوهات مشمولة في هذه المقالة وستكون الخطوات الأولية التي ستقوم بتنفيذها مختلفة لكل منها. إذا كنت تريد:

  • التزويد من خلال تسجيل فردي باستخدام شهادة موقعة ذاتيا، اتبع الخطوات الواردة في هذه الأقسام:

    1. استخدم شهادة موقعة ذاتيا لإنشاء شهادة موقعة ذاتيا.
    2. استخدم تسجيلا فرديا لإنشاء تسجيل فردي.
  • التزويد من خلال تسجيل فردي باستخدام سلسلة شهادات، اتبع الخطوات الواردة في هذه الأقسام:

    1. استخدم سلسلة شهادات لإنشاء سلسلة شهادات.
    2. استخدم تسجيلا فرديا لإنشاء تسجيل فردي.
    3. تحميل شهادة توقيع والتحقق منها لتحميل شهادة المرجع المصدق الجذر والتحقق منها.
  • التزويد من خلال مجموعة تسجيل، اتبع الخطوات الواردة في هذه الأقسام:

    1. استخدم سلسلة شهادات لإنشاء سلسلة شهادات.
    2. استخدم مجموعة تسجيل لإنشاء مجموعة تسجيل.
    3. تحميل شهادة توقيع والتحقق منها لتحميل شهادة المرجع المصدق الجذر والتحقق منها.

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

إنشاء شهادة جهاز

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

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

هام

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

إنشاء شهادة موقعة ذاتياً جديدة

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

  1. شغّل الأمر التالي:

    winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
    

    هام

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

  2. عند مطالبتك بإدخال عبارة المرور PEM:، استخدم عبارة المرور1234.

  3. عند مطالبتك بالتحقق - إدخال عبارة المرور PEM:، استخدم عبارة المرور1234 مرةً أخرى.

    يجب الآن إنشاء ملف شهادة مفتاح عام (device-cert.pem) وملف المفتاح الخاص (device-key.pem) في الدليل حيث قمت بتشغيل openssl الأمر.

    تم تعيين اسم الموضوع الشائع لملف الشهادة (CN) إلى my-x509-device.

    ملف المفتاح الخاص محمي بعبارة المرور: 1234.

  4. ملف الشهادة مرمز ب Base64. لعرض الاسم الشائع للموضوع (CN) والخصائص الأخرى لملف الشهادة، أدخل الأمر التالي:

    winpty openssl x509 -in device-cert.pem -text -noout
    
    Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-x509-device
        Validity
            Not Before: May  5 21:41:42 2022 GMT
            Not After : Jun  4 21:41:42 2022 GMT
        Subject: CN = my-x509-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7:
                    e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29:
                    ...
                    23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f:
                    9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85:
                    0e:cd:53
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
            X509v3 Authority Key Identifier:
                keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
    
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
    Signature Algorithm: sha256WithRSAEncryption
         82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a:
         ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1:
         ...
         cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c:
         ac:d2:49:b9:36:d2:b0:21
    

استخدام سلسلة شهادات

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

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

عند الانتهاء، يجب أن يكون لديك الملفات التالية:

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

استخدام تسجيل فردي

لإنشاء تسجيل فردي لاستخدامه في هذه المقالة، استخدم الأمر az iot dps enrollment create .

ينشئ الأمر التالي إدخال تسجيل فردي مع نهج التخصيص الافتراضي لمثيل DPS باستخدام شهادة الجهاز التي تحددها.

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type x509 --certificate-path {path to your certificate}
  • استبدل اسم مجموعة الموارد ومثيل DPS.

  • معرف التسجيل هو معرف التسجيل لجهازك، وبالنسبة لعمليات تسجيل X.509، يجب أن يتطابق مع الاسم الشائع للموضوع (CN) لشهادة الجهاز.

    • إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا، فإن معرف التسجيل هو جهازي x509.

    • إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات، فإن معرف التسجيل هو device-01.

  • مسار الشهادة هو المسار إلى شهادة جهازك.

    • إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا، فإن اسم الملف هو device-cert.pem.

    • إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات، فإن اسم الملف هو certs/device-01.cert.pem.

إشعار

إذا كنت تستخدم Cloud Shell لتشغيل أوامر Azure CLI، يمكنك استخدام زر التحميل لتحميل ملف الشهادة إلى محرك الأقراص السحابي قبل تشغيل الأمر.

لقطة شاشة تعرض زر ملف التحميل في Azure Cloud Shell.

استخدام مجموعة تسجيل

لإنشاء مجموعة تسجيل لاستخدامها في هذه المقالة، استخدم الأمر az iot dps enrollment-group create .

ينشئ الأمر التالي إدخال مجموعة تسجيل مع نهج التخصيص الافتراضي لمثيل DPS باستخدام شهادة CA وسيطة:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
  • استبدل اسم مجموعة الموارد ومثيل DPS.

  • معرف التسجيل هو سلسلة غير حساسة لحالة الأحرف الأبجدية الرقمية بالإضافة إلى الأحرف الخاصة: '-'، '.'، ، '_'. ':' يجب أن يكون الحرف الأخير أبجديا رقميا أو شرطة ('-'). يمكن أن يكون أي اسم تختار استخدامه لمجموعة التسجيل.

  • مسار الشهادة هو المسار إلى الشهادة المتوسطة. إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات، فإن اسم الملف هو certs/azure-iot-test-only.intermediate.cert.pem.

إشعار

إذا كنت تستخدم Cloud Shell لتشغيل أوامر Azure CLI، يمكنك استخدام زر التحميل لتحميل ملف الشهادة إلى محرك الأقراص السحابي قبل تشغيل الأمر.

لقطة شاشة تعرض زر ملف التحميل في Azure Cloud Shell.

إشعار

إذا كنت تفضل ذلك، يمكنك إنشاء مجموعة تسجيل استنادا إلى شهادة توقيع تم تحميلها مسبقا والتحقق منها باستخدام DPS (راجع القسم التالي). للقيام بذلك، يمكنك تحديد اسم الشهادة --ca-name مع وحذف المعلمة --certificate-path في az iot dps enrollment-group create الأمر .

تحميل شهادة توقيع والتحقق منها

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

  • بالنسبة للتسجيل الفردي، يمكن أن تكون هذه أي شهادة توقيع في سلسلة شهادات الجهاز.

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

لتحميل الشهادة والتحقق منها، استخدم الأمر az iot dps certificate create :

az iot dps certificate create -g {resource_group_name} --dps-name {dps_name} --certificate-name {friendly_name_for_your_certificate} --path {path_to_your_certificate} --verified true
  • استبدل اسم مجموعة الموارد ومثيل DPS.

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

  • يمكن أن يحتوي اسم الشهادة على أحرف أبجدية رقمية فقط أو الأحرف الخاصة التالية: -._. لا يسمح بمسافة بيضاء. على سبيل المثال، "azure-iot-test-only-root".

إشعار

إذا كنت تستخدم Cloud Shell لتشغيل أوامر Azure CLI، يمكنك استخدام زر التحميل لتحميل ملف الشهادة إلى محرك الأقراص السحابي قبل تشغيل الأمر.

لقطة شاشة تعرض زر ملف التحميل في Azure Cloud Shell.

إشعار

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

تسجيل جهازك

يمكنك استدعاء واجهة برمجة تطبيقات Register Device REST لتوفير جهازك من خلال DPS.

استخدم الأمر curl التالي:

curl -L -i -X PUT --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

المكان:

  • -L يخبر curl باتباع عمليات إعادة توجيه HTTP.

  • –i يخبر curl بتضمين عناوين البروتوكول في الإخراج. هذه الرؤوس ليست ضرورية تماما، ولكنها يمكن أن تكون مفيدة.

  • -X PUT يخبر curl أن هذا أمر HTTP PUT. مطلوب لاستدعاء واجهة برمجة التطبيقات هذا.

  • --cert [path_to_your_device_cert] يخبر curl بمكان العثور على شهادة X.509 لجهازك. إذا كان المفتاح الخاص بجهازك محميا بعبارة مرور، يمكنك إضافة عبارة المرور بعد مسار الشهادة الذي يسبقه نقطتان، على سبيل المثال: --cert my-device.pem:1234.

    • إذا كنت تستخدم شهادة موقعة ذاتيا، فسيحتوي ملف شهادة جهازك على شهادة X.509 واحدة فقط. إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا، فإن اسم الملف هو device-cert.pem وعبارة مرور المفتاح الخاص هي 1234، لذا استخدم --cert device-cert.pem:1234.

    • إذا كنت تستخدم سلسلة شهادات، على سبيل المثال، عند المصادقة من خلال مجموعة تسجيل، يجب أن يحتوي ملف شهادة الجهاز على سلسلة شهادات صالحة. يجب أن تتضمن سلسلة الشهادات شهادة الجهاز وأي شهادات توقيع تصل إلى شهادة تم التحقق منها وتضمينها. إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات لإنشاء سلسلة الشهادات، فإن مسار الملف هو certs/device-01-full-chain.cert.pem، لذا استخدم --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] يخبر curl بمكان العثور على المفتاح الخاص بجهازك.

    • إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا، فإن اسم الملف هو device-key.pem، لذا استخدم --key device-cert.pem:1234.

    • إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات، فإن مسار المفتاح هو certs/device-01-full-chain.cert.pem، لذا استخدم --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' يخبر DPS أننا ننشر محتوى JSON ويجب أن يكون "application/json"

  • -H 'Content-Encoding: utf-8' يخبر DPS الترميز الذي نستخدمه لنص الرسالة. تعيين إلى القيمة المناسبة لنظام التشغيل/العميل الخاص بك؛ ومع ذلك، فإنه بشكل utf-8عام .

  • -d '{"registrationId": "[registration_id]"}'، المعلمة –d هي "البيانات" أو نص الرسالة التي ننشرها. يجب أن يكون JSON، في شكل "{"registrationId":"[registration_id"}". لاحظ أنه بالنسبة إلى curl، يتم تضمينه في علامات اقتباس مفردة؛ وإلا، تحتاج إلى الهروب من علامات الاقتباس المزدوجة في JSON. لتسجيل X.509، معرف التسجيل هو الاسم الشائع للموضوع (CN) لشهادة جهازك.

  • وأخيرا، المعلمة الأخيرة هي عنوان URL للنشر إليه. بالنسبة إلى DPS "العادية" (أي غير المحلية)، يتم استخدام نقطة نهاية DPS العمومية، global.azure-devices-provisioning.net : https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. لاحظ أنه يجب عليك استبدال [dps_scope_id] و [registration_id] بالقيم المناسبة.

على سبيل المثال:

  • إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا:

    curl -L -i -X PUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "my-x509-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register?api-version=2021-06-01
    
  • إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات:

    curl -L -i -X PUT --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "device-01"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/device-01/register?api-version=2021-06-01
    

سيكون للاتصال الناجح استجابة مشابهة للآتي:

HTTP/1.1 202 Accepted
Date: Sat, 27 Aug 2022 17:53:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register
Retry-After: 3
x-ms-request-id: 05cdec07-c0c7-48f3-b3cd-30cfe27cbe57
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a","status":"assigning"}

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

قيم الحالة الصالحة ل DPS هي:

  • assigned: تشير القيمة المرجعة من استدعاء الحالة إلى مركز IoT الذي تم تعيين الجهاز إليه.

  • assigning: لا تزال العملية قيد التشغيل.

  • disabled: تم تعطيل سجل التسجيل في DPS، لذلك لا يمكن تعيين الجهاز.

  • failed: فشل التعيين. سيكون errorCode هناك و errorMessage يتم إرجاعه في registrationState سجل في الاستجابة للإشارة إلى ما فشل.

  • unassigned

لاستدعاء واجهة برمجة تطبيقات البحث عن حالة العملية، استخدم الأمر curl التالي:

curl -L -i -X GET --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

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

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

curl -L -i -X GET --cert ./device-certPUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/operations/5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a?api-version=2021-06-01

يظهر الإخراج التالي الاستجابة لجهاز تم تعيينه بنجاح. لاحظ أن الخاصية status هي assigned وأن الخاصية registrationState.assignedHub معينة إلى مركز IoT حيث تم توفير الجهاز.

HTTP/1.1 200 OK
Date: Sat, 27 Aug 2022 18:10:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: 8f211bc5-3ed8-4c8b-9a79-e003e756e9e4
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a",
   "status":"assigned",
   "registrationState":{
      "x509":{
         
      },
      "registrationId":"my-x509-device",
      "createdDateTimeUtc":"2022-08-27T17:53:19.5143497Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-x509-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-27T17:53:19.7519141Z",
      "etag":"IjEyMDA4NmYyLTAwMDAtMDMwMC0wMDAwLTYzMGE1YTBmMDAwMCI="
   }
}

دون معرف الجهاز ومركز IoT المعين. ستستخدمها لإرسال رسالة بيانات تتبع الاستخدام في القسم التالي.

إرسال رسالة بيانات تتبع الاستخدام

يمكنك استدعاء واجهة برمجة تطبيقات REST لحدث إرسال جهاز IoT Hub لإرسال بيانات تتبع الاستخدام إلى الجهاز.

استخدم الأمر curl التالي:

curl -L -i -X POST --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

المكان:

  • -X POST يخبر curl أن هذا أمر HTTP POST. مطلوب لاستدعاء واجهة برمجة التطبيقات هذا.

  • --cert [path_to_your_device_cert] يخبر curl بمكان العثور على شهادة X.509 لجهازك. إذا كان المفتاح الخاص بجهازك محميا بعبارة مرور، يمكنك إضافة عبارة المرور بعد مسار الشهادة الذي يسبقه نقطتان، على سبيل المثال: --cert my-device.pem:1234.

    • إذا كنت تستخدم شهادة موقعة ذاتيا، فسيحتوي ملف شهادة جهازك على شهادة X.509 واحدة فقط. إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا، فإن اسم الملف هو device-cert.pem وعبارة مرور المفتاح الخاص هي 1234، لذا استخدم --cert device-cert.pem:1234.

    • إذا كنت تستخدم سلسلة شهادات، يجب أن يحتوي ملف شهادة جهازك على سلسلة شهادات صالحة. إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات لإنشاء سلسلة الشهادات، فإن مسار الملف هو certs/device-01-full-chain.cert.pem، لذا استخدم --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] يخبر curl بمكان العثور على المفتاح الخاص بجهازك.

    • إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا، فإن اسم الملف هو device-key.pem، لذا استخدم --key device-cert.pem:1234.

    • إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات، فإن مسار المفتاح هو certs/device-01-full-chain.cert.pem، لذا استخدم --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' يخبر IoT Hub أننا ننشر محتوى JSON ويجب أن يكون "application/json".

  • -H 'Content-Encoding: utf-8' يخبر IoT Hub الترميز الذي نستخدمه لنص الرسالة. تعيين إلى القيمة المناسبة لنظام التشغيل/العميل الخاص بك؛ ومع ذلك، فإنه بشكل utf-8عام .

  • -d '{"temperature": 30}'، المعلمة –d هي "البيانات" أو نص الرسالة التي ننشرها. بالنسبة لهذه المقالة، نقوم بنشر نقطة بيانات درجة حرارة واحدة. تم تحديد نوع المحتوى على أنه application/json، لذلك، لهذا الطلب، النص الأساسي هو JSON. لاحظ أنه بالنسبة إلى curl، يتم تضمينه في علامات اقتباس مفردة؛ وإلا، تحتاج إلى الهروب من علامات الاقتباس المزدوجة في JSON.

  • المعلمة الأخيرة هي عنوان URL للنشر إليه. بالنسبة إلى واجهة برمجة تطبيقات حدث إرسال الجهاز، يكون عنوان URL هو: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • استبدل [assigned_iot_hub_name] باسم مركز IoT الذي تم تعيين جهازك إليه.

    • استبدل [device_id] بمعرف الجهاز الذي تم تعيينه عند تسجيل جهازك. بالنسبة للأجهزة التي توفر من خلال مجموعات التسجيل، سيكون معرف الجهاز هو معرف التسجيل. بالنسبة للتسجيلات الفردية، يمكنك، اختياريا، تحديد معرف جهاز يختلف عن معرف التسجيل في إدخال التسجيل.

على سبيل المثال:

  • إذا اتبعت الإرشادات الواردة في استخدام شهادة موقعة ذاتيا:

    curl -L -i -X POST --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    
  • إذا اتبعت الإرشادات الواردة في استخدام سلسلة شهادات:

    curl -L -i -X POST --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    

سيكون للاتصال الناجح استجابة مشابهة للآتي:

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: aa58c075-20d9-4565-8058-de6dc8524f14
Date: Wed, 31 Aug 2022 18:34:44 GMT

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

  • لمعرفة المزيد حول التصديق باستخدام شهادات X.509، راجع شهادة شهادة X.509.

  • لمعرفة المزيد حول تحميل شهادات X.509 والتحقق منها، راجع تكوين شهادات المرجع المصدق التي تم التحقق منها.