كيفية توصيل الأجهزة بشهادات X.509 بتطبيق IoT Central

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

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

يعتمد هذا الدليل على العينات الموضحة في إنشاء تطبيق عميل وتوصيله بالبرنامج التعليمي لتطبيق Azure IoT Central الذي يستخدم C# وJava وJavaScript وPython. للحصول على مثال يستخدم لغة البرمجة C، راجع توفير أجهزة X.509 متعددة باستخدام مجموعات التسجيل.

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

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

في هذا الدليل الإرشادي، يمكنك إنشاء بعض شهادات X.509 الاختبار. لكي تتمكن من إنشاء هذه الشهادات، تحتاج إلى:

  • جهاز تطوير مع تثبيت الإصدار 6 Node.js أو أحدث. يمكنك تشغيل node --version في سطر الأوامر للتحقق من الإصدار الخاص بك. تفترض الإرشادات الواردة في هذا البرنامج التعليمي أنك تقوم بتشغيل أمر العقدة في موجه أوامر Windows. ومع ذلك، يمكنك استخدام Node.js على العديد من أنظمة التشغيل الأخرى.
  • نسخة محلية من Microsoft Azure IoT SDK Node.js مستودع GitHub الذي يحتوي على البرامج النصية لإنشاء شهادات X.509 الاختبار. استخدم هذا الرابط لتنزيل نسخة من المستودع: Download ZIP. ثم فك الملف إلى موقع مناسب على جهازك المحلي.

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

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

إنشاء شهادات الجذر والجهاز

في هذا القسم، يمكنك استخدام شهادة X.509 لتوصيل جهاز بشهادة مشتقة من شهادة مجموعة تسجيل IoT Central.

تحذير

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

  1. انتقل إلى البرنامج النصي لمنشئ الشهادة في Microsoft Azure IoT SDK Node.js قمت بتنزيله. قم بتثبيت الحزم المطلوبة:

    cd azure-iot-sdk-node/provisioning/tools
    npm install
    
  2. إنشاء شهادة جذر ثم اشتقاق شهادة جهاز عن طريق تشغيل البرنامج النصي:

    node create_test_cert.js root mytestrootcert
    node create_test_cert.js device sample-device-01 mytestrootcert
    

    تلميح

    يمكن أن يحتوي معرف الجهاز على أحرف وأرقام وحرف - .

تنتج هذه الأوامر الجذر التالي وشهادات الجهاز:

filename المحتويات
mytestrootcert_cert.pem الجزء العام من شهادة X509 الجذر
mytestrootcert_key.pem المفتاح الخاص لشهادة X509 الجذر
mytestrootcert_fullchain.pem سلسلة المفاتيح بأكملها لشهادة X509 الجذر.
mytestrootcert.pfx ملف PFX لشهادة X509 الجذر.
sampleDevice01_cert.pem الجزء العام من شهادة X509 للجهاز
sampleDevice01_key.pem المفتاح الخاص لشهادة X509 للجهاز
sampleDevice01_fullchain.pem سلسلة المفاتيح بأكملها لشهادة X509 للجهاز.
sampleDevice01.pfx ملف PFX لشهادة X509 للجهاز.

دون ملاحظة عن موقع هذه الملفات. ستحتاجها لاحقًا.

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

  1. افتح تطبيق IoT Central وانتقل إلى Permissions في الجزء الأيمن وحدد Device connection groups.

  2. حدد + جديد لإنشاء مجموعة تسجيل جديدة تسمى MyX509Group بنوع تصديق من الشهادات (X.509). يمكنك إنشاء مجموعات تسجيل لأجهزة IoT أو أجهزة IoT Edge.

  3. في مجموعة التسجيل التي أنشأتها، حدد إدارة الأساسي.

  4. في لوحة الشهادة الأساسية، حدد إضافة شهادة.

  5. قم بتحميل ملف الشهادة الجذر المسمى mytestrootcert_cert.pem الذي قمت بإنشاؤه مسبقا.

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

  7. إذا قمت بتعيين حالة الشهادة التي تم التحقق منها عند التحميل إلى إيقاف التشغيل، فحدد إنشاء رمز التحقق.

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

    node create_test_cert.js verification --ca mytestrootcert_cert.pem --key mytestrootcert_key.pem --nonce  {verification-code}
    
  9. حدد التحقق لتحميل شهادة التحقق الموقعة verification_cert.pem لإكمال التحقق.

  10. تم الآن التحقق من حالة الشهادة الأساسية:

    Screenshot that shows a verified X509 certificate.

يمكنك الآن توصيل الأجهزة التي تحتوي على شهادة X.509 مشتقة من شهادة الجذر الأساسية هذه.

بعد حفظ مجموعة التسجيل، دون ملاحظة لنطاق المعرف. ستحتاجها لاحقًا.

تشغيل نموذج التعليمات البرمجية للجهاز

إذا كنت تستخدم Windows، يجب أن تكون شهادات X.509 في مخزن شهادات Windows لكي يعمل النموذج. في مستكشف Windows، انقر نقرا مزدوجا فوق ملفات PFX التي أنشأتها مسبقا - mytestrootcert.pfx و sampleDevice01.pfx. في معالج استيراد الشهادات، حدد المستخدم الحالي كموقع المتجر، وأدخل 1234 ككلمة مرور، واترك المعالج يختار مخزن الشهادات تلقائيا. يستورد المعالج الشهادات إلى المخزن الشخصي للمستخدم الحالي.

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. في حل IoTHubDeviceSamples Visual Studio، افتح ملف Parameter.cs في مشروع TemperatureController .

  2. أضف تعريفي المعلمة التاليين إلى الفئة :

    [Option(
        'x',
        "CertificatePath",
        HelpText = "(Required if DeviceSecurityType is \"dps\"). \nThe device PFX file to use during device provisioning." +
        "\nDefaults to environment variable \"IOTHUB_DEVICE_X509_CERT\".")]
    public string CertificatePath { get; set; } = Environment.GetEnvironmentVariable("IOTHUB_DEVICE_X509_CERT");
    
    [Option(
        'p',
        "CertificatePassword",
        HelpText = "(Required if DeviceSecurityType is \"dps\"). \nThe password of the PFX certificate file." +
        "\nDefaults to environment variable \"IOTHUB_DEVICE_X509_PASSWORD\".")]
    public string CertificatePassword { get; set; } = Environment.GetEnvironmentVariable("IOTHUB_DEVICE_X509_PASSWORD");
    

    ا‏‏حفظ التغييرات.

  3. في حل IoTHubDeviceSamples Visual Studio، افتح ملف Program.cs في مشروع TemperatureController .

  4. أضف عبارات using التالية:

    using System.Security.Cryptography.X509Certificates;
    using System.IO;
    
  5. إضافة الأسلوب التالي إلى الفئة :

    private static X509Certificate2 LoadProvisioningCertificate(Parameters parameters)
    {
        var certificateCollection = new X509Certificate2Collection();
        certificateCollection.Import(
            parameters.CertificatePath,
            parameters.CertificatePassword,
            X509KeyStorageFlags.UserKeySet);
    
        X509Certificate2 certificate = null;
    
        foreach (X509Certificate2 element in certificateCollection)
        {
            Console.WriteLine($"Found certificate: {element?.Thumbprint} {element?.Subject}; PrivateKey: {element?.HasPrivateKey}");
            if (certificate == null && element.HasPrivateKey)
            {
                certificate = element;
            }
            else
            {
                element.Dispose();
            }
        }
    
        if (certificate == null)
        {
            throw new FileNotFoundException($"{parameters.CertificatePath} did not contain any certificate with a private key.");
        }
    
        Console.WriteLine($"Using certificate {certificate.Thumbprint} {certificate.Subject}");
    
        return certificate;
    }
    
  6. في SetupDeviceClientAsync الأسلوب ، استبدل كتلة التعليمات البرمجية للتعليمات البرمجية للتعليمات case "dps" البرمجية التالية:

    case "dps":
        s_logger.LogDebug($"Initializing via DPS");
        Console.WriteLine($"Loading the certificate...");
        X509Certificate2 certificate = LoadProvisioningCertificate(parameters);
        DeviceRegistrationResult dpsRegistrationResult = await ProvisionDeviceAsync(parameters, certificate, cancellationToken);
        var authMethod = new DeviceAuthenticationWithX509Certificate(dpsRegistrationResult.DeviceId, certificate);
        deviceClient = InitializeDeviceClient(dpsRegistrationResult.AssignedHub, authMethod);
        break;
    
  7. استبدل طريقة ProvisionDeviceAsync بالتعليمات البرمجية التالية:

    private static async Task<DeviceRegistrationResult> ProvisionDeviceAsync(Parameters parameters, X509Certificate2 certificate, CancellationToken cancellationToken)
    {
        SecurityProvider security = new SecurityProviderX509Certificate(certificate);
        ProvisioningTransportHandler mqttTransportHandler = new ProvisioningTransportHandlerMqtt();
        ProvisioningDeviceClient pdc = ProvisioningDeviceClient.Create(parameters.DpsEndpoint, parameters.DpsIdScope, security, mqttTransportHandler);
    
        var pnpPayload = new ProvisioningRegistrationAdditionalData
        {
            JsonData = PnpConvention.CreateDpsPayload(ModelId),
        };
        return await pdc.RegisterAsync(pnpPayload, cancellationToken);
    }
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. أضف متغيرات البيئة التالية إلى المشروع:

    • IOTHUB_DEVICE_X509_CERT: <full path to folder that contains PFX files>sampleDevice01.pfx
    • IOTHUB_DEVICE_X509_PASSWORD: 1234.
  2. إنشاء التطبيق وتشغيله. تحقق من توفيرات الجهاز بنجاح.

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. انتقل إلى مجلد azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample الذي يحتوي على ملف pom.xml ومجلد src لعينة جهاز وحدة التحكم في درجة الحرارة.

  2. قم بتحرير ملف pom.xml لإضافة تكوين التبعية التالي في العقدة <dependencies> :

    <dependency>
        <groupId>com.microsoft.azure.sdk.iot.provisioning.security</groupId>
        <artifactId>${x509-provider-artifact-id}</artifactId>
        <version>${x509-provider-version}</version>
    </dependency>
    

    ا‏‏حفظ التغييرات.

  3. افتح ملف src/main/java/samples/com/microsoft/azure/sdk/iot/device/TemperatureController.java في محرر النص.

  4. SecurityProviderSymmetricKey استبدل الاستيراد بالواردات التالية:

    import com.microsoft.azure.sdk.iot.provisioning.security.SecurityProvider;
    import com.microsoft.azure.sdk.iot.provisioning.security.hsm.SecurityProviderX509Cert;
    import com.microsoft.azure.sdk.iot.provisioning.security.exceptions.SecurityProviderException;
    
  5. أضف الاستيراد التالي:

    import java.nio.file.*;
    
  6. أضف SecurityProviderException إلى قائمة الاستثناءات التي يطرحها main الأسلوب:

    public static void main(String[] args) throws IOException, URISyntaxException, ProvisioningDeviceClientException, InterruptedException, SecurityProviderException {
    
  7. استبدل طريقة initializeAndProvisionDevice بالتعليمات البرمجية التالية:

    private static void initializeAndProvisionDevice() throws ProvisioningDeviceClientException, IOException, URISyntaxException, InterruptedException, SecurityProviderException {
        String deviceX509Key = new String(Files.readAllBytes(Paths.get(System.getenv("IOTHUB_DEVICE_X509_KEY"))));
        String deviceX509Cert = new String(Files.readAllBytes(Paths.get(System.getenv("IOTHUB_DEVICE_X509_CERT"))));
        SecurityProvider securityProviderX509 = new SecurityProviderX509Cert(deviceX509Cert, deviceX509Key, null);
        ProvisioningDeviceClient provisioningDeviceClient;
        ProvisioningStatus provisioningStatus = new ProvisioningStatus();
    
        provisioningDeviceClient = ProvisioningDeviceClient.create(globalEndpoint, scopeId, provisioningProtocol, securityProviderX509);
    
        AdditionalData additionalData = new AdditionalData();
        additionalData.setProvisioningPayload(com.microsoft.azure.sdk.iot.provisioning.device.plugandplay.PnpHelper.createDpsPayload(MODEL_ID));
    
        provisioningDeviceClient.registerDevice(new ProvisioningDeviceClientRegistrationCallbackImpl(), provisioningStatus, additionalData);
    
        while (provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() != ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ASSIGNED)
        {
            if (provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ERROR ||
                    provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_DISABLED ||
                    provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_FAILED)
            {
                provisioningStatus.exception.printStackTrace();
                System.out.println("Registration error, bailing out");
                break;
            }
            System.out.println("Waiting for Provisioning Service to register");
            Thread.sleep(MAX_TIME_TO_WAIT_FOR_REGISTRATION);
        }
    
        ClientOptions options = new ClientOptions();
        options.setModelId(MODEL_ID);
    
        if (provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ASSIGNED) {
            System.out.println("IotHUb Uri : " + provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getIothubUri());
            System.out.println("Device ID : " + provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getDeviceId());
    
            String iotHubUri = provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getIothubUri();
            String deviceId = provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getDeviceId();
    
            log.debug("Opening the device client.");
            deviceClient = DeviceClient.createFromSecurityProvider(iotHubUri, deviceId, securityProviderX509, IotHubClientProtocol.MQTT, options);
            deviceClient.open();
        }
    }
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. في بيئة shell الخاصة بك، أضف متغيري البيئة التاليين. تأكد من توفير المسار الكامل لملفات PEM واستخدام محدد المسار الصحيح لنظام التشغيل الخاص بك:

    set IOTHUB_DEVICE_X509_CERT=<full path to folder that contains PEM files>sampleDevice01_cert.pem
    set IOTHUB_DEVICE_X509_KEY=<full path to folder that contains PEM files>sampleDevice01_key.pem
    

    تلميح

    يمكنك تعيين متغيرات البيئة المطلوبة الأخرى عند إكمال إنشاء تطبيق عميل وتوصيله بالبرنامج التعليمي لتطبيق Azure IoT Central.

  2. إنشاء التطبيق وتشغيله. تحقق من توفيرات الجهاز بنجاح.

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. انتقل إلى مجلد azure-iot-sdk-node/device/samples/javascript الذي يحتوي على تطبيق pnp_temperature_controller.js وقم بتشغيل الأمر التالي لتثبيت حزمة X.509:

    npm install azure-iot-security-x509 --save
    
  2. افتح ملف pnp_temperature_controller.js في محرر نص.

  3. قم بتحرير require العبارات لتضمين التعليمات البرمجية التالية:

    const fs = require('fs');
    const X509Security = require('azure-iot-security-x509').X509Security;
    
  4. أضف الأسطر الأربعة التالية إلى قسم "معلومات اتصال DPS" لتهيئة deviceCert المتغير:

    const deviceCert = {
      cert: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_CERT).toString(),
      key: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_KEY).toString()
    };
    
  5. قم بتحرير الدالة provisionDevice التي تنشئ العميل عن طريق استبدال السطر الأول بالتعليمات البرمجية التالية:

    var provSecurityClient = new X509Security(registrationId, deviceCert);
    
  6. في نفس الدالة، قم بتعديل السطر الذي يعين deviceConnectionString المتغير كما يلي:

    deviceConnectionString = 'HostName=' + result.assignedHub + ';DeviceId=' + result.deviceId + ';x509=true';
    
  7. في الدالة main ، أضف السطر التالي بعد السطر الذي يستدعي Client.fromConnectionString:

    client.setOptions(deviceCert);
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. في بيئة shell الخاصة بك، أضف متغيري البيئة التاليين. تأكد من توفير المسار الكامل لملفات PEM واستخدام محدد المسار الصحيح لنظام التشغيل الخاص بك:

    set IOTHUB_DEVICE_X509_CERT=<full path to folder that contains PEM files>sampleDevice01_cert.pem
    set IOTHUB_DEVICE_X509_KEY=<full path to folder that contains PEM files>sampleDevice01_key.pem
    

    تلميح

    يمكنك تعيين متغيرات البيئة المطلوبة الأخرى عند إكمال إنشاء تطبيق عميل وتوصيله بالبرنامج التعليمي لتطبيق Azure IoT Central.

  2. تنفيذ البرنامج النصي والتحقق من توفيرات الجهاز بنجاح:

    node pnp_temperature_controller.js
    

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. انتقل إلى المجلد azure-iot-device/samples/pnp وافتح ملف temp_controller_with_thermostats.py في محرر نص.

  2. أضف العبارة التالية from لاستيراد وظيفة X.509:

    from azure.iot.device import X509
    
  3. تعديل الجزء الأول من الدالة provision_device كما يلي:

    async def provision_device(provisioning_host, id_scope, registration_id, x509, model_id):
        provisioning_device_client = ProvisioningDeviceClient.create_from_x509_certificate(
            provisioning_host=provisioning_host,
            registration_id=registration_id,
            id_scope=id_scope,
            x509=x509,
        )
    
  4. في الدالة main ، استبدل السطر الذي يعين symmetric_key المتغير بالتعليمات البرمجية التالية:

    x509 = X509(
        cert_file=os.getenv("IOTHUB_DEVICE_X509_CERT"),
        key_file=os.getenv("IOTHUB_DEVICE_X509_KEY"),
    )
    
  5. في الدالة main ، استبدل الاستدعاء بالدالة provision_device بالتعليمات البرمجية التالية:

    registration_result = await provision_device(
        provisioning_host, id_scope, registration_id, x509, model_id
    )
    
  6. في الدالة main ، استبدل الاستدعاء بالدالة IoTHubDeviceClient.create_from_symmetric_key بالتعليمات البرمجية التالية:

    device_client = IoTHubDeviceClient.create_from_x509_certificate(
        x509=x509,
        hostname=registration_result.registration_state.assigned_hub,
        device_id=registration_result.registration_state.device_id,
        product_info=model_id,
    )
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. في بيئة shell الخاصة بك، أضف متغيري البيئة التاليين. تأكد من توفير المسار الكامل لملفات PEM واستخدام محدد المسار الصحيح لنظام التشغيل الخاص بك:

    set IOTHUB_DEVICE_X509_CERT=<full path to folder that contains PEM files>sampleDevice01_cert.pem
    set IOTHUB_DEVICE_X509_KEY=<full path to folder that contains PEM files>sampleDevice01_key.pem
    

    تلميح

    يمكنك تعيين متغيرات البيئة المطلوبة الأخرى عند إكمال إنشاء تطبيق عميل وتوصيله بالبرنامج التعليمي لتطبيق Azure IoT Central.

  2. تنفيذ البرنامج النصي والتحقق من توفيرات الجهاز بنجاح:

    python temp_controller_with_thermostats.py
    

تحقق من ظهور بيانات تتبع الاستخدام على طريقة عرض الجهاز في تطبيق IoT Central:

Screenshot showing telemetry from a device that connected using X.509.

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

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

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

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

تحذير

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

إنشاء شهادة جهاز X.509 موقعة ذاتيا عن طريق تشغيل الأوامر التالية:

  cd azure-iot-sdk-node/provisioning/tools
  node create_test_cert.js device mytestselfcertprimary
  node create_test_cert.js device mytestselfcertsecondary 

تلميح

يمكن أن يحتوي معرف الجهاز على أحرف وأرقام وحرف - .

تنتج هذه الأوامر شهادات الجهاز التالية:

filename المحتويات
mytestselfcertprimary_cert.pem الجزء العام من شهادة X509 للجهاز الأساسي
mytestselfcertprimary_key.pem المفتاح الخاص لشهادة X509 للجهاز الأساسي
mytestselfcertprimary_fullchain.pem سلسلة المفاتيح بأكملها لشهادة X509 للجهاز الأساسي.
mytestselfcertprimary.pfx ملف PFX لشهادة X509 للجهاز الأساسي.
mytestselfcertsecondary_cert.pem الجزء العام من شهادة X509 للجهاز الثانوي
mytestselfcertsecondary_key.pem المفتاح الخاص لشهادة X509 للجهاز الثانوي
mytestselfcertsecondary_fullchain.pem سلسلة المفاتيح بأكملها لشهادة X509 للجهاز الثانوي.
mytestselfcertsecondary.pfx ملف PFX لشهادة X509 للجهاز الثانوي.

إنشاء تسجيل فردي

  1. في تطبيق Azure IoT Central، حدد الأجهزة، وأنشئ جهازا جديدا باستخدام معرف الجهاز ك mytestselfcertprimary من قالب جهاز منظم الحرارة. دون ملاحظة عن نطاق المعرف، يمكنك استخدامه لاحقا.

  2. افتح الجهاز الذي أنشأته وحدد الاتصال.

  3. حدد التسجيل الفردي كنوع المصادقة والشهادات (X.509) كطريقة مصادقة.

  4. قم بتحميل ملف mytestselfcertprimary_cert.pem الذي أنشأته مسبقا كشهادة أساسية.

  5. قم بتحميل ملف mytestselfcertsecondary_cert.pem الذي أنشأته مسبقا كشهادة ثانوية. ثم حدد حفظ.

  6. يحتوي الجهاز الآن على تسجيل فردي بشهادات X.509.

    Screenshot that shows how to connect a device using an X.509 individual enrollment.

تشغيل نموذج جهاز تسجيل فردي

إذا كنت تستخدم Windows، يجب أن تكون شهادات X.509 في مخزن شهادات Windows لكي يعمل النموذج. في مستكشف Windows، انقر نقرا مزدوجا فوق ملفات PFX التي أنشأتها مسبقا - mytestselfcertprimary.pfx و mytestselfcertsecondary.pfx. في معالج استيراد الشهادات، حدد المستخدم الحالي كموقع المتجر، وأدخل 1234 ككلمة مرور، واترك المعالج يختار مخزن الشهادات تلقائيا. يستورد المعالج الشهادات إلى المخزن الشخصي للمستخدم الحالي.

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. في حل IoTHubDeviceSamples Visual Studio، افتح ملف Parameter.cs في مشروع TemperatureController .

  2. أضف تعريفي المعلمة التاليين إلى الفئة :

    [Option(
        'x',
        "CertificatePath",
        HelpText = "(Required if DeviceSecurityType is \"dps\"). \nThe device PFX file to use during device provisioning." +
        "\nDefaults to environment variable \"IOTHUB_DEVICE_X509_CERT\".")]
    public string CertificatePath { get; set; } = Environment.GetEnvironmentVariable("IOTHUB_DEVICE_X509_CERT");
    
    [Option(
        'p',
        "CertificatePassword",
        HelpText = "(Required if DeviceSecurityType is \"dps\"). \nThe password of the PFX certificate file." +
        "\nDefaults to environment variable \"IOTHUB_DEVICE_X509_PASSWORD\".")]
    public string CertificatePassword { get; set; } = Environment.GetEnvironmentVariable("IOTHUB_DEVICE_X509_PASSWORD");
    

    ا‏‏حفظ التغييرات.

  3. في حل IoTHubDeviceSamples Visual Studio، افتح ملف Program.cs في مشروع TemperatureController .

  4. أضف عبارات using التالية:

    using System.Security.Cryptography.X509Certificates;
    using System.IO;
    
  5. إضافة الأسلوب التالي إلى الفئة :

    private static X509Certificate2 LoadProvisioningCertificate(Parameters parameters)
    {
        var certificateCollection = new X509Certificate2Collection();
        certificateCollection.Import(
            parameters.CertificatePath,
            parameters.CertificatePassword,
            X509KeyStorageFlags.UserKeySet);
    
        X509Certificate2 certificate = null;
    
        foreach (X509Certificate2 element in certificateCollection)
        {
            Console.WriteLine($"Found certificate: {element?.Thumbprint} {element?.Subject}; PrivateKey: {element?.HasPrivateKey}");
            if (certificate == null && element.HasPrivateKey)
            {
                certificate = element;
            }
            else
            {
                element.Dispose();
            }
        }
    
        if (certificate == null)
        {
            throw new FileNotFoundException($"{parameters.CertificatePath} did not contain any certificate with a private key.");
        }
    
        Console.WriteLine($"Using certificate {certificate.Thumbprint} {certificate.Subject}");
    
        return certificate;
    }
    
  6. في SetupDeviceClientAsync الأسلوب ، استبدل كتلة التعليمات البرمجية للتعليمات البرمجية للتعليمات case "dps" البرمجية التالية:

    case "dps":
        s_logger.LogDebug($"Initializing via DPS");
        Console.WriteLine($"Loading the certificate...");
        X509Certificate2 certificate = LoadProvisioningCertificate(parameters);
        DeviceRegistrationResult dpsRegistrationResult = await ProvisionDeviceAsync(parameters, certificate, cancellationToken);
        var authMethod = new DeviceAuthenticationWithX509Certificate(dpsRegistrationResult.DeviceId, certificate);
        deviceClient = InitializeDeviceClient(dpsRegistrationResult.AssignedHub, authMethod);
        break;
    
  7. استبدل طريقة ProvisionDeviceAsync بالتعليمات البرمجية التالية:

    private static async Task<DeviceRegistrationResult> ProvisionDeviceAsync(Parameters parameters, X509Certificate2 certificate, CancellationToken cancellationToken)
    {
        SecurityProvider security = new SecurityProviderX509Certificate(certificate);
        ProvisioningTransportHandler mqttTransportHandler = new ProvisioningTransportHandlerMqtt();
        ProvisioningDeviceClient pdc = ProvisioningDeviceClient.Create(parameters.DpsEndpoint, parameters.DpsIdScope, security, mqttTransportHandler);
    
        var pnpPayload = new ProvisioningRegistrationAdditionalData
        {
            JsonData = PnpConvention.CreateDpsPayload(ModelId),
        };
        return await pdc.RegisterAsync(pnpPayload, cancellationToken);
    }
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. أضف متغيرات البيئة التالية إلى المشروع:

    • IOTHUB_DEVICE_DPS_DEVICE_ID: mytestselfcertprimary
    • IOTHUB_DEVICE_X509_CERT: <full path to folder that contains PFX files>mytestselfcertprimary.pfx
    • IOTHUB_DEVICE_X509_PASSWORD: 1234.
  2. إنشاء التطبيق وتشغيله. تحقق من توفيرات الجهاز بنجاح.

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. انتقل إلى مجلد azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample الذي يحتوي على ملف pom.xml ومجلد src لعينة جهاز وحدة التحكم في درجة الحرارة.

  2. قم بتحرير ملف pom.xml لإضافة تكوين التبعية التالي في العقدة <dependencies> :

    <dependency>
        <groupId>com.microsoft.azure.sdk.iot.provisioning.security</groupId>
        <artifactId>${x509-provider-artifact-id}</artifactId>
        <version>${x509-provider-version}</version>
    </dependency>
    

    ا‏‏حفظ التغييرات.

  3. افتح ملف src/main/java/samples/com/microsoft/azure/sdk/iot/device/TemperatureController.java في محرر النص.

  4. SecurityProviderSymmetricKey استبدل الاستيراد بالواردات التالية:

    import com.microsoft.azure.sdk.iot.provisioning.security.SecurityProvider;
    import com.microsoft.azure.sdk.iot.provisioning.security.hsm.SecurityProviderX509Cert;
    import com.microsoft.azure.sdk.iot.provisioning.security.exceptions.SecurityProviderException;
    
  5. أضف الاستيراد التالي:

    import java.nio.file.*;
    
  6. أضف SecurityProviderException إلى قائمة الاستثناءات التي يطرحها main الأسلوب:

    public static void main(String[] args) throws IOException, URISyntaxException, ProvisioningDeviceClientException, InterruptedException, SecurityProviderException {
    
  7. استبدل طريقة initializeAndProvisionDevice بالتعليمات البرمجية التالية:

    private static void initializeAndProvisionDevice() throws ProvisioningDeviceClientException, IOException, URISyntaxException, InterruptedException, SecurityProviderException {
        String deviceX509Key = new String(Files.readAllBytes(Paths.get(System.getenv("IOTHUB_DEVICE_X509_KEY"))));
        String deviceX509Cert = new String(Files.readAllBytes(Paths.get(System.getenv("IOTHUB_DEVICE_X509_CERT"))));
        SecurityProvider securityProviderX509 = new SecurityProviderX509Cert(deviceX509Cert, deviceX509Key, null);
        ProvisioningDeviceClient provisioningDeviceClient;
        ProvisioningStatus provisioningStatus = new ProvisioningStatus();
    
        provisioningDeviceClient = ProvisioningDeviceClient.create(globalEndpoint, scopeId, provisioningProtocol, securityProviderX509);
    
        AdditionalData additionalData = new AdditionalData();
        additionalData.setProvisioningPayload(com.microsoft.azure.sdk.iot.provisioning.device.plugandplay.PnpHelper.createDpsPayload(MODEL_ID));
    
        provisioningDeviceClient.registerDevice(new ProvisioningDeviceClientRegistrationCallbackImpl(), provisioningStatus, additionalData);
    
        while (provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() != ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ASSIGNED)
        {
            if (provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ERROR ||
                    provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_DISABLED ||
                    provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_FAILED)
            {
                provisioningStatus.exception.printStackTrace();
                System.out.println("Registration error, bailing out");
                break;
            }
            System.out.println("Waiting for Provisioning Service to register");
            Thread.sleep(MAX_TIME_TO_WAIT_FOR_REGISTRATION);
        }
    
        ClientOptions options = new ClientOptions();
        options.setModelId(MODEL_ID);
    
        if (provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getProvisioningDeviceClientStatus() == ProvisioningDeviceClientStatus.PROVISIONING_DEVICE_STATUS_ASSIGNED) {
            System.out.println("IotHUb Uri : " + provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getIothubUri());
            System.out.println("Device ID : " + provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getDeviceId());
    
            String iotHubUri = provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getIothubUri();
            String deviceId = provisioningStatus.provisioningDeviceClientRegistrationInfoClient.getDeviceId();
    
            log.debug("Opening the device client.");
            deviceClient = DeviceClient.createFromSecurityProvider(iotHubUri, deviceId, securityProviderX509, IotHubClientProtocol.MQTT, options);
            deviceClient.open();
        }
    }
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. في بيئة shell الخاصة بك، أضف متغيري البيئة التاليين. تأكد من توفير المسار الكامل لملفات PEM واستخدام محدد المسار الصحيح لنظام التشغيل الخاص بك:

    set IOTHUB_DEVICE_DPS_DEVICE_ID=mytestselfcertprimary
    set IOTHUB_DEVICE_X509_CERT=<full path to folder that contains PEM files>mytestselfcertprimary_cert.pem
    set IOTHUB_DEVICE_X509_KEY=<full path to folder that contains PEM files>mytestselfcertprimary_key.pem
    

    تلميح

    يمكنك تعيين متغيرات البيئة المطلوبة الأخرى عند إكمال إنشاء تطبيق عميل وتوصيله بالبرنامج التعليمي لتطبيق Azure IoT Central.

  2. إنشاء التطبيق وتشغيله. تحقق من توفيرات الجهاز بنجاح.

يمكنك تكرار الخطوات المذكورة أعلاه لشهادة mytestselfcertsecondary أيضا.

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. انتقل إلى مجلد azure-iot-sdk-node/device/samples/javascript الذي يحتوي على تطبيق pnp_temperature_controller.js وقم بتشغيل الأمر التالي لتثبيت حزمة X.509:

    npm install azure-iot-security-x509 --save
    
  2. افتح ملف pnp_temperature_controller.js في محرر نص.

  3. قم بتحرير require العبارات لتضمين التعليمات البرمجية التالية:

    const fs = require('fs');
    const X509Security = require('azure-iot-security-x509').X509Security;
    
  4. أضف الأسطر الأربعة التالية إلى قسم "معلومات اتصال DPS" لتهيئة deviceCert المتغير:

    const deviceCert = {
      cert: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_CERT).toString(),
      key: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_KEY).toString()
    };
    
  5. قم بتحرير الدالة provisionDevice التي تنشئ العميل عن طريق استبدال السطر الأول بالتعليمات البرمجية التالية:

    var provSecurityClient = new X509Security(registrationId, deviceCert);
    
  6. في نفس الدالة، قم بتعديل السطر الذي يعين deviceConnectionString المتغير كما يلي:

    deviceConnectionString = 'HostName=' + result.assignedHub + ';DeviceId=' + result.deviceId + ';x509=true';
    
  7. في الدالة main ، أضف السطر التالي بعد السطر الذي يستدعي Client.fromConnectionString:

    client.setOptions(deviceCert);
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. في بيئة shell الخاصة بك، أضف متغيري البيئة التاليين. تأكد من توفير المسار الكامل لملفات PEM واستخدام محدد المسار الصحيح لنظام التشغيل الخاص بك:

    set IOTHUB_DEVICE_DPS_DEVICE_ID=mytestselfcertprimary
    set IOTHUB_DEVICE_X509_CERT=<full path to folder that contains PEM files>mytestselfcertprimary_cert.pem
    set IOTHUB_DEVICE_X509_KEY=<full path to folder that contains PEM files>mytestselfcertprimary_key.pem
    

    تلميح

    يمكنك تعيين متغيرات البيئة المطلوبة الأخرى عند إكمال إنشاء تطبيق عميل وتوصيله بالبرنامج التعليمي لتطبيق Azure IoT Central.

  2. تنفيذ البرنامج النصي والتحقق من توفيرات الجهاز بنجاح:

    node pnp_temperature_controller.js
    

يمكنك تكرار الخطوات المذكورة أعلاه لشهادة mytestselfcertsecondary أيضا.

لتعديل نموذج التعليمات البرمجية لاستخدام شهادات X.509:

  1. انتقل إلى المجلد azure-iot-device/samples/pnp وافتح ملف temp_controller_with_thermostats.py في محرر نص.

  2. أضف العبارة التالية from لاستيراد وظيفة X.509:

    from azure.iot.device import X509
    
  3. تعديل الجزء الأول من الدالة provision_device كما يلي:

    async def provision_device(provisioning_host, id_scope, registration_id, x509, model_id):
        provisioning_device_client = ProvisioningDeviceClient.create_from_x509_certificate(
            provisioning_host=provisioning_host,
            registration_id=registration_id,
            id_scope=id_scope,
            x509=x509,
        )
    
  4. في الدالة main ، استبدل السطر الذي يعين symmetric_key المتغير بالتعليمات البرمجية التالية:

    x509 = X509(
        cert_file=os.getenv("IOTHUB_DEVICE_X509_CERT"),
        key_file=os.getenv("IOTHUB_DEVICE_X509_KEY"),
    )
    
  5. في الدالة main ، استبدل الاستدعاء بالدالة provision_device بالتعليمات البرمجية التالية:

    registration_result = await provision_device(
        provisioning_host, id_scope, registration_id, x509, model_id
    )
    
  6. في الدالة main ، استبدل الاستدعاء بالدالة IoTHubDeviceClient.create_from_symmetric_key بالتعليمات البرمجية التالية:

    device_client = IoTHubDeviceClient.create_from_x509_certificate(
        x509=x509,
        hostname=registration_result.registration_state.assigned_hub,
        device_id=registration_result.registration_state.device_id,
        product_info=model_id,
    )
    

    ا‏‏حفظ التغييرات.

لتشغيل النموذج:

  1. في بيئة shell الخاصة بك، أضف متغيري البيئة التاليين. تأكد من توفير المسار الكامل لملفات PEM واستخدام محدد المسار الصحيح لنظام التشغيل الخاص بك:

    set IOTHUB_DEVICE_DPS_DEVICE_ID=mytestselfcertprimary
    set IOTHUB_DEVICE_X509_CERT=<full path to folder that contains PEM files>mytestselfcertprimary_cert.pem
    set IOTHUB_DEVICE_X509_KEY=<full path to folder that contains PEM files>mytestselfcertprimary_key.pem
    

    تلميح

    يمكنك تعيين متغيرات البيئة المطلوبة الأخرى عند إكمال إنشاء تطبيق عميل وتوصيله بالبرنامج التعليمي لتطبيق Azure IoT Central.

  2. تنفيذ البرنامج النصي والتحقق من توفيرات الجهاز بنجاح:

    python temp_controller_with_thermostats.py
    

يمكنك تكرار الخطوات المذكورة أعلاه لشهادة mytestselfcertsecondary أيضا.

توصيل جهاز IoT Edge

يفترض هذا القسم أنك تستخدم تسجيل مجموعة لتوصيل جهاز IoT Edge. اتبع الخطوات الواردة في الأقسام السابقة من أجل:

لتوصيل جهاز IoT Edge ب IoT Central باستخدام شهادة جهاز X.509:

  • انسخ شهادة الجهاز والملفات الرئيسية على جهاز IoT Edge. في مثال تسجيل المجموعة السابق، تم استدعاء هذه الملفات sampleDevice01_key.pem و sampleDevice01_cert.pem.

  • على جهاز IoT Edge، قم بتحرير provisioning قسم في ملف التكوين /etc/aziot/config.toml كما يلي:

    # DPS X.509 provisioning configuration
    provisioning:
      source: "dps"
      global_endpoint: "https://global.azure-devices-provisioning.net"
      scope_id: "<SCOPE_ID>"
      attestation:
        method: "x509"
    #   registration_id: "<OPTIONAL REGISTRATION ID. LEAVE COMMENTED OUT TO REGISTER WITH CN OF identity_cert>"
        identity_cert: "file:///<path>/sampleDevice01_cert.pem"
        identity_pk: "file:///<path>/sampleDevice01_key.pem"
    #  always_reprovision_on_startup: true
    #  dynamic_reprovisioning: false
    
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "<SCOPE_ID>"
    
    [provisioning.attestation]
    method = "x509"
    registration_id = "env-sens-001"
    identity_pk = "file:///<path>/envSens001_key.pem"
    identity_cert = "file:///<path>/envSens001_cert.pem"
    

    تلميح

    لا تحتاج إلى إضافة قيمة ل registration_id. يمكن ل IoT Edge استخدام قيمة CN من شهادة X.509.

  • قم بتشغيل الأمر التالي لإعادة تشغيل وقت تشغيل IoT Edge:

    sudo iotedge config apply
    

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

الاتصال جهاز انتقال البيانات من الخادم إلى IoT Edge

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

قم بتدحرج شهادات جهاز X.509

أثناء دورة حياة تطبيق IoT Central، قد تحتاج إلى طرح شهادات X.509. على سبيل المثال:

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

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

لمعرفة المزيد، راجع افتراض منهجية الخرق.

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

الحصول على شهادات X.509 جديدة

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

مجموعات التسجيل والخروقات الأمنية

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

  1. انتقل إلى الأذونات في الجزء الأيمن وحدد مجموعات اتصال الجهاز.

  2. حدد اسم المجموعة في القائمة ضمن مجموعات التسجيل.

  3. لتحديث الشهادة، حدد إدارة الأساسي أو إدارة الثانوي.

  4. إضافة شهادة X.509 الجذر والتحقق منها في مجموعة التسجيل.

التسجيلات الفردية والخروقات الأمنية

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

  1. حدد الأجهزة، وحدد الجهاز.

  2. حدد الاتصال، وحدد أسلوب الاتصال ك تسجيل فردي

  3. حدد Certificates (X.509) كآلية.

  4. لتحديث الشهادة، حدد أيقونة المجلد لتحديد الشهادة الجديدة التي سيتم تحميلها لإدخال التسجيل. حدد حفظ.

مجموعات التسجيل وانتهاء صلاحية الشهادات

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

  1. انتقل إلى الأذونات في الجزء الأيمن وحدد مجموعات اتصال الجهاز.

  2. حدد اسم المجموعة في القائمة ضمن مجموعات التسجيل.

  3. لتحديث الشهادة، حدد إدارة الأساسي.

  4. إضافة شهادة X.509 الجذر والتحقق منها في مجموعة التسجيل.

  5. لاحقا عند انتهاء صلاحية الشهادة الثانوية، عد وقم بتحديث الشهادة الثانوية.

التسجيلات الفردية وانتهاء صلاحية الشهادات

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

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

  1. حدد الأجهزة، وحدد الجهاز.

  2. حدد الاتصال، وحدد أسلوب الاتصال ك تسجيل فردي

  3. حدد Certificates (X.509) كآلية.

  4. لتحديث الشهادة الثانوية، حدد رمز المجلد لتحديد الشهادة الجديدة التي سيتم تحميلها لإدخال التسجيل. حدد حفظ.

  5. لاحقا عند انتهاء صلاحية الشهادة الأساسية، عد وقم بتحديث الشهادة الأساسية.