Freigeben über


Verbinden von Geräten mit X.509-Zertifikaten mit einer Azure IoT Central-Anwendung

IoT Central unterstützt sowohl SAS (Shared Access Signature) als auch X.509-Zertifikate zum Absichern der Kommunikation zwischen einem Gerät und Ihrer Anwendung. Im Tutorial Erstellen einer Clientanwendung und Verbinden der Anwendung mit Ihrer Azure IoT Central-Anwendung wird SAS verwendet. In diesem Artikel erfahren Sie, wie Sie das Codebeispiel so ändern können, dass X.509-Zertifikate verwendet werden. In Produktionsumgebungen werden X.509-Zertifikate empfohlen. Weitere Informationen finden Sie unter Geräteauthentifizierungskonzepte in IoT Central.

In diesem Leitfaden werden zwei Möglichkeiten zur Verwendung von X.509-Zertifikaten gezeigt – Gruppenregistrierungen, die normalerweise in einer Produktionsumgebung verwendet werden, und individuelle Registrierungen, die hilfreich bei Tests sind. In diesem Artikel wird auch das Rollen von Gerätezertifikaten beschrieben, um die Konnektivität aufrechtzuerhalten, wenn die Zertifikate ablaufen.

Dieser Leitfaden baut auf den Beispielen im Tutorial Erstellen und Verbinden einer Clientanwendung mit Ihrer Azure IoT Central-Anwendung auf, die C#, Java, JavaScript und Python verwenden. Ein Beispiel, das die Programmiersprache C verwendet, finden Sie unter Bereitstellen mehrerer X.509-Geräte mithilfe von Registrierungsgruppen.

Voraussetzungen

Bevor Sie die Schritte in dieser Anleitung ausführen, sollten Sie zuerst das Tutorial Erstellen und Verbinden einer Clientanwendung mit Ihrer Azure IoT Central-Anwendung durcharbeiten. Sie ändern den Code, den Sie im Lernprogramm verwendet haben, wenn Sie die Schritte in diesem Handbuch ausführen.

In dieser Anleitung generieren Sie einige X.509-Testzertifikate. Um diese Zertifikate generieren zu können, benötigen Sie Folgendes:

  • Einen Entwicklungscomputer, auf dem mindestens Version 6 von Node.js installiert ist. Sie können node --version in der Befehlszeile ausführen, um Ihre Version zu überprüfen. Bei den Anweisungen in diesem Tutorial wird davon ausgegangen, dass Sie den Befehl node an der Windows-Eingabeaufforderung ausführen. Node.js kann jedoch unter einer Reihe anderer Betriebssysteme verwendet werden.
  • Eine lokale Kopie des GitHub-Repositorys mit dem Microsoft Azure IoT SDK für Node.js, das die Skripte zum Generieren der X.509-Testzertifikate enthält. Laden Sie über den folgenden Link eine Kopie des Repositorys herunter: ZIP herunterladen. Entzippen Sie anschließend die Datei an einem geeigneten Speicherort auf Ihrem lokalen Computer.

Verwenden der Gruppenregistrierung

Verwenden Sie X.509-Zertifikate bei einer Gruppenregistrierung in einer Produktionsumgebung. In einer Gruppenregistrierung fügen Sie Ihrer IoT Central-Anwendung ein X.509-Stamm- oder -Zwischenzertifikat hinzu. Geräte mit Blattzertifikaten, die vom Stamm- oder Zwischenzertifikat abgeleitet wurden, können eine Verbindung mit Ihrer Anwendung herstellen.

Generieren von Stamm- und Gerätezertifikaten

In diesem Abschnitt verwenden Sie ein X.509-Zertifikat zum Verbinden eines Geräts mit einem vom Zertifikat der IoT Central-Registrierungsgruppe abgeleiteten Zertifikat.

Warnung

Diese Methode zum Erstellen von X.509-Zertifikaten dient nur zu Testzwecken. Für eine Produktionsumgebung sollten Sie Ihren offiziellen, sicheren Mechanismus für Zertifikatgenerierung verwenden.

  1. Navigieren Sie zum Zertifikatgeneratorskript im Microsoft Azure IoT SDK für Node.js, das Sie heruntergeladen haben. Installieren Sie die erforderlichen Pakete:

    cd azure-iot-sdk-node/provisioning/tools
    npm install
    
  2. Erstellen Sie ein Stammzertifikat, und leiten Sie dann ein Gerätezertifikat durch Ausführen des Skripts ab:

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

    Tipp

    Eine Geräte-ID kann Buchstaben, Ziffern und das Zeichen - enthalten.

Mit diesen Befehlen werden das folgende Stamm- und das Gerätezertifikat erzeugt:

filename contents
mytestrootcert_cert.pem Der öffentliche Teil des X.509-Stammzertifikats
mytestrootcert_key.pem Der private Schlüssel für das X.509-Stammzertifikat
mytestrootcert_fullchain.pem Der gesamte Schlüsselbund für das X.509-Stammzertifikat
mytestrootcert.pfx Die PFX-Datei für das X.509-Stammzertifikat.
sampleDevice01_cert.pem Der öffentliche Teil des X.509-Gerätezertifikats
sampleDevice01_key.pem Der private Schlüssel für das X.509-Gerätezertifikat
sampleDevice01_fullchain.pem Der gesamte Schlüsselbund für das X.509-Gerätezertifikat.
sampleDevice01.pfx Die PFX-Datei für das X.509-Zertifikat des Geräts.

Notieren Sie sich den Speicherort dieser Dateien. Sie benötigen ihn später.

Eine Gruppenanmeldung erstellen

  1. Öffnen Sie Ihre IoT Central Anwendung, navigieren Sie im linken Bereich zu Berechtigungen, und wählen Sie Geräteverbindungsgruppen aus.

  2. Wählen Sie + Neu aus, um die neue Registrierungsgruppe MyX509Group mit dem Nachweistyp Zertifikate (X.509) zu erstellen. Sie können Registrierungsgruppen entweder für IoT-Geräte oder für IoT Edge-Geräte erstellen.

  3. Wählen Sie in der von Ihnen erstellten Registrierungsgruppe Primäres verwalten aus.

  4. Wählen Sie im Bereich Primäres Zertifikat die Option Zertifikat hinzufügen aus.

  5. Laden Sie die zuvor generierte Stammzertifikatdatei mytestrootcert_cert.pem hoch.

  6. Wenn Sie eine Zwischen- oder Stammzertifizierungsstelle verwenden, der Sie vertrauen, und wissen, dass Sie das Zertifikat vollständig besitzen, können Sie selbst bestätigen, dass Sie es überprüft haben, indem Sie den beim Hochladen überprüften Zertifikatstatus auf Ein festlegen. Legen Sie andernfalls den beim Upload überprüften Zertifikatstatus auf Aus fest.

  7. Wenn Sie den beim Upload überprüften Zertifikatstatus auf Aus festgelegt haben, wählen Sie Prüfcode generieren aus.

  8. Wählen Sie den Prüfcode aus, kopieren Sie ihn, und erstellen Sie ein X.509-Verifizierungszertifikat. Führen Sie an der Eingabeaufforderung beispielsweise Folgendes aus:

    node create_test_cert.js verification --ca mytestrootcert_cert.pem --key mytestrootcert_key.pem --nonce  {verification-code}
    
  9. Wählen Sie Überprüfen aus, um das signierte Verifizierungszertifikat verification_cert.pem hochzuladen und so die Überprüfung abzuschließen.

  10. Der Status des primären Zertifikats lautet jetzt Überprüft:

    Screenshot that shows a verified X509 certificate.

Jetzt können Sie Geräte verbinden, die ein X.509-Zertifikat haben, das von diesem primären Stammzertifikat abgeleitet wurde.

Nachdem Sie die Registrierungsgruppe gespeichert haben, notieren Sie sich den ID-Bereich. Sie benötigen ihn später.

Ausführen des Beispiels für Gerätecode

Wenn Sie Windows verwenden, müssen sich die X.509-Zertifikate im Windows-Zertifikatspeicher befindet, damit das Beispiel funktioniert. Doppelklicken Sie in Windows Explorer auf die zuvor generierten PFX-Dateien – mytestrootcert.pfx und sampleDevice01.pfx. Wählen Sie im Zertifikatimport-Assistenten die Option Aktueller Benutzer als Speicherort aus, geben Sie 1234 als Kennwort ein, und lassen Sie den Assistenten den Zertifikatspeicher automatisch auswählen. Der Assistent importiert die Zertifikate in den persönlichen Speicher des aktuellen Benutzers.

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Öffnen Sie in der Visual Studio-Projektmappe IoTHubDeviceSamples die Datei Parameter.cs im Projekt TemperatureController.

  2. Fügen Sie die beiden folgenden Parameterdefinitionen der Klasse hinzu:

    [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");
    

    Speichern Sie die Änderungen.

  3. Öffnen Sie in der Visual Studio-Projektmappe IoTHubDeviceSamples die Datei Program.cs im Projekt TemperatureController.

  4. Fügen Sie die folgenden using -Anweisungen ein:

    using System.Security.Cryptography.X509Certificates;
    using System.IO;
    
  5. Fügen Sie der -Klasse die folgende Methode hinzu:

    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. Ersetzen Sie in der SetupDeviceClientAsync-Methode den Codeblock für case "dps" durch den folgenden Code:

    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. Ersetzen Sie die ProvisionDeviceAsync-Methode durch folgenden Code:

    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);
    }
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie dem Projekt die folgenden Umgebungsvariablen hinzu:

    • IOTHUB_DEVICE_X509_CERT: <full path to folder that contains PFX files>sampleDevice01.pfx
    • IOTHUB_DEVICE_X509_PASSWORD: 1234.
  2. Erstellen Sie die Anwendung, und führen Sie sie aus. Vergewissern Sie sich, dass die Gerätebereitstellung erfolgreich war.

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Navigieren Sie zum Ordner azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample, der die Datei pom.xml und den Ordner src für das Temperaturreglerbeispiel enthält.

  2. Bearbeiten Sie die Datei pom.xml, um die folgende Abhängigkeitskonfiguration im <dependencies>-Knoten hinzuzufügen:

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

    Speichern Sie die Änderungen.

  3. Öffnen Sie die Datei src/main/java/samples/com/microsoft/azure/sdk/iot/device/TemperatureController.java in Ihrem Text-Editor.

  4. Ersetzen Sie den SecurityProviderSymmetricKey-Import durch die folgenden Importe:

    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. Fügen Sie den folgenden Import hinzu:

    import java.nio.file.*;
    
  6. Fügen Sie SecurityProviderException der Liste der Ausnahmen hinzu, die die main-Methode auslöst:

    public static void main(String[] args) throws IOException, URISyntaxException, ProvisioningDeviceClientException, InterruptedException, SecurityProviderException {
    
  7. Ersetzen Sie die initializeAndProvisionDevice-Methode durch folgenden Code:

    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();
        }
    }
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie in der Shellumgebung die folgenden zwei Umgebungsvariablen hinzu. Geben Sie unbedingt den vollständigen Pfad zu den PEM-Dateien an, und verwenden Sie das richtige Pfadtrennzeichen für Ihr Betriebssystem:

    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
    

    Tipp

    Die anderen erforderlichen Umgebungsvariablen haben Sie beim Durcharbeiten des Tutorials Erstellen einer Clientanwendung und Verbinden der Anwendung mit Ihrer Azure IoT Central-Anwendung festgelegt.

  2. Erstellen Sie die Anwendung, und führen Sie sie aus. Vergewissern Sie sich, dass die Gerätebereitstellung erfolgreich war.

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Navigieren Sie zum Ordner azure-iot-sdk-node/device/samples/javascript, der die Anwendung pnp_temperature_controller.js enthält, und führen Sie den folgenden Befehl aus, um das X.509-Paket zu installieren:

    npm install azure-iot-security-x509 --save
    
  2. Öffnen Sie die Datei pnp_temperature_controller.js in einem Texteditor.

  3. Bearbeiten Sie die require-Anweisungen so, dass sie folgenden Code enthalten:

    const fs = require('fs');
    const X509Security = require('azure-iot-security-x509').X509Security;
    
  4. Fügen Sie dem Abschnitt „DPS connection information“ die folgenden vier Zeilen hinzu, um die Variable deviceCert zu initialisieren:

    const deviceCert = {
      cert: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_CERT).toString(),
      key: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_KEY).toString()
    };
    
  5. Bearbeiten Sie die Funktion provisionDevice, die den Client erstellt, indem Sie die erste Zeile durch folgenden Code ersetzen:

    var provSecurityClient = new X509Security(registrationId, deviceCert);
    
  6. Ändern Sie in derselben Funktion die Zeile, in der die Variable deviceConnectionString festgelegt wird, wie folgt:

    deviceConnectionString = 'HostName=' + result.assignedHub + ';DeviceId=' + result.deviceId + ';x509=true';
    
  7. Fügen Sie in der Funktion main nach der Zeile, über die Client.fromConnectionString aufgerufen wird, die folgende Zeile hinzu:

    client.setOptions(deviceCert);
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie in der Shellumgebung die folgenden zwei Umgebungsvariablen hinzu. Geben Sie unbedingt den vollständigen Pfad zu den PEM-Dateien an, und verwenden Sie das richtige Pfadtrennzeichen für Ihr Betriebssystem:

    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
    

    Tipp

    Die anderen erforderlichen Umgebungsvariablen haben Sie beim Durcharbeiten des Tutorials Erstellen einer Clientanwendung und Verbinden der Anwendung mit Ihrer Azure IoT Central-Anwendung festgelegt.

  2. Führen Sie das Skript aus, und überprüfen Sie, ob das Gerät erfolgreich bereitgestellt wurde:

    node pnp_temperature_controller.js
    

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Navigieren Sie zum Ordner azure-iot-device/samples/pnp, und öffnen Sie die Datei temp_controller_with_thermostats.py in einem Text-Editor.

  2. Fügen Sie die folgende from-Anweisung hinzu, um die X.509-Funktionalität zu importieren:

    from azure.iot.device import X509
    
  3. Ändern Sie den ersten Teil der provision_device-Funktion wie folgt:

    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. Ersetzen Sie in der main-Funktion die Zeile, in der die Variable symmetric_key festgelegt wird, durch folgenden Code:

    x509 = X509(
        cert_file=os.getenv("IOTHUB_DEVICE_X509_CERT"),
        key_file=os.getenv("IOTHUB_DEVICE_X509_KEY"),
    )
    
  5. Ersetzen Sie in der main-Funktion den Aufruf der provision_device-Funktion durch folgenden Code:

    registration_result = await provision_device(
        provisioning_host, id_scope, registration_id, x509, model_id
    )
    
  6. Ersetzen Sie in der main-Funktion den Aufruf der IoTHubDeviceClient.create_from_symmetric_key-Funktion durch folgenden Code:

    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,
    )
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie in der Shellumgebung die folgenden zwei Umgebungsvariablen hinzu. Geben Sie unbedingt den vollständigen Pfad zu den PEM-Dateien an, und verwenden Sie das richtige Pfadtrennzeichen für Ihr Betriebssystem:

    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
    

    Tipp

    Die anderen erforderlichen Umgebungsvariablen haben Sie beim Durcharbeiten des Tutorials Erstellen einer Clientanwendung und Verbinden der Anwendung mit Ihrer Azure IoT Central-Anwendung festgelegt.

  2. Führen Sie das Skript aus, und überprüfen Sie, ob das Gerät erfolgreich bereitgestellt wurde:

    python temp_controller_with_thermostats.py
    

Überprüfen Sie, ob in der Geräteansicht Ihrer IoT Central-Anwendung Telemetriedaten angezeigt werden:

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

Verwenden der individuellen Registrierung

Verwenden Sie X.509-Zertifikate mit einer individuellen Registrierung zum Testen Ihres Geräts und Ihrer Lösung. Bei einer individuellen Registrierung gibt es in Ihrer IoT Central-Anwendung kein X.509-Stamm- oder -Zwischenzertifikat. Geräte verwenden ein selbstsigniertes X.509-Zertifikat zum Herstellen einer Verbindung mit Ihrer Anwendung.

Generieren eines selbstsignierten Gerätezertifikats

In diesem Abschnitt verwenden Sie ein selbstsigniertes X.509-Zertifikat zum Verbinden von Geräten für individuelle Registrierung, die zum Registrieren eines einzelnen Geräts verwendet werden. Selbstsignierte Zertifikate dienen nur zu Testzwecken.

Warnung

Diese Methode zum Erstellen von X.509-Zertifikaten dient nur zu Testzwecken. Für eine Produktionsumgebung sollten Sie Ihren offiziellen, sicheren Mechanismus für Zertifikatgenerierung verwenden.

Erstellen Sie ein selbstsigniertes X.509-Gerätezertifikat durch Ausführen folgender Befehle:

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

Tipp

Eine Geräte-ID kann Buchstaben, Ziffern und das Zeichen - enthalten.

Diese Befehle erzeugen die folgenden Gerätezertifikate:

filename contents
mytestselfcertprimary_cert.pem Der öffentliche Teil des X.509-Zertifikats des primären Geräts
mytestselfcertprimary_key.pem Der private Schlüssel für das X.509-Zertifikat des primären Geräts
mytestselfcertprimary_fullchain.pem Der gesamte Schlüsselbund für das X.509-Zertifikat des primären Geräts.
mytestselfcertprimary.pfx Die PFX-Datei für das X.509-Zertifikat des primären Geräts.
mytestselfcertsecondary_cert.pem Der öffentliche Teil des X.509-Zertifikats des sekundären Geräts
mytestselfcertsecondary_key.pem Der private Schlüssel für das X.509-Zertifikat des sekundären Geräts
mytestselfcertsecondary_fullchain.pem Der gesamte Schlüsselbund für das X.509-Zertifikat des sekundären Geräts.
mytestselfcertsecondary.pfx Die PFX-Datei für das X.509-Zertifikat des sekundären Geräts.

Erstellen einer individuellen Registrierung

  1. Wählen Sie in der Azure IoT Central-Anwendung die Option Geräte aus, und erstellen Sie aus der Gerätevorlage „Thermostat“ ein neues Gerät mit der Geräte-ID als mytestselfcertprimary. Notieren Sie sich den ID-Bereich. Sie werden ihn später verwenden.

  2. Öffnen Sie das erstellte Gerät, und wählen Sie Verbinden aus.

  3. Wählen Sie Individuelle Registrierung als Authentifizierungstyp und Zertifikate (X.509) als Authentifizierungsmethode aus.

  4. Laden Sie die Datei mytestselfcertprimary_cert.pem hoch, die Sie zuvor als primäres Zertifikat generiert haben.

  5. Laden Sie die Datei mytestselfcertsecondary_cert.pem hoch, die Sie zuvor als sekundäres Zertifikat generiert haben. Klicken Sie dann auf Speichern.

  6. Das Gerät hat jetzt eine individuelle Registrierung mit X.509-Zertifikaten.

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

Ausführen eines Beispiels für ein Gerät mit individueller Registrierung

Wenn Sie Windows verwenden, müssen sich die X.509-Zertifikate im Windows-Zertifikatspeicher befindet, damit das Beispiel funktioniert. Doppelklicken Sie in Windows Explorer auf die zuvor generierten PFX-Dateien – mytestselfcertprimary.pfx und mytestselfcertsecondary.pfx. Wählen Sie im Zertifikatimport-Assistenten die Option Aktueller Benutzer als Speicherort aus, geben Sie 1234 als Kennwort ein, und lassen Sie den Assistenten den Zertifikatspeicher automatisch auswählen. Der Assistent importiert die Zertifikate in den persönlichen Speicher des aktuellen Benutzers.

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Öffnen Sie in der Visual Studio-Projektmappe IoTHubDeviceSamples die Datei Parameter.cs im Projekt TemperatureController.

  2. Fügen Sie die beiden folgenden Parameterdefinitionen der Klasse hinzu:

    [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");
    

    Speichern Sie die Änderungen.

  3. Öffnen Sie in der Visual Studio-Projektmappe IoTHubDeviceSamples die Datei Program.cs im Projekt TemperatureController.

  4. Fügen Sie die folgenden using -Anweisungen ein:

    using System.Security.Cryptography.X509Certificates;
    using System.IO;
    
  5. Fügen Sie der -Klasse die folgende Methode hinzu:

    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. Ersetzen Sie in der SetupDeviceClientAsync-Methode den Codeblock für case "dps" durch den folgenden Code:

    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. Ersetzen Sie die ProvisionDeviceAsync-Methode durch folgenden Code:

    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);
    }
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie dem Projekt die folgenden Umgebungsvariablen hinzu:

    • 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. Erstellen Sie die Anwendung, und führen Sie sie aus. Vergewissern Sie sich, dass die Gerätebereitstellung erfolgreich war.

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Navigieren Sie zum Ordner azure-iot-sdk-java/device/iot-device-samples/pnp-device-sample/temperature-controller-device-sample, der die Datei pom.xml und den Ordner src für das Temperaturreglerbeispiel enthält.

  2. Bearbeiten Sie die Datei pom.xml, um die folgende Abhängigkeitskonfiguration im <dependencies>-Knoten hinzuzufügen:

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

    Speichern Sie die Änderungen.

  3. Öffnen Sie die Datei src/main/java/samples/com/microsoft/azure/sdk/iot/device/TemperatureController.java in Ihrem Text-Editor.

  4. Ersetzen Sie den SecurityProviderSymmetricKey-Import durch die folgenden Importe:

    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. Fügen Sie den folgenden Import hinzu:

    import java.nio.file.*;
    
  6. Fügen Sie SecurityProviderException der Liste der Ausnahmen hinzu, die die main-Methode auslöst:

    public static void main(String[] args) throws IOException, URISyntaxException, ProvisioningDeviceClientException, InterruptedException, SecurityProviderException {
    
  7. Ersetzen Sie die initializeAndProvisionDevice-Methode durch folgenden Code:

    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();
        }
    }
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie in der Shellumgebung die folgenden zwei Umgebungsvariablen hinzu. Geben Sie unbedingt den vollständigen Pfad zu den PEM-Dateien an, und verwenden Sie das richtige Pfadtrennzeichen für Ihr Betriebssystem:

    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
    

    Tipp

    Die anderen erforderlichen Umgebungsvariablen haben Sie beim Durcharbeiten des Tutorials Erstellen einer Clientanwendung und Verbinden der Anwendung mit Ihrer Azure IoT Central-Anwendung festgelegt.

  2. Erstellen Sie die Anwendung, und führen Sie sie aus. Vergewissern Sie sich, dass die Gerätebereitstellung erfolgreich war.

Sie können die vorstehenden Schritte auch für das Zertifikat mytestselfcertsecondary wiederholen.

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Navigieren Sie zum Ordner azure-iot-sdk-node/device/samples/javascript, der die Anwendung pnp_temperature_controller.js enthält, und führen Sie den folgenden Befehl aus, um das X.509-Paket zu installieren:

    npm install azure-iot-security-x509 --save
    
  2. Öffnen Sie die Datei pnp_temperature_controller.js in einem Texteditor.

  3. Bearbeiten Sie die require-Anweisungen so, dass sie folgenden Code enthalten:

    const fs = require('fs');
    const X509Security = require('azure-iot-security-x509').X509Security;
    
  4. Fügen Sie dem Abschnitt „DPS connection information“ die folgenden vier Zeilen hinzu, um die Variable deviceCert zu initialisieren:

    const deviceCert = {
      cert: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_CERT).toString(),
      key: fs.readFileSync(process.env.IOTHUB_DEVICE_X509_KEY).toString()
    };
    
  5. Bearbeiten Sie die Funktion provisionDevice, die den Client erstellt, indem Sie die erste Zeile durch folgenden Code ersetzen:

    var provSecurityClient = new X509Security(registrationId, deviceCert);
    
  6. Ändern Sie in derselben Funktion die Zeile, in der die Variable deviceConnectionString festgelegt wird, wie folgt:

    deviceConnectionString = 'HostName=' + result.assignedHub + ';DeviceId=' + result.deviceId + ';x509=true';
    
  7. Fügen Sie in der Funktion main nach der Zeile, über die Client.fromConnectionString aufgerufen wird, die folgende Zeile hinzu:

    client.setOptions(deviceCert);
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie in der Shellumgebung die folgenden zwei Umgebungsvariablen hinzu. Geben Sie unbedingt den vollständigen Pfad zu den PEM-Dateien an, und verwenden Sie das richtige Pfadtrennzeichen für Ihr Betriebssystem:

    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
    

    Tipp

    Die anderen erforderlichen Umgebungsvariablen haben Sie beim Durcharbeiten des Tutorials Erstellen einer Clientanwendung und Verbinden der Anwendung mit Ihrer Azure IoT Central-Anwendung festgelegt.

  2. Führen Sie das Skript aus, und überprüfen Sie, ob das Gerät erfolgreich bereitgestellt wurde:

    node pnp_temperature_controller.js
    

Sie können die vorstehenden Schritte auch für das Zertifikat mytestselfcertsecondary wiederholen.

So ändern Sie den Beispielcode für die Verwendung der X.509-Zertifikate:

  1. Navigieren Sie zum Ordner azure-iot-device/samples/pnp, und öffnen Sie die Datei temp_controller_with_thermostats.py in einem Text-Editor.

  2. Fügen Sie die folgende from-Anweisung hinzu, um die X.509-Funktionalität zu importieren:

    from azure.iot.device import X509
    
  3. Ändern Sie den ersten Teil der provision_device-Funktion wie folgt:

    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. Ersetzen Sie in der main-Funktion die Zeile, in der die Variable symmetric_key festgelegt wird, durch folgenden Code:

    x509 = X509(
        cert_file=os.getenv("IOTHUB_DEVICE_X509_CERT"),
        key_file=os.getenv("IOTHUB_DEVICE_X509_KEY"),
    )
    
  5. Ersetzen Sie in der main-Funktion den Aufruf der provision_device-Funktion durch folgenden Code:

    registration_result = await provision_device(
        provisioning_host, id_scope, registration_id, x509, model_id
    )
    
  6. Ersetzen Sie in der main-Funktion den Aufruf der IoTHubDeviceClient.create_from_symmetric_key-Funktion durch folgenden Code:

    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,
    )
    

    Speichern Sie die Änderungen.

So führen Sie das Beispiel aus:

  1. Fügen Sie in der Shellumgebung die folgenden zwei Umgebungsvariablen hinzu. Geben Sie unbedingt den vollständigen Pfad zu den PEM-Dateien an, und verwenden Sie das richtige Pfadtrennzeichen für Ihr Betriebssystem:

    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
    

    Tipp

    Die anderen erforderlichen Umgebungsvariablen haben Sie beim Durcharbeiten des Tutorials Erstellen einer Clientanwendung und Verbinden der Anwendung mit Ihrer Azure IoT Central-Anwendung festgelegt.

  2. Führen Sie das Skript aus, und überprüfen Sie, ob das Gerät erfolgreich bereitgestellt wurde:

    python temp_controller_with_thermostats.py
    

Sie können die vorstehenden Schritte auch für das Zertifikat mytestselfcertsecondary wiederholen.

Verbinden mit einem IoT Edge-Gerät

In diesem Abschnitt wird davon ausgegangen, dass Sie eine Gruppenregistrierung verwenden, um Ihr IoT Edge-Gerät zu verbinden. Führen Sie die Schritte in den vorherigen Abschnitten zu folgenden Zwecken aus:

So verbinden Sie das IoT Edge-Gerät mithilfe des X.509-Gerätezertifikats mit IoT Central:

  • Kopieren Sie das Gerätezertifikat und Schlüsseldateien auf Ihr IoT Edge-Gerät. Im vorherigen Gruppenregistrierungsbeispiel hießen diese Dateien sampleDevice01_key.pem und sampleDevice01_cert.pem.

  • Bearbeiten Sie auf dem IoT Edge-Gerät den Abschnitt provisioning in der Konfigurationsdatei /etc/aziot/config.toml wie folgt:

    # 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"
    

    Tipp

    Sie müssen keinen Wert für die registration_id hinzufügen. IoT Edge kann den CN-Wert aus dem X.509-Zertifikat verwenden.

  • Führen Sie den folgenden Befehl aus, um die IoT Edge-Runtime neu zu starten:

    sudo iotedge config apply
    

Weitere Informationen finden Sie unter Erstellen und Bereitstellen von IoT Edge-Geräten im großen Stil unter Linux mithilfe von X.509-Zertifikaten.

Verbinden eines nachgeschalteten Geräts mit IoT Edge

IoT Edge verwendet X.509-Zertifikate, um die Verbindung zwischen nachgeschalteten Geräten und einem IoT Edge-Gerät zu schützen, das als transparentes Gateway fungiert. Weitere Informationen zum Konfigurieren dieses Szenarios finden Sie unter Verbinden eines nachgeschalteten Geräts mit einem Azure IoT Edge-Gateway.

Rotieren von X.509 Gerätezertifikaten

Während des Lebenszyklus Ihrer IoT Central-Anwendung müssen Sie Ihre X.509-Zertifikate rotieren. Beispiel:

  • Bei einer Sicherheitsverletzung ist das Rollen von Zertifikaten eine bewährte Sicherheitsmethode zum Schutz Ihres Systems.
  • X.509-Zertifikate haben Ablaufdaten. Die Häufigkeit, mit der Sie die Zertifikate rollen, hängt von den Sicherheitsanforderungen Ihrer Lösung ab. Kunden, deren Lösungen sensible Daten beinhalten, rotieren Zertifikate möglicherweise täglich, während andere ihre Zertifikate alle zwei Jahre rotieren.

Für unterbrechungsfreie Konnektivität können Sie mit IoT Central primäre und sekundäre X.509-Zertifikate konfigurieren. Wenn die Ablaufdaten von primärem und sekundärem Zertifikat unterschiedlich sind, können Sie das abgelaufene Zertifikat rollen, während Geräte weiterhin Verbindungen mit dem anderen Zertifikat herstellen.

Weitere Informationen finden Sie unter Assume Breach Methodology (Methodik beim Ausgehen von einer Sicherheitsverletzung).

In diesem Abschnitt wird beschrieben, wie Sie die Zertifikate in IoT Central rollen. Wenn Sie ein Zertifikat in IoT Central rollen, müssen Sie auch das neue Gerätezertifikat auf Ihre Geräte kopieren.

Abrufen von neuen X.509-Zertifikaten

Rufen Sie neue X.509-Zertifikate von Ihrem Zertifikatanbieter ab. Sie können Ihre eigenen X.509-Zertifikate mit einem Tool wie OpenSSL erstellen. Dieser Ansatz eignet sich zum Testen von X.509-Zertifikaten, bietet jedoch wenig Sicherheitsgarantien. Verwenden Sie nur diesen Ansatz für Tests – es sei denn, Sie können als Ihr eigener ZS-Anbieter agieren.

Registrierungsgruppen und Sicherheitsverletzungen

Zum Aktualisieren einer Gruppenregistrierung als Reaktion auf eine Sicherheitsverletzung sollten Sie den folgenden Ansatz verwenden, bei dem das aktuelle Zertifikat sofort aktualisiert wird. Führen Sie diese Schritte für das primäre und das sekundäre Zertifikat aus, wenn beide kompromittiert wurden:

  1. Navigieren Sie im linken Bereich zu Berechtigungen, und wählen Sie Geräteverbindungsgruppen aus.

  2. Wählen Sie in der Liste unter „Registrierungsgruppen“ den Gruppennamen aus.

  3. Wählen Sie zum Aktualisieren des Zertifikats Primäres verwalten oder Sekundäres verwalten aus.

  4. Fügen Sie das X.509-Stammzertifikat in der Registrierungsgruppe hinzu, und überprüfen Sie es.

Individuelle Registrierungen und Sicherheitsverletzungen

Wenn Sie Zertifikate als Reaktion auf eine Sicherheitsverletzung rollen, verwenden Sie den folgenden Ansatz zum sofortigen Aktualisieren des aktuellen Zertifikats. Führen Sie diese Schritte für das primäre und das sekundäre Zertifikat aus, wenn beide kompromittiert wurden:

  1. Wählen Sie Geräte und dann das gewünschte Gerät aus.

  2. Wählen Sie Verbinden und dann als Individuelle Registrierung die Methode „Connect“ aus.

  3. Wählen Sie als Mechanismus Zertifikate (X.509) aus.

  4. Wählen Sie für die Zertifikataktualisierung das Ordnersymbol und dann das neue Zertifikat aus, das für den Registrierungseintrag hochgeladen werden soll. Wählen Sie Speichern.

Registrierungsgruppen und Zertifikatablauf

Verwenden Sie zum Behandeln von Zertifikatabläufen den folgenden Ansatz zum sofortigen Aktualisieren des aktuellen Zertifikats:

  1. Navigieren Sie im linken Bereich zu Berechtigungen, und wählen Sie Geräteverbindungsgruppen aus.

  2. Wählen Sie in der Liste unter „Registrierungsgruppen“ den Gruppennamen aus.

  3. Wählen Sie zum Aktualisieren des Zertifikats Primäres verwalten aus.

  4. Fügen Sie das X.509-Stammzertifikat in der Registrierungsgruppe hinzu, und überprüfen Sie es.

  5. Wenn das sekundäre Zertifikat zu einem späteren Zeitpunkt abläuft, kehren Sie zurück, und aktualisieren Sie dieses Zertifikat.

Individuelle Registrierungen und Zertifikatablauf

Wenn Sie Zertifikate rollen, weil sie ablaufen, sollten Sie die Konfiguration des sekundären Zertifikats wie folgt verwenden, um die Downtime für Geräte zu verkürzen, die eine Bereitstellung in Ihrer Anwendung versuchen.

Wenn das sekundäre Zertifikat bald abläuft und gerollt werden muss, können Sie zur Verwendung der primären Konfiguration wechseln. Ein solcher Wechsel zwischen primärem und sekundärem Zertifikat verkürzt die Downtime für Geräte, die eine Bereitstellung in Ihrer Anwendung versuchen.

  1. Wählen Sie Geräte und dann das gewünschte Gerät aus.

  2. Wählen Sie Verbinden und dann als Individuelle Registrierung die Methode „Connect“ aus.

  3. Wählen Sie als Mechanismus Zertifikate (X.509) aus.

  4. Wählen Sie für die Aktualisierung des sekundären Zertifikats das Ordnersymbol und dann das neue Zertifikat aus, das für den Registrierungseintrag hochgeladen werden soll. Wählen Sie Speichern.

  5. Wenn das primäre Zertifikat zu einem späteren Zeitpunkt abgelaufen ist, kehren Sie zurück, und aktualisieren Sie dieses Zertifikat.