Freigeben über


Tutorial: Konfigurieren eines Enrollment over Secure Transport-Servers für Azure IoT Edge

Gilt für: Häkchen für IoT Edge 1.5 IoT Edge 1.5 IoT Edge 1.4 Häkchen IoT Edge 1.4

Wichtig

IoT Edge 1.5 LTS und IoT Edge 1.4 LTS sind unterstützte Releases. Das Ende der Lebensdauer von IoT Edge 1.4 LTS wird am 12. November 2024 erreicht. Wenn Sie ein früheres Release verwenden, finden Sie weitere Informationen unter Aktualisieren von IoT Edge.

Mit Azure IoT Edge können Sie Ihre Geräte so konfigurieren, dass sie einen Enrollment over Secure Transport (EST)-Server zum Verwalten von x509-Zertifikaten verwenden.

Dieses Tutorial führt Sie durch das Hosten eines Test-EST-Servers und Konfigurieren eines IoT Edge-Geräts für die Registrierung und Verlängerung von x509-Zertifikaten. In diesem Tutorial lernen Sie Folgendes:

  • Erstellen und Hosten eines Test-EST-Servers
  • Konfigurieren der DPS-Gruppenregistrierung
  • Konfigurieren des Geräts

Ein Diagramm mit einer allgemeinen Übersicht über die drei Schritte, die zum Durcharbeiten dieses Tutorial erforderlich sind

Voraussetzungen

Was ist Enrollment over Secure Transport?

Enrollment over Secure Transport (EST) ist ein kryptografisches Protokoll, das die Ausstellung von x.509-Zertifikaten automatisiert. Es wird für PKI-Clients (Public Key Infrastructure) wie IoT Edge verwendet, die Clientzertifikate benötigen, die einer Zertifizierungsstelle (CA) zugeordnet sind. EST ersetzt den Bedarf an einer manuellen Zertifikatverwaltung, die riskant und fehleranfällig sein kann.

EST-Server

Für die Zertifikatausstellung und -verlängerung benötigen Sie einen EST-Server, der auf Ihre Geräte zugreifen kann.

Wichtig

Berücksichtigen Sie bei Lösungen auf Unternehmensniveau: GlobalSign IoT Edge Enroll oder DigiCert IoT Device Manager.

Für Tests und Entwicklung können Sie einen Test-EST-Server verwenden. In diesem Tutorial erstellen Sie einen Test-EST-Server.

Ausführen des EST-Servers auf dem Gerät

Damit Sie schnell beginnen können, zeigt dieses Tutorial die Schritte zum Bereitstellen eines einfachen EST-Servers in einem Container lokal auf dem IoT Edge-Gerät. Diese Methode ist der einfachste Ansatz zum Ausprobieren.

Die Dockerfile verwendet Ubuntu 18.04, eine Cisco-Bibliothek namens libest und Beispielservercode. Sie wurde mit der folgenden Einstellung konfiguriert, die Sie ändern können:

  • Stamm-CA, die 20 Jahre lang gültig ist
  • EST-Serverzertifikat, das 10 Jahre lang gültig ist
  • Legen Sie die Standardtage für das Zertifikat auf „1“ fest, um die EST-Verlängerung zu testen.
  • Der EST-Server wird auf dem IoT Edge-Gerät lokal in einem Container ausgeführt.

Achtung

Verwenden Sie diese Dockerfile nicht in einer Produktionsumgebung.

  1. Stellen Sie eine Verbindung mit dem Gerät her, z. B. mithilfe von SSH, auf dem Sie IoT Edge installiert haben.

  2. Erstellen Sie eine Datei mit dem Namen Dockerfile (Groß-/Kleinschreibung beachten), und fügen Sie den Beispielinhalt mithilfe Ihres bevorzugten Text-Editors hinzu.

    Tipp

    Wenn Sie Ihren EST-Server in Azure Container Instance hosten möchten, ändern Sie myestserver.westus.azurecontainer.io in den DNS-Namen dieses Servers. Wenn Sie einen DNS-Namen auswählen, beachten Sie, dass die DNS-Bezeichnung für eine Azure Container-Instanz mindestens fünf Zeichen lang sein muss.

    # DO NOT USE IN PRODUCTION - Use only for testing #
    
    FROM ubuntu:18.04
    
    RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \
        git clone https://github.com/cisco/libest.git && cd libest && \
        ./configure --disable-safec && make install && \
        rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \
        apt autoremove -y && apt clean -y && apt autoclean -y && \
        rm -rf /var/lib/apt /tmp/* /var/tmp/*
    
    WORKDIR /libest/example/server/
    
    # Setting the root CA expiration to 20 years
    RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh
    
    ## If you want to host your EST server remotely (for example, an Azure Container Instance),
    ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server
    ## OR, change the IP address
    ## and uncomment the corresponding line.
    # RUN sed -i "s|DNS.2 = ip6-localhost|DNS.2 = myestserver.westus.azurecontainer.io|g" ./ext.cnf
    # RUN sed -i "s|IP.2 = ::1|IP.2 = <YOUR EST SERVER IP ADDRESS>|g" ./ext.cnf
    
    # Set EST server certificate to be valid for 10 years
    RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh
    
    # Create the CA
    RUN echo 1 | ./createCA.sh
    
    # Set cert default-days to 1 to show EST renewal
    RUN sed -i "s|default_days   = 365|default_days   = 1 |g" ./estExampleCA.cnf
    
    # The EST server listens on port 8085 by default
    # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085. 
    # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh
    EXPOSE 8085
    CMD ./runserver.sh
    
  3. Erstellen Sie in dem Verzeichnis, in dem Ihre Dockerfile gespeichert ist, Ihr Image aus der Beispiel-Dockerfile.

    sudo docker build . --tag est
    
  4. Starten Sie den Container, und machen Sie dessen Port 8085 für Port 8085 auf dem Host verfügbar.

    sudo docker run -d -p 8085:8085 est
    
  5. Jetzt wird Ihr EST-Server ausgeführt und kann mithilfe von localhost auf Port 8085 erreicht werden. Überprüfen Sie, ob er verfügbar ist, indem Sie einen Befehl zum Anzeigen seines Serverzertifikats ausführen.

    openssl s_client -showcerts -connect localhost:8085
    
  6. In der Mitte der Ausgabe sollte -----BEGIN CERTIFICATE----- angezeigt werden. Durch Abrufen des Zertifikats wird überprüft, ob der Server erreichbar ist und sein Zertifikat anzeigen kann.

Tipp

Wenn Sie diesen Container in der Cloud ausführen möchten, erstellen Sie das Image, und pushen Sie es in die Azure Container Registry. Folgen Sie dann dem Schnellstart zum Bereitstellen in Azure Container Instance.

Zertifizierungsstellenzertifikat herunterladen

Jedes Gerät erfordert das Zertifizierungsstellenzertifikat, das einem Geräteidentitätszertifikat zugeordnet ist.

  1. Erstellen Sie auf dem IoT Edge-Gerät das Verzeichnis /var/aziot/certs, wenn es noch nicht vorhanden ist. Ändern Sie dann die Verzeichnisangabe entsprechend.

    # If the certificate directory doen't exist, create, set ownership, and set permissions
    sudo mkdir -p /var/aziot/certs
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    # Change directory to /var/aziot/certs
    cd /var/aziot/certs
    
  2. Rufen Sie das Zertifizierungsstellenzertifikat vom EST-Server in das Verzeichnis /var/aziot/certs ab, und nennen Sie es cacert.crt.pem.

    openssl s_client -showcerts -verify 5 -connect localhost:8085 < /dev/null | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
    
  3. Zertifikate sollten dem Schlüsseldienstbenutzer aziotcs gehören. Legen Sie das Eigentum für alle Zertifikatdateien auf aziotcs fest, und legen Sie Berechtigungen fest. Weitere Informationen zu Zertifikateigentum und Berechtigungen finden Sie unter Berechtigungsanforderungen.

    # Give aziotcs ownership to certificates
    sudo chown -R aziotcs:aziotcs /var/aziot/certs
    # Read and write for aziotcs, read-only for others
    sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
    

Bereitstellen des IoT Edge-Geräts mithilfe von DPS

Mithilfe des Device Provisioning Service können Sie Zertifikate von einem EST-Server in IoT Edge automatisch ausstellen und verlängern lassen. Wenn Sie den EST-Server des Tutorials verwenden, laufen die Identitätszertifikate in einem einzigen Tag ab. Dadurch wird die manuelle Bereitstellung mit IoT Hub unpraktisch, weil der Fingerabdruck bei jedem Ablauf des Zertifikats in IoT Hub manuell aktualisiert werden muss. Die DPS-CA-Authentifizierung mit Registrierungsgruppe ermöglicht eine Verlängerung der Geräteidentitätszertifikate ohne manuelle Schritte.

Hochladen des Zertifizierungsstellenzertifikats in DPS

  1. Wenn Sie keinen Device Provisioning Service mit IoT Hub verknüpft haben, lesen Sie Schnellstart: Einrichten des IoT Hub Device Provisioning Service mit dem Azure-Portal.

  2. Übertragen Sie die Datei cacert.crt.pem von Ihrem Gerät auf einen Computer mit Zugriff auf das Azure-Portal, z. B. Ihren Entwicklungscomputer. Eine einfache Möglichkeit zum Übertragen des Zertifikats besteht darin, eine Remoteverbindung mit Ihrem Gerät herzustellen, das Zertifikat mithilfe des Befehls cat /var/aziot/certs/cacert.crt.pem anzuzeigen, die gesamte Ausgabe zu kopieren und den Inhalt in eine neue Datei auf Ihrem Entwicklungscomputer einzufügen.

  3. Navigieren Sie im Azure-Portal zu Ihrer Instanz des IoT Hub Device Provisioning Service.

  4. Wählen Sie unter Einstellungen die Option Zertifikate und dann + Hinzufügen aus.

    Ein Screenshot, in dem das Zertifizierungsstellenzertifikat dem Device Provisioning Service über das Azure-Portal hinzugefügt wird

    Einstellung Wert
    Zertifikatsname Geben Sie einen Anzeigenamen für das Zertifizierungsstellenzertifikat an.
    PEM- oder CER-Zertifikatsdatei Navigieren Sie vom EST-Server zu cacert.crt.pem.
    Beim Hochladen den Zertifikatstatus auf „verifiziert“ festlegen Aktivieren Sie das Kontrollkästchen.
  5. Wählen Sie Speichern aus.

Erstellen einer Registrierungsgruppe

  1. Navigieren Sie im Azure-Portal zu Ihrer Instanz des IoT Hub Device Provisioning Service.

  2. Klicken Sie in Einstellungen auf Registrierungen verwalten.

  3. Wählen Sie Registrierungsgruppe hinzufügen aus, und führen Sie dann die folgenden Schritte zum Konfigurieren der Registrierung aus.

  4. Wählen Sie auf der Registerkarte Registrierung + Bereitstellung die folgenden Einstellungen aus:

    Ein Screenshot, in dem eine DPS-Registrierungsgruppe über das Azure-Portal hinzugefügt wird

    Einstellung Wert
    Nachweismechanismus Wählen Sie In diese Instanz des Gerätebereitstellungsdienst hochgeladene X.509-Zertifikate aus
    Primäres Zertifikat Wählen Sie Ihr Zertifikat aus der Dropdownliste aus.
    Gruppenname Geben Sie einen Anzeigenamen für diese Gruppenregistrierung an.
    Bereitstellungsstatus Aktivieren Sie das Kontrollkästchen Diese Registrierung aktivieren
  5. Wählen Sie auf der Registerkarte IoT Hubs Ihren IoT Hub aus der Liste aus.

  6. Aktivieren Sie auf der Registerkarte Geräteeinstellungen das Kontrollkästchen IoT Edge auf bereitgestellten Geräten aktivieren.

    Die anderen Einstellungen sind für das Tutorial nicht relevant. Sie können die Standardeinstellungen übernehmen.

  7. Klicken Sie auf Überprüfen + erstellen.

Nachdem es eine Registrierung für das Gerät gibt, kann die IoT Edge-Runtime jetzt Gerätezertifikate für den verknüpften IoT Hub automatisch verwalten.

Konfigurieren eines IoT Edge-Geräts

Aktualisieren Sie auf dem IoT Edge-Gerät die IoT Edge-Konfigurationsdatei, um Gerätezertifikate vom EST-Server verwenden zu können.

  1. Öffnen Sie die IoT Edge-Konfigurationsdatei mithilfe eines Editors. Verwenden Sie beispielsweise den nano-Editor, um die Datei /etc/aziot/config.toml zu öffnen.

    sudo nano /etc/aziot/config.toml
    
  2. Fügen Sie die folgenden Abschnitte in der Konfigurationsdatei hinzu, oder ersetzen Sie sie. Diese Konfigurationseinstellungen verwenden zuerst den Benutzernamen und die Kennwortauthentifizierung, um das Gerätezertifikat vom EST-Server abzurufen. Das Gerätezertifikat wird verwendet, um sich für zukünftige Zertifikatverlängerungen beim EST-Server zu authentifizieren.

    Ersetzen Sie den folgenden Platzhaltertext: <DPS-ID-SCOPE> durch den ID-Bereich des DPS, der mit dem IoT Hub verknüpft ist, der das registrierte Gerät enthält, und myiotedgedevice durch die in Azure IoT Hub registrierte Geräte-ID. Sie können den Wert ID-Bereich auf der DPS-Seite Übersicht finden.

    # DPS provisioning with X.509 certificate
    # Replace with ID Scope from your DPS
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "<DPS-ID-SCOPE>"
    
    [provisioning.attestation]
    method = "x509"
    registration_id = "myiotedgedevice"
    
    [provisioning.attestation.identity_cert]
    method = "est"
    common_name = "myiotedgedevice"
    
    # Auto renewal settings for the identity cert
    # Available only from IoT Edge 1.3 and above
    [provisioning.attestation.identity_cert.auto_renew]
    rotate_key = false
    threshold = "80%"
    retry = "4%"
    
    # Trusted root CA certificate in the global EST options
    # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates.
    [cert_issuance.est]
        trusted_certs = [
            "file:///var/aziot/certs/cacert.crt.pem",
        ]
    
    # The default username and password for libest
    # Used for initial authentication to EST server
    #
    # Not recommended for production
    [cert_issuance.est.auth]
    username = "estuser"
    password = "estpwd"
    
    [cert_issuance.est.urls]
    default = "https://localhost:8085/.well-known/est"
    

    Hinweis

    In diesem Beispiel verwendet IoT Edge den Benutzernamen und das Kennwort, um sich beim EST-Server jedes mal zu authentifizieren, wenn ein Zertifikat abgerufen werden muss. Diese Methode wird in der Produktion nicht empfohlen, da 1) sie das Speichern eines Geheimnisses im Klartext erfordert und 2) IoT Edge auch ein Identitätszertifikat verwenden sollte, um sich beim EST-Server zu authentifizieren. Für die Produktion ändern:

    1. Erwägen Sie die Verwendung langlebiger Bootstrap-Zertifikate, die während der Herstellung auf dem Gerät gespeichert werden können, ähnlich dem empfohlenen Ansatz für DPS. Informationen zum Konfigurieren des Bootstrap-Zertifikats für den EST-Server finden Sie unter Authentifizieren eines Geräts mit Zertifikaten, die über EST dynamisch ausgestellt wurden.
    2. Konfigurieren Sie [cert_issuance.est.identity_auto_renew] mit der gleichen Syntax wie die Konfiguration für die automatische Verlängerung des Bereitstellungszertifikats oben.

    Auf diese Weise verwendet der IoT Edge-Zertifikatdienst das Bootstrap-Zertifikat für die anfängliche Authentifizierung beim EST-Server und fordert ein Identitätszertifikat für zukünftige EST-Anforderungen an denselben Server an. Wenn das EST-Identitätszertifikat aus irgendeinem Grund vor der Erneuerung abläuft, greift IoT Edge auf die Verwendung des Bootstrap-Zertifikats zurück.

  3. Führen Sie sudo iotedge config apply aus, um die neuen Einstellungen anzuwenden.

  4. Führen Sie sudo iotedge check aus, um ihre IoT Edge-Gerätekonfiguration zu überprüfen. Alle Konfigurationsüberprüfungen sollten erfolgreich sein. Bei diesem Tutorial können Sie Produktionsbereitschaftsfehler und -warnungen, DNS-Serverwarnungen und Konnektivitätsprüfungen ignorieren.

  5. Navigieren Sie in IoT Hub zu Ihrem Gerät. Zertifikatfingerabdrücke wurden dem Gerät mithilfe von DPS und des EST-Servers automatisch hinzugefügt.

    Ein Screenshot von IoT Hub-Geräteeinstellungen im Azure-Portal. In den Feldern der Zertifikatfingerabdrücke werden Werte angezeigt.

    Hinweis

    Wenn Sie ein neues IoT Edge-Gerät erstellen, wird der Statuscode 417 -- The device's deployment configuration is not set in the Azure portal. angezeigt. Dieser Status ist normal und bedeutet, dass das Gerät bereit ist, eine Modulbereitstellung zu erhalten.

Testen der Zertifikatverlängerung

Sie können die Geräteidentitätszertifikate sofort erneut ausführen, indem Sie die vorhandenen Zertifikate und Schlüssel aus dem Gerät entfernen und dann die IoT Edge-Konfiguration anwenden. IoT Edge erkennt die fehlenden Dateien und fordert neue Zertifikate an.

  1. Beenden Sie die IoT Edge-Runtime auf dem IoT Edge-Gerät.

    sudo iotedge system stop
    
  2. Löschen Sie die vorhandenen Zertifikate und Schlüssel.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. Wenden Sie die IoT Edge-Konfiguration zum Verlängern von Zertifikaten an.

    sudo iotedge config apply
    

    Möglicherweise müssen Sie einige Minuten warten, bis die Runtime gestartet wird.

  4. Navigieren Sie in IoT Hub zu Ihrem Gerät. Zertifikatfingerabdrücke wurden aktualisiert.

    Ein Screenshot von IoT Hub-Geräteeinstellungen im Azure-Portal. In den Feldern der Zertifikatfingerabdrücke werden neue Werte angezeigt.

  5. Listen Sie die Zertifikatdateien mithilfe des Befehls sudo ls -l /var/lib/aziot/certd/certs auf. Es sollten aktuelle Erstellungsdaten für die Gerätezertifikatdateien angezeigt werden.

  6. Verwenden Sie den Befehl openssl zum Überprüfen des neuen Zertifikatinhalts. Beispiel:

    sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
    

    Ersetzen Sie den Namen der Gerätezertifikatdatei (CER) durch die Zertifikatdatei Ihres Geräts.

    Dann sollten Sie feststellen, dass der Datumsbereich für die Gültigkeit des Zertifikats geändert wurde.

Im Folgenden finden Sie optionale andere Möglichkeiten zum Testen der Zertifikatverlängerung. Diese Überprüfungen zeigen, wie IoT Edge Zertifikate vom EST-Server erneuert, wenn sie ablaufen oder fehlen. Nach jedem Test können Sie neue Fingerabdrücke im Azure-Portal und mithilfe des Befehls openssl das neue Zertifikat überprüfen.

  1. Versuchen Sie, einen Tag zu warten, bis das Zertifikat abläuft. Der Test-EST-Server ist so konfiguriert, dass Zertifikate erstellt werden, die nach einem Tag ablaufen. IoT Edge verlängert das Zertifikat automatisch.
  2. Versuchen Sie, den Prozentsatz in threshold für die automatische Verlängerung in config.toml anzupassen (derzeit in der Beispielkonfiguration auf 80 % eingestellt). Setzen Sie es beispielsweise auf 10% und beobachten Sie die Zertifikatserneuerung alle ca. 2 Stunden.
  3. Versuchen Sie, das threshold auf eine ganze Zahl gefolgt von m (Minuten) einzustellen. Setzen Sie es beispielsweise auf 60m und beobachten Sie die Zertifikatserneuerung 1 Stunde vor Ablauf.

Bereinigen von Ressourcen

Sie können die in diesem Tutorial erstellten Ressourcen und Konfigurationen beibehalten und wiederverwenden. Andernfalls können Sie die in diesem Artikel verwendeten lokalen Konfigurationen und die Azure-Ressourcen löschen, um Kosten zu vermeiden.

Löschen von Azure-Ressourcen

Das Löschen von Azure-Ressourcen und -Ressourcengruppen kann nicht rückgängig gemacht werden. Achten Sie daher darauf, dass Sie nicht versehentlich die falsche Ressourcengruppe oder die falschen Ressourcen löschen. Wenn Sie den IoT-Hub in einer bereits vorhandenen Ressourcengruppe erstellt haben, die Ressourcen enthält, die Sie behalten möchten, löschen Sie nicht die Ressourcengruppe, sondern nur die IoT-Hub-Ressource.

So löschen Sie die Ressourcen:

  1. Melden Sie sich beim Azure-Portal an, und wählen Sie anschließend Ressourcengruppen aus.

  2. Wählen Sie den Namen der Ressourcengruppe aus, die Ihre IoT Edge-Testressourcen enthält.

  3. Überprüfen Sie die Liste der Ressourcen, die Ihre Ressourcengruppe enthält. Wenn Sie alle löschen möchten, klicken Sie auf Ressourcengruppe löschen. Wenn Sie nur einige Ressourcen löschen möchten, wählen Sie die jeweiligen Ressourcen aus, um sie einzeln zu löschen.

Nächste Schritte