إنشاء مجموعة تسجيل خدمة توفير الأجهزة برمجيا لإثبات شهادة X.509
توضح هذه المقالة كيفية إنشاء مجموعة تسجيل برمجيا في Azure IoT Hub Device Provisioning Service (DPS) التي تستخدم شهادات CA X.509 وسيطة أو جذرية. يتم إنشاء مجموعة التسجيل باستخدام Azure IoT service SDK ونموذج التطبيق. تتحكم مجموعة التسجيل في الوصول إلى خدمة التوفير للأجهزة التي تشترك في شهادة توقيع مشتركة في سلسلة الشهادات الخاصة بها. لمعرفة المزيد، راجع استخدام شهادات X.509 مع DPS. لمزيد من المعلومات حول استخدام شهاداتX.509 القائمة على البنية التحتية للمفتاح العام (PKI) بواسطة مركز إنترنت الأشياء الخاص بـAzure، وخدمة تشغيل الأجهزة، راجع نظرة عامة على تأمين شهادات المرجع المصدقX.509.
المتطلبات الأساسية
في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.
إكمال الخطوات في إعداد خدمة تزويد الأجهزة بمركز IoT باستخدام مدخل Microsoft Azure.
قم بتثبيت .NET 6.0 SDK أو أحدث أو أحدث على جهازك المستند إلى Windows. يمكنك استخدام الأمر التالي للتحقق من الإصدار الخاص بك.
dotnet --info
- تثبيت Node.js v4.0 أو أحدث أو أحدث على جهازك.
حزمة تطور Java SE 8. تستخدم هذه المقالة Azure IoT SDK ل Java، والذي يعمل على كل من Windows وLinux. تستخدم هذه المقالة Windows.
- تثبيت آخر إصدار من 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 وسيطة في سلسلة الشهادات، يمكنك، بدلا من ذلك، تحميل والتحقق من أي شهادة وسيطة تقع بين شهادة المرجع المصدق الجذر والشهادة المتوسطة التي تقوم بإنشاء مجموعة التسجيل بها.)
لإضافة شهادة المرجع المصدق الجذر أو المتوسطة والتحقق منها إلى خدمة توفير الأجهزة:
قم بتسجيل الدخول إلى بوابة Azure.
في القائمة اليسرى أو في صفحة المدخل، حدد جميع الموارد.
تحديد خدمة تزويد الأجهزة خاصتك.
في قائمة الإعدادات ، حدد الشهادات.
من القائمة العلوية، حدد + إضافة:.
أدخل اسما لشهادة المرجع المصدق الجذر أو المتوسطة، وقم بتحميل ملف .pem أو .cer .
حدد تعيين حالة الشهادة للتحقق منها عند التحميل.
حدد حفظ.
احصل على سلسلة الاتصال لخدمة التشغيل
للحصول على عينة في هذه المقالة، تحتاج إلى سلسلة الاتصال لخدمة التزويد الخاصة بك. استخدم الخطوات التالية لاسترداده.
قم بتسجيل الدخول إلى بوابة Azure.
في القائمة اليسرى أو في صفحة المدخل، حدد جميع الموارد.
تحديد خدمة تزويد الأجهزة خاصتك.
في قائمة الإعدادات حدد نُهج الوصول المشتركة.
حدد نهج الوصول الذي تريد استخدامه.
في لوحة نهج الوصول، انسخ سلسلة اتصال المفتاح الأساسي واحفظها.
قم بإنشاء عينة مجموعة التسجيل
يوضح هذا القسم لك كيفية إنشاء تطبيق وحدة تحكم .NET Core والذي يضيف مجموعة تسجيل إلى خدمة التزويد خاصتك.
افتح موجه أوامر Windows وانتقل إلى مجلد حيث تريد إنشاء تطبيقك.
لإنشاء مشروع وحدة تحكم، قم بتشغيل الأمر التالي:
dotnet new console --framework net6.0 --use-program-main
لإضافة مرجع إلى خدمة DPS SDK، قم بتشغيل الأمر التالي:
dotnet add package Microsoft.Azure.Devices.Provisioning.Service
تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة NuGet لعميل خدمة Azure IoT DPS وتبعياتها. تتضمن هذه الحزمة الثنائيات لخدمة .NET SDK.
افتح ملف Program.cs في محرر.
استبدل عبارة مساحة الاسم في أعلى الملف بالسطر التالي:
namespace CreateEnrollmentGroup;
أضف العبارات التالية
using
في أعلى الملف أعلى العبارةnamespace
:using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Microsoft.Azure.Devices.Provisioning.Service;
أضف الحقول التالية إلى
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. يمثل هذا الملف الجزء العام إما من شهادة المرجع المصدق الجذر X.509 التي تم تحميلها والتحقق منها مسبقا باستخدام خدمة التوفير الخاصة بك، أو شهادة وسيطة تم تحميلها والتحقق منها أو تم تحميل شهادة في سلسلة التوقيع الخاصة بها والتحقق منها.يمكنك تغيير
EnrollmentGroupId
القيمة اختياريا. تحتوي السلسلة فقط على أحرف صغيرة وشرطات.
هام
في التعليمات البرمجية للمنتج، كن حذراً من الاعتبارات الأمنية التالية:
- يتعارض الترميز المضمن لسلسلة الاتصال فيما يتعلق بمسؤول خدمة التشغيل مع أفضل الممارسات الأمنية. بدلاً من ذلك، ينبغي عمل سلسلة الاتصال بأسلوب آمن، مثل الموجود في أحد ملفات التكوين الآمن أو في السجل.
- تأكد من رفع الجزء العام فقط لشهادة الدخول. لا ترفع أبداً ملفات .pfx (PKCS12) أو .pem التي تحتوي على مفاتيح خاصة لعملية تقديم الخدمات.
إضافة الأسلوب التالي إلى الفئة
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 } }
وأخيراً، استبدل الأسلوب
Main
بالسطور التالية:static async Task Main(string[] args) { await RunSample(); Console.WriteLine("\nHit <Enter> to exit ..."); Console.ReadLine(); }
احفظ تغييراتك.
يوضح لك هذا القسم كيفية إنشاء برنامج نصي Node.js يضيف مجموعة تسجيل إلى خدمة التزويد الخاصة بك.
تلميح
للتبسيط، يستخدم هذا النموذج مصادقة SAS للاتصال بواجهة برمجة تطبيقات خدمة DPS. نهج أكثر أمانا هو استخدام بيانات اعتماد الرمز المميز ل Azure. للحصول على مثال لأسلوب المصادقة هذا، راجع نموذج create_tpm_enrollment_with_token_credentials.js في Node.js SDK.
من إطار أمر في مجلد العمل، قم بتشغيل:
npm install azure-iot-provisioning-service
تقوم هذه الخطوة بتنزيل وتثبيت وإضافة مرجع إلى حزمة عميل خدمة Azure IoT DPS وتبعياتها. تتضمن هذه الحزمة الثنائيات لخدمة Node.js SDK.
باستخدام محرر نصوص، قم بإنشاء ملف 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)); } }); } });
افتح موجه أوامر Windows.
استنساخ GitHub repo لعينة التعليمات البرمجية لتسجيل الجهاز باستخدام Java Service SDK:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
من الموقع حيث قمت بتنزيل المستودع، انتقل إلى مجلد العينة:
cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample
افتح ملف /src/main/java/samples/com/microsoft/azure/sdk/iot/ServiceEnrollmentGroupSample.java: في محرر من اختيارك.
استبدال
[Provisioning Connection String]
بسلسلة الاتصال التي قمت بنسخها في الحصول على سلسلة الاتصال لخدمة التوفير الخاصة بك.PUBLIC_KEY_CERTIFICATE_STRING
استبدل السلسلة الثابتة بقيمة ملف شهادة.pem
المرجع المصدق الجذر أو المتوسط. يمثل هذا الملف الجزء العام إما من شهادة المرجع المصدق الجذر 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 التي تحتوي على مفاتيح خاصة لعملية تقديم الخدمات.
تسمح لك العينة بتعيين مركز IoT في مجموعة التسجيل لتوفير الجهاز إليه. يجب أن يكون هذا مركز IoT تم ربطه مسبقا بخدمة التزويد. بالنسبة لهذه المقالة، نسمح ل DPS بالاختيار من بين المراكز المرتبطة وفقا لنهج التخصيص الافتراضي، والتوزيع المرجح بالتساوي. التعليق خارج العبارة التالية في الملف:
enrollmentGroup.setIotHubHostName(IOTHUB_HOST_NAME); // Optional parameter.
يقوم نموذج التعليمات البرمجية بإنشاء وتحديث واستعلامات وحذف مجموعة تسجيل لأجهزة X.509. للتحقق من الإنشاء الناجح لمجموعة التسجيل في مدخل Microsoft Azure، قم بالتعليق على الأسطر التالية من التعليمات البرمجية بالقرب من نهاية الملف:
// ************************************** Delete info of enrollmentGroup *************************************** System.out.println("\nDelete the enrollmentGroup..."); provisioningServiceClient.deleteEnrollmentGroup(enrollmentGroupId);
احفظ ملف ServiceEnrollmentGroupSample.java.
شغل نموذج مجموعة تسجيل
قم بتشغيل العينة:
dotnet run
عند الإنشاء الناجح، تعرض نافذة الأوامر خصائص مجموعة التسجيل الجديدة.
قم بتشغيل الأمر التالي في موجه الأوامر. قم بتضمين علامات الاقتباس حول وسيطات الأمر واستبدلها
<connection string>
سلسلة الاتصال نسختها في القسم السابق، ومع<certificate .pem file>
المسار إلى ملف الشهادة.pem
. يمثل هذا الملف الجزء العام إما من شهادة المرجع المصدق الجذر X.509 التي تم تحميلها والتحقق منها مسبقا باستخدام خدمة التوفير الخاصة بك، أو شهادة وسيطة تم تحميلها والتحقق منها أو تم تحميل شهادة في سلسلة التوقيع الخاصة بها والتحقق منها.node create_enrollment_group.js "<connection string>" "<certificate .pem file>"
عند الإنشاء الناجح، تعرض نافذة الأوامر خصائص مجموعة التسجيل الجديدة.
من مجلد azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-group-sample في موجه الأوامر، قم بتشغيل الأمر التالي لإنشاء النموذج:
mvn install -DskipTests
يقوم هذا الأمر بتنزيل حزمة Maven لعميل خدمة Azure IoT DPS إلى جهازك وإنشاء العينة. تتضمن هذه الحزمة الثنائيات لخدمة Java SDK.
قم بالتبديل إلى المجلد الهدف وقم بتشغيل العينة. تقوم البنية في الخطوة السابقة بإخراج .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
عند الإنشاء الناجح، تعرض نافذة الأوامر خصائص مجموعة التسجيل الجديدة.
للتحقق من إنشاء مجموعة التسجيل:
في قائمة الإعدادات، حدد "إدارة التسجيلات".
حدد علامة التبويب Enrollment groups. يجب أن تشاهد إدخال تسجيل جديد يتوافق مع معرف مجموعة التسجيل الذي استخدمته في العينة.
تنظيف الموارد
إذا كنت تخطط لاستكشاف البرامج التعليمية لخدمة توفير جهاز Azure IoT Hub، فلا تنظف الموارد التي تم إنشاؤها في هذه المقالة. وإلا، استخدم الخطوات التالية لحذف كافة الموارد التي تم إنشاؤها بواسطة هذه المقالة.
إغلاق نافذة إخراج النموذج على جهازك.
في مدخل Azure، حدد All resources في القائمة اليسرى.
تحديد خدمة تزويد الأجهزة خاصتك.
في القائمة اليسرى ضمن Settings، حدد Manage enrollments.
حدد علامة التبويب Enrollment groups.
حدد خانة الاختيار بجوار اسم المجموعة لمجموعة التسجيل التي أنشأتها في هذه المقالة.
في الجزء العلوي من الصفحة، حدد حذف.
من Device Provisioning Service في مدخل Microsoft Azure، حدد Certificates ضمن Settings في القائمة اليسرى.
حدد الشهادة التي قمت بتحميلها لهذه المقالة.
في أعلى تفاصيل الشهادة، حدد حذف.
أدوات الشهادة
يحتوي 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. لاستكشاف المزيد، تحقق من الروابط التالية:
لمزيد من المعلومات حول إثبات شهادة X.509 باستخدام DPS، راجع إثبات شهادة X.509.
للحصول على مثال شامل لتوفير الأجهزة من خلال مجموعة تسجيل باستخدام شهادات X.509، راجع البرنامج التعليمي توفير أجهزة X.509 متعددة باستخدام مجموعات التسجيل.
للتعرف على إدارة التسجيلات الفردية ومجموعات التسجيل باستخدام مدخل Microsoft Azure، راجع كيفية إدارة عمليات تسجيل الجهاز باستخدام مدخل Microsoft Azure.