إنشاء مجموعة تسجيل خدمة توفير الأجهزة برمجيا لإثبات شهادة X.509

توضح هذه المقالة كيفية إنشاء مجموعة تسجيل برمجيا تستخدم شهادات CA X.509 المتوسطة أو الجذر. يتم إنشاء مجموعة التسجيل باستخدام Azure IoT Hub DPS service SDK ونموذج التطبيق. تتحكم مجموعة التسجيل في الوصول إلى خدمة التوفير للأجهزة التي تشترك في شهادة توقيع مشتركة في سلسلة الشهادات الخاصة بها. لمعرفة المزيد، راجع التحكم في الوصول إلى الجهاز باستخدام شهادات X.509. لمزيد من المعلومات حول استخدام شهاداتX.509 القائمة على البنية التحتية للمفتاح العام (PKI) بواسطة مركز إنترنت الأشياء الخاص بـAzure، وخدمة تشغيل الأجهزة، راجع نظرة عامة على تأمين شهادات المرجع المصدقX.509.

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

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

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

إشعار

رغم أن الخطوات في هذه المقالة تعمل على نظامي الحاسب الآلي Windows وLinux، تستخدم هذه المقالة حاسب آلي مطور بنظام تشغيل Windows.

إنشاء شهادات اختبار

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

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

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

إذا لم يكن لديك ملف CA جذر و/أو ملف CA وسيط، فاتبع الخطوات الواردة في إنشاء سلسلة شهادات X.509 لإنشائها. يمكنك التوقف بعد إكمال الخطوات في إنشاء شهادة المرجع المصدق الوسيطة حيث لا تحتاج إلى شهادات الجهاز لإكمال الخطوات الواردة في هذه المقالة. عند الانتهاء، يكون لديك ملفي شهادة X.509: ./certs/azure-iot-test-only.root.ca.cert.pem و ./certs/azure-iot-test-only.intermediate.cert.pem.

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

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

بالنسبة لهذه المقالة، بافتراض أن لديك كل من شهادة المرجع المصدق الجذر وشهادة CA وسيطة موقعة من قبل المرجع المصدق الجذر:

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

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

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

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. في القائمة اليسرى أو في صفحة المدخل، حدد جميع الموارد.

  3. تحديد خدمة تزويد الأجهزة خاصتك.

  4. في القائمة الإعدادات، حدد Certificates.

  5. من القائمة العلوية، حدد + إضافة:.

  6. أدخل اسما لشهادة المرجع المصدق الجذر أو المتوسطة، وقم بتحميل ملف .pem أو .cer .

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

    لقطة شاشة توضح إضافة شهادة المرجع المصدق الجذر إلى مثيل DPS.

  8. حدد حفظ.

احصل على سلسلة الاتصال لخدمة التشغيل

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

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. في القائمة اليسرى أو في صفحة المدخل، حدد جميع الموارد.

  3. تحديد خدمة تزويد الأجهزة خاصتك.

  4. في قائمة الإعدادات حدد نُهج الوصول المشتركة.

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

  6. في لوحة نهج الوصول، انسخ سلسلة اتصال المفتاح الأساسي واحفظها.

    لقطة شاشة تعرض موقع خدمة التزويد سلسلة الاتصال في المدخل.

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

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

  1. افتح موجه أوامر Windows وانتقل إلى مجلد حيث تريد إنشاء تطبيقك.

  2. لإنشاء مشروع وحدة تحكم، قم بتشغيل الأمر التالي:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. لإضافة مرجع إلى خدمة DPS SDK، قم بتشغيل الأمر التالي:

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة NuGet لعميل خدمة Azure IoT DPS وتبعياتها. تتضمن هذه الحزمة الثنائيات لخدمة .NET SDK.

  4. افتح ملف Program.cs في محرر.

  5. استبدل عبارة مساحة الاسم في أعلى الملف بالسطر التالي:

    namespace CreateEnrollmentGroup;
    
  6. أضف العبارات التالية using في أعلى الملف أعلى العبارة namespace :

    using System.Security.Cryptography.X509Certificates;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. أضف الحقول التالية إلى Program الفئة، وقم بإجراء التغييرات المشار إليها.

    private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
    private static string EnrollmentGroupId = "enrollmentgrouptest";
    private static string X509RootCertPath = @"{Path to a .cer or .pem file for a verified root CA or intermediate CA X.509 certificate}";
    
    • استبدل قيمة العنصر النائب ProvisioningServiceConnectionString بسلسلة الاتصال الخاصة بخدمة التزويد التي نسختها في القسم السابق.

    • استبدل قيمة العنصر النائب X509RootCertPath باستخدام المسار a .pem أو .cer file. يمثل هذا الملف الجزء العام إما من شهادة CA X.509 الجذر التي تم تحميلها مسبقا والتحقق منها باستخدام خدمة التوفير الخاصة بك، أو شهادة وسيطة تم تحميلها والتحقق منها أو تم تحميل شهادة في سلسلة التوقيع الخاصة بها والتحقق منها.

    • قد تُغير القيمة EnrollmentGroupId اختيارياً. تحتوي السلسلة فقط على أحرف صغيرة وشرطات.

    هام

    في التعليمات البرمجية للمنتج، كن حذراً من الاعتبارات الأمنية التالية:

    • يتعارض الترميز المضمن لسلسلة الاتصال فيما يتعلق بمسؤول خدمة التشغيل مع أفضل الممارسات الأمنية. بدلاً من ذلك، ينبغي عمل سلسلة الاتصال بأسلوب آمن، مثل الموجود في أحد ملفات التكوين الآمن أو في السجل.
    • تأكد من رفع الجزء العام فقط لشهادة الدخول. لا ترفع أبداً ملفات .pfx (PKCS12) أو .pem التي تحتوي على مفاتيح خاصة لعملية تقديم الخدمات.
  8. إضافة الأسلوب التالي إلى الفئة Program. تنشئ هذه التعليمة البرمجية إدخالا EnrollmentGroup ثم تستدعي ProvisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync الأسلوب لإضافة مجموعة التسجيل إلى خدمة التزويد.

    public static async Task RunSample()
    {
        Console.WriteLine("Starting sample...");
    
        using (ProvisioningServiceClient provisioningServiceClient =
                ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString))
        {
            #region Create a new enrollmentGroup config
            Console.WriteLine("\nCreating a new enrollmentGroup...");
            var certificate = new X509Certificate2(X509RootCertPath);
            Attestation attestation = X509Attestation.CreateFromRootCertificates(certificate);
            EnrollmentGroup enrollmentGroup =
                    new EnrollmentGroup(
                            EnrollmentGroupId,
                            attestation)
                    {
                        ProvisioningStatus = ProvisioningStatus.Enabled
                    };
            Console.WriteLine(enrollmentGroup);
            #endregion
    
            #region Create the enrollmentGroup
            Console.WriteLine("\nAdding new enrollmentGroup...");
            EnrollmentGroup enrollmentGroupResult =
                await provisioningServiceClient.CreateOrUpdateEnrollmentGroupAsync(enrollmentGroup).ConfigureAwait(false);
            Console.WriteLine("\nEnrollmentGroup created with success.");
            Console.WriteLine(enrollmentGroupResult);
            #endregion
    
        }
    }
    
  9. وأخيراً، استبدل الأسلوب Main بالسطور التالية:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. احفظ تغييراتك.

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

  1. من إطار أمر في مجلد العمل، قم بتشغيل:

    npm install azure-iot-provisioning-service
    

    تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة عميل خدمة Azure IoT DPS وتبعياتها. تتضمن هذه الحزمة الثنائيات لخدمة Node.js SDK.

  2. باستخدام محرر نصوص، قم بإنشاء ملف create_enrollment_group.js في مجلد العمل. أضف الكود التالي إلى الملف واحفظه:

        'use strict';
        var fs = require('fs');
    
        var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient;
    
        var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]);
    
        var enrollment = {
          enrollmentGroupId: 'first',
          attestation: {
            type: 'x509',
            x509: {
              signingCertificates: {
                primary: {
                  certificate: fs.readFileSync(process.argv[3], 'utf-8').toString()
                }
              }
            }
          },
          provisioningStatus: 'disabled'
        };
    
        serviceClient.createOrUpdateEnrollmentGroup(enrollment, function(err, enrollmentResponse) {
          if (err) {
            console.log('error creating the group enrollment: ' + err);
          } else {
            console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
            enrollmentResponse.provisioningStatus = 'enabled';
            serviceClient.createOrUpdateEnrollmentGroup(enrollmentResponse, function(err, enrollmentResponse) {
              if (err) {
                console.log('error updating the group enrollment: ' + err);
              } else {
                console.log("updated enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
              }
            });
          }
        });
    

  1. افتح موجه أوامر Windows.

  2. استنساخ GitHub repo لعينة التعليمات البرمجية لتسجيل الجهاز باستخدام Java Service SDK:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. من الموقع حيث قمت بتنزيل المستودع، انتقل إلى مجلد العينة:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample 
    
  4. افتح ملف /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java: في محرر من اختيارك.

  5. استبدال [Provisioning Connection String] بسلسلة الاتصال التي قمت بنسخها في الحصول على سلسلة الاتصال لخدمة التوفير الخاصة بك.

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

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

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

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

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

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

    هام

    في التعليمات البرمجية للمنتج، كن حذراً من الاعتبارات الأمنية التالية:

    • يتعارض الترميز المضمن لسلسلة الاتصال فيما يتعلق بمسؤول خدمة التشغيل مع أفضل الممارسات الأمنية. بدلاً من ذلك، ينبغي عمل سلسلة الاتصال بأسلوب آمن، مثل الموجود في أحد ملفات التكوين الآمن أو في السجل.
    • تأكد من رفع الجزء العام فقط لشهادة الدخول. لا ترفع أبداً ملفات .pfx (PKCS12) أو .pem التي تحتوي على مفاتيح خاصة لعملية تقديم الخدمات.
  7. تسمح لك العينة بتعيين مركز IoT في مجموعة التسجيل لتوفير الجهاز إليه. يجب أن يكون هذا مركز IoT تم ربطه مسبقا بخدمة التوفير. بالنسبة لهذه المقالة، نسمح ل DPS بالاختيار من بين المراكز المرتبطة وفقا لنهج التخصيص الافتراضي، والتوزيع المرجح بالتساوي. التعليق خارج العبارة التالية في الملف:

    enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME);                // Optional parameter.
    
  8. يقوم نموذج التعليمات البرمجية بإنشاء وتحديث واستعلامات وحذف مجموعة تسجيل لأجهزة X.509. للتحقق من الإنشاء الناجح لمجموعة التسجيل في مدخل Microsoft Azure، قم بالتعليق على الأسطر التالية من التعليمات البرمجية بالقرب من نهاية الملف:

    // ************************************** Delete info of enrollmentGroup ***************************************
    System.out.println("\nDelete the enrollmentGroup...");
    provisioningServiceClient.deleteEnrollmentGroup(enrollmentGroupId);
    
  9. احفظ ملف ServiceEnrollmentGroupSample.java.

شغل نموذج مجموعة تسجيل

  1. قم بتشغيل العينة:

    dotnet run
    
  2. عند الإنشاء الناجح، تعرض نافذة الأوامر خصائص مجموعة التسجيل الجديدة.

  1. قم بتشغيل الأمر التالي في موجه الأوامر. قم بتضمين علامات الاقتباس حول وسيطات الأمر واستبدلها <connection string> سلسلة الاتصال نسختها في القسم السابق، ومع <certificate .pem file> المسار إلى ملف الشهادة.pem. يمثل هذا الملف الجزء العام إما من شهادة CA X.509 الجذر التي تم تحميلها مسبقا والتحقق منها باستخدام خدمة التوفير الخاصة بك، أو شهادة وسيطة تم تحميلها والتحقق منها أو تم تحميل شهادة في سلسلة التوقيع الخاصة بها والتحقق منها.

    node create_enrollment_group.js "<connection string>" "<certificate .pem file>"
    
  2. عند الإنشاء الناجح، تعرض نافذة الأوامر خصائص مجموعة التسجيل الجديدة.

  1. من مجلد azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample في موجه الأوامر، قم بتشغيل الأمر التالي لإنشاء النموذج:

    mvn install -DskipTests
    

    يقوم هذا الأمر بتنزيل حزمة Maven لعميل خدمة Azure IoT DPS إلى جهازك وإنشاء العينة. تتضمن هذه الحزمة الثنائيات لخدمة Java SDK.

  2. قم بالتبديل إلى المجلد الهدف وقم بتشغيل العينة. تقوم البنية في الخطوة السابقة بإخراج .jar الملف في المجلد الهدف بتنسيق الملف التالي: provisioning-x509-sample-{version}-with-deps.jar؛ على سبيل المثال: provisioning-x509-sample-1.8.1-with-deps.jar. قد تحتاج إلى استبدال الإصدار في الأمر أدناه.

    cd target
    java -jar ./service-enrollment-group-sample-1.8.1-with-deps.jar
    
  3. عند الإنشاء الناجح، تعرض نافذة الأوامر خصائص مجموعة التسجيل الجديدة.

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

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

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

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

لقطة شاشة تعرض مجموعة التسجيل التي تم إنشاؤها حديثا في المدخل.

لقطة شاشة تعرض مجموعة التسجيل التي تم إنشاؤها حديثا في المدخل.

لقطة شاشة تعرض مجموعة التسجيل التي تم إنشاؤها حديثا في المدخل.

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

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

  1. إغلاق نافذة إخراج النموذج على جهازك.

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

  3. تحديد خدمة تزويد الأجهزة خاصتك.

  4. في القائمة اليسرى ضمن الإعدادات، حدد إدارة التسجيلات.

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

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

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

  8. من Device Provisioning Service في مدخل Microsoft Azure، حدد Certificates ضمن الإعدادات في القائمة اليسرى.

  9. حدد الشهادة التي قمت بتحميلها لهذه المقالة.

  10. في أعلى تفاصيل الشهادة، حدد حذف.

أدوات الشهادة

يحتوي Azure IoT C SDK على برامج نصية يمكن أن تساعدك على إنشاء الشهادات وإدارتها. لمعرفة المزيد، راجع إدارة شهادات CA الاختبارية للعينات والبرامج التعليمية.

يحتوي Azure IoT Node.js SDK على برامج نصية يمكن أن تساعدك على إنشاء الشهادات وإدارتها. لمعرفة المزيد، راجع أدوات Azure IoT Device Provisioning Device SDK Node.js.

يمكنك أيضا استخدام الأدوات المتوفرة في Azure IoT C SDK. لمعرفة المزيد، راجع إدارة شهادات CA الاختبارية للعينات والبرامج التعليمية.

يحتوي Azure IoT Java SDK على أدوات اختبار يمكن أن تساعدك على إنشاء الشهادات وإدارتها. لمعرفة المزيد، راجع منشئ شهادة X509 باستخدام محاكي DICE.

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

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