Tutorial: Konfigurieren eines Enrollment over Secure Transport-Servers für Azure IoT Edge
Gilt für: IoT Edge 1.5 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
Voraussetzungen
- Ein IoT Edge-Gerät, auf dem die neueste Azure IoT Edge-Runtime installiert wurde. Wenn Sie ein Testgerät erstellen müssen, führen Sie den Schnellstart: Bereitstellen Ihres ersten IoT Edge-Moduls auf einem virtuellen Linux-Gerät aus.
- Ihr IoT Edge-Gerät erfordert Azure IoT Edge-Runtime 1.2 oder höher für den EST-Support. Azure IoT Edge-Runtime 1.3 oder höher ist für die EST-Zertifikatverlängerung erforderlich.
- IoT Hub Device Provisioning Service (DPS). der mit IoT Hub verknüpft ist. Informationen zum Konfigurieren von DPS finden Sie im Schnellstart: Einrichten des IoT Hub Device Provisioning Service über das Azure-Portal.
Hinweis
Um EST und IoT Edge für die automatische Ausstellung und Verlängerung von Geräteidentitätszertifikaten zu verwenden – eine Vorgehensweise, die für die Produktion empfohlen wird –, muss IoT Edge im Rahmen einer zertifizierungsstellenbasierten DPS-Registrierungsgruppe bereitgestellt werden. Andere Bereitstellungsmethoden, einschließlich manueller X.509-Bereitstellung mit IoT Hub und DPS mit einzelner Registrierung, unterstützen keine automatische Erneuerung des Geräteidentitätszertifikats.
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.
Stellen Sie eine Verbindung mit dem Gerät her, z. B. mithilfe von SSH, auf dem Sie IoT Edge installiert haben.
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
Erstellen Sie in dem Verzeichnis, in dem Ihre
Dockerfile
gespeichert ist, Ihr Image aus der Beispiel-Dockerfile.sudo docker build . --tag est
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
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
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.
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 doesn'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
Rufen Sie das Zertifizierungsstellenzertifikat vom EST-Server in das Verzeichnis
/var/aziot/certs
ab, und nennen Sie escacert.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
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
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.
Ü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 Befehlscat /var/aziot/certs/cacert.crt.pem
anzuzeigen, die gesamte Ausgabe zu kopieren und den Inhalt in eine neue Datei auf Ihrem Entwicklungscomputer einzufügen.Navigieren Sie im Azure-Portal zu Ihrer Instanz des IoT Hub Device Provisioning Service.
Wählen Sie unter Einstellungen die Option Zertifikate und dann + Hinzufügen aus.
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. Wählen Sie Speichern aus.
Erstellen einer Registrierungsgruppe
Navigieren Sie im Azure-Portal zu Ihrer Instanz des IoT Hub Device Provisioning Service.
Klicken Sie in Einstellungen auf Registrierungen verwalten.
Wählen Sie Registrierungsgruppe hinzufügen aus, und führen Sie dann die folgenden Schritte zum Konfigurieren der Registrierung aus.
Wählen Sie auf der Registerkarte Registrierung + Bereitstellung die folgenden Einstellungen aus:
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 Wählen Sie auf der Registerkarte IoT Hubs Ihren IoT Hub aus der Liste aus.
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.
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.
Ö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
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, undmyiotedgedevice
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:
- 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.
- 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.
Führen Sie
sudo iotedge config apply
aus, um die neuen Einstellungen anzuwenden.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.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.
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.
Beenden Sie die IoT Edge-Runtime auf dem IoT Edge-Gerät.
sudo iotedge system stop
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/*"
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.
Navigieren Sie in IoT Hub zu Ihrem Gerät. Zertifikatfingerabdrücke wurden aktualisiert.
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.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.
- 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.
- Versuchen Sie, den Prozentsatz in
threshold
für die automatische Verlängerung inconfig.toml
anzupassen (derzeit in der Beispielkonfiguration auf 80 % eingestellt). Setzen Sie es beispielsweise auf10%
und beobachten Sie die Zertifikatserneuerung alle ca. 2 Stunden. - Versuchen Sie, das
threshold
auf eine ganze Zahl gefolgt vonm
(Minuten) einzustellen. Setzen Sie es beispielsweise auf60m
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:
Melden Sie sich beim Azure-Portal an, und wählen Sie anschließend Ressourcengruppen aus.
Wählen Sie den Namen der Ressourcengruppe aus, die Ihre IoT Edge-Testressourcen enthält.
Ü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
- Informationen zur Verwendung des EST-Servers zum Ausstellen von Edge-CA-Zertifikaten finden Sie unter Beispielkonfiguration.
- Die Verwendung des Benutzernamens und des Kennworts für den Bootstrap der Authentifizierung auf dem EST-Server wird für eine Produktionsumgebung nicht empfohlen. Berücksichtigen Sie stattdessen die Verwendung langlebiger Bootstrap-Zertifikate, die während der Herstellung auf dem Gerät gespeichert werden können, ähnlich wie die empfohlene Vorgehensweise 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.
- Der EST-Server kann auch zum Ausstellen von Zertifikaten für alle Geräte in einer Hierarchie verwendet werden. Je nachdem, ob Sie ISA-95-Anforderungen haben, müssen Sie möglicherweise eine Kette von EST-Servern mit einem Server auf jeder Ebene ausführen oder die Anforderungen mithilfe des API-Proxymoduls weiterleiten. Weitere Informationen finden Sie in Kevins Blog.
- Berücksichtigen Sie bei Lösungen auf Unternehmensniveau: GlobalSign IoT Edge Enroll, DigiCert IoT Device Manager und Keytos EZCA.
- Weitere Informationen zu Zertifikaten finden Sie unter Grundlegendes zur Verwendung von Zertifikaten durch Azure IoT Edge.