Verwalten von IoT Edge-Zertifikaten
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.
Alle IoT Edge-Geräte verwenden Zertifikate, um sichere Verbindungen zwischen der Runtime und allen Modulen zu erstellen, die auf dem Gerät ausgeführt werden. IoT Edge-Geräte, die als Gateways fungieren, verwenden dieselben Zertifikate, um auch eine Verbindung mit ihren Downstreamgeräten herzustellen.
Hinweis
Der in diesem Artikel verwendete Begriff Stamm-CA (Certificate Authority, Zertifizierungsstelle, ZS) bezieht sich auf das Zertifikat der obersten Zertifizierungsstelle in der Zertifikatkette für Ihre IoT-Lösung. Sie müssen nicht den Zertifikatstamm einer syndizierten Zertifizierungsstelle oder den Stamm der Zertifizierungsstelle Ihres Unternehmens verwenden. In vielen Fällen handelt es sich dabei um ein Zertifikat einer Zwischenzertifizierungsstelle.
Voraussetzungen
Sie sollten mit den in Grundlegendes zur Verwendung von Zertifikaten durch Azure IoT Edge vorgestellten Konzepten und insbesondere mit der Verwendung von Zertifikaten durch IoT Edge vertraut sein.
Ein IoT Edge-Gerät.
Wenn Sie kein IoT Edge-Gerät eingerichtet haben, können Sie eines in einem virtuellen Azure-Computer erstellen. Führen Sie die Schritte im Schnellstart zum Erstellen eines virtuellen Linux-Geräts oder zum Erstellen eines virtuellen Windows-Geräts aus.
Möglichkeit, die IoT Edge Konfigurationsdatei
config.toml
gemäß der Konfigurationsvorlage zu bearbeitenWenn Ihre
config.toml
nicht auf der Vorlage basiert, öffnen Sie die Vorlage, und verwenden Sie die Hinweise in den Kommentaren, um Konfigurationsabschnitte hinzuzufügen, die der Struktur der Vorlage entsprechen.Wenn Sie über eine neue IoT Edge-Installation verfügen, die noch nicht konfiguriert wurde, kopieren Sie die Vorlage, um die Konfiguration zu initialisieren. Verwenden Sie diesen Befehl nicht, wenn Sie über eine vorhandene Konfiguration verfügen. Damit wird die Datei überschrieben.
sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
Formatanforderungen
Tipp
- Ein Zertifikat kann in einer Binärdarstellung namens DER (Distinguished Encoding Rules) oder einer Textdarstellung namens PEM (Privacy Enhanced Mail) codiert werden. Das PEM-Format besteht aus dem Header
-----BEGIN CERTIFICATE-----
, gefolgt vom Base64-codierten DER-Zertifikat, gefolgt vom Footer-----END CERTIFICATE-----
. - Ähnlich wie beim Zertifikat kann der private Schlüssel in binärem DER-Format oder als Textdarstellung im PEM-Format codiert werden.
- Da das PEM-Format Abgrenzungen zulässt, ist es auch möglich, eine PEM-Datei zu erstellen, die sowohl
CERTIFICATE
als auchPRIVATE KEY
nacheinander in derselben Datei enthält. - Zum Schluss können das Zertifikat und der private Schlüssel zusammen in einer binären Darstellung namens PKCS#12 codiert werden, die mit einem optionalen Kennwort verschlüsselt ist.
Dateierweiterungen sind willkürlich, und Sie müssen den Befehl file
ausführen oder die Datei anzeigen, um den Typ zu überprüfen. Im Allgemeinen gelten für Dateien die folgenden Erweiterungskonventionen:
.cer
ist ein Zertifikat im DER- oder PEM-Format..pem
ist entweder ein Zertifikat, ein privater Schlüssel oder beides im PEM-Format..pfx
ist eine PKCS#12-Datei.
Bei IoT Edge muss für das Zertifikat und den privaten Schlüssel Folgendes gelten:
- PEM-Format
- Separate Dateien
- In den meisten Fällen mit der vollständigen Kette
Wenn Sie von Ihrem PKI-Anbieter eine .pfx
-Datei erhalten, handelt es sich wahrscheinlich um das Zertifikat und den privaten Schlüssel, die zusammen in einer Datei codiert sind. Überprüfen Sie mithilfe des Befehls file
, ob es sich um einen PKCS#12-Dateityp handelt. Sie können PKCS#12-Dateien mit der Erweiterung .pfx
mithilfe des Befehls openssl pkcs12 in PEM-Dateien konvertieren.
Wenn Ihr PKI-Anbieter eine .cer
-Datei bereitstellt, könnte sie dasselbe Zertifikat wie .pfx
enthalten. Es kann sich aber auch um das (Stamm-)Ausstellerzertifikat des PKI-Anbieters handeln. Um dies zu überprüfen, untersuchen Sie die Datei mit dem Befehl openssl x509
. Wenn es sich um das Ausstellerzertifikat handelt:
- Wenn es im DER-Format (Binärformat) vorliegt, konvertieren Sie es mit
openssl x509 -in cert.cer -out cert.pem
in das PEM-Format. - Verwenden Sie die PEM-Datei als Vertrauenspaket. Weitere Informationen zu Vertrauenspaketen finden Sie im nächsten Abschnitt.
Wichtig
Ihre PKI-Infrastruktur sollte RSA-Schlüssel mit 2.048 Bit und EC-P-256-Schlüssel unterstützen. Beispielsweise sollten Ihre EST-Server diese Schlüsseltypen unterstützen. Sie können andere Schlüsseltypen verwenden, wir testen jedoch nur RSA-Schlüssel mit 2.048 Bit und EC P-256-Schlüssel.
Erforderliche Berechtigungen
In der folgenden Tabelle sind die Datei- und Verzeichnisberechtigungen aufgeführt, die für die IoT Edge-Zertifikate erforderlich sind. Das bevorzugte Verzeichnis für die Zertifikate ist /var/aziot/certs/
und für Schlüssel /var/aziot/secrets/
.
Datei oder Verzeichnis | Berechtigungen | Besitzer |
---|---|---|
Zertifikatverzeichnis /var/aziot/certs/ |
drwxr-xr-x (755) | aziotcs |
Zertifikatdateien in /var/aziot/certs/ |
-wr-r--r-- (644) | aziotcs |
Schlüsselverzeichnis /var/aziot/secrets/ |
drwx------ (700) | aziotks |
Schlüsseldateien in /var/aziot/secrets/ |
-wr------- (600) | aziotks |
Führen Sie die folgenden Befehle aus, um die Verzeichnisse zu erstellen, die Berechtigungen festzulegen und den Besitzer festzulegen:
# If the certificate and keys directories don'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
sudo mkdir -p /var/aziot/secrets
sudo chown aziotks:aziotks /var/aziot/secrets
sudo chmod 700 /var/aziot/secrets
# Give aziotcs ownership to certificates
# Read and write for aziotcs, read-only for others
sudo chown -R aziotcs:aziotcs /var/aziot/certs
sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
# Give aziotks ownership to private keys
# Read and write for aziotks, no permission for others
sudo chown -R aziotks:aziotks /var/aziot/secrets
sudo find /var/aziot/secrets -type f -name "*.*" -exec chmod 600 {} \;
# Verify permissions of directories and files
sudo ls -Rla /var/aziot
Die Ausgabe der Liste mit dem korrekten Besitzer und korrekten Berechtigungen sieht in etwa wie folgt aus:
azureUser@vm:/var/aziot$ sudo ls -Rla /var/aziot
/var/aziot:
total 16
drwxr-xr-x 4 root root 4096 Dec 14 00:16 .
drwxr-xr-x 15 root root 4096 Dec 14 00:15 ..
drwxr-xr-x 2 aziotcs aziotcs 4096 Jan 14 00:31 certs
drwx------ 2 aziotks aziotks 4096 Jan 23 17:23 secrets
/var/aziot/certs:
total 20
drwxr-xr-x 2 aziotcs aziotcs 4096 Jan 14 00:31 .
drwxr-xr-x 4 root root 4096 Dec 14 00:16 ..
-rw-r--r-- 1 aziotcs aziotcs 1984 Jan 14 00:24 azure-iot-test-only.root.ca.cert.pem
-rw-r--r-- 1 aziotcs aziotcs 5887 Jan 14 00:27 iot-edge-device-ca-devicename-full-chain.cert.pem
/var/aziot/secrets:
total 16
drwx------ 2 aziotks aziotks 4096 Jan 23 17:23 .
drwxr-xr-x 4 root root 4096 Dec 14 00:16 ..
-rw------- 1 aziotks aziotks 3243 Jan 14 00:28 iot-edge-device-ca-devicename.key.pem
Verwalten einer vertrauenswürdigen Stammzertifizierungsstelle (Vertrauenspaket)
Die Verwendung eines selbstsignierten Zertifikats einer Zertifizierungsstelle (CA) als Vertrauensbasis mit IoT Edge und Modulen wird als Vertrauenspaket bezeichnet. Das Vertrauenspaket steht für IoT Edge und Module für die Kommunikation mit Servern zur Verfügung. Um ein Vertrauenspaket zu konfigurieren, geben Sie seinen Dateipfad in der IoT Edge-Konfigurationsdatei an.
Rufen Sie das Zertifikat der Stammzertifizierungsstelle von einem PKI-Anbieter ab.
Vergewissern Sie sich, dass das Zertifikat die Formatanforderungen erfüllt.
Kopieren Sie die PEM-Datei, und gewähren Sie dem IoT Edge-Zertifikat den Dienstzugriff. Ein Beispiel für das Verzeichnis
/var/aziot/certs
:# Make the directory if doesn't exist sudo mkdir /var/aziot/certs -p # Change cert directory user and group ownership to aziotcs and set permissions sudo chown aziotcs:aziotcs /var/aziot/certs sudo chmod 755 /var/aziot/certs # Copy certificate into certs directory sudo cp root-ca.pem /var/aziot/certs # Give aziotcs ownership to certificate and set read and write permission for aziotcs, read-only for others sudo chown aziotcs:aziotcs /var/aziot/certs/root-ca.pem sudo chmod 644 /var/aziot/certs/root-ca.pem
Suchen Sie in der IoT Edge-Konfigurationsdatei
config.toml
nach dem Abschnitt Trust bundle cert. Wenn der Abschnitt fehlt, können Sie ihn aus der Konfigurationsvorlagendatei kopieren.Tipp
Wenn die Konfigurationsdatei auf dem Gerät noch nicht vorhanden ist, verwenden Sie
/etc/aziot/config.toml.edge.template
als Vorlage zum Erstellen einer Datei.Legen Sie den Schlüssel
trust_bundle_cert
auf den Speicherort der Zertifikatsdatei fest.trust_bundle_cert = "file:///var/aziot/certs/root-ca.pem"
Wende die Konfiguration an.
sudo iotedge config apply
Installieren der Stammzertifizierungsstelle im Zertifikatspeicher des Betriebssystems
Durch die Installation des Zertifikats in der Vertrauenspaketdatei wird es für Containermodule, aber nicht für Hostmodule wie Azure Device Update oder Defender verfügbar gemacht. Wenn Sie Komponenten auf Hostebene verwenden oder andere TLS-Probleme auftreten, installieren Sie auch das Zertifikat der Stammzertifizierungsstelle im Zertifikatspeicher des Betriebssystems:
sudo cp /var/aziot/certs/my-root-ca.pem /usr/local/share/ca-certificates/my-root-ca.pem.crt
sudo update-ca-certificates
Importieren von Zertifikat und privaten Schlüsseldateien
IoT Edge kann vorhandene Zertifikate und Dateien für private Schlüssel für die Authentifizierung oder den Nachweis bei Azure verwenden, oder um neue Modulserverzertifikate auszustellen und die Authentifizierung bei EST-Servern vorzunehmen. Gehen Sie bei der Installation wie folgt vor:
Vergewissern Sie sich, dass die Dateien mit den Zertifikaten und privaten Schlüsseln die Formatanforderungen erfüllen.
Kopieren Sie die PEM-Datei auf das IoT Edge-Gerät an einen Speicherort, auf den IoT Edge-Module Zugriff haben, Beispiel: das
/var/aziot/
-Verzeichnis.# If the certificate and keys directories don'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 sudo mkdir -p /var/aziot/secrets sudo chown aziotks:aziotks /var/aziot/secrets sudo chmod 700 /var/aziot/secrets # Copy certificate and private key into the correct directory sudo cp my-cert.pem /var/aziot/certs sudo cp my-private-key.pem /var/aziot/secrets
Weisen Sie dem Zertifikatdienst
aziotcs
und dem Schlüsseldienstaziotks
von IoT Edge den Besitz für das Zertifikat bzw. den privaten Schlüssel zu.# Give aziotcs ownership to certificate # Read and write for aziotcs, read-only for others sudo chown aziotcs:aziotcs /var/aziot/certs/my-cert.pem sudo chmod 644 /var/aziot/certs/my-cert.pem # Give aziotks ownership to private key # Read and write for aziotks, no permission for others sudo chown aziotks:aziotks /var/aziot/secrets/my-private-key.pem sudo chmod 600 /var/aziot/secrets/my-private-key.pem
Suchen Sie in
config.toml
den relevanten Abschnitt für den Typ des zu konfigurierenden Zertifikats. Sie können beispielsweise nach dem Schlüsselwortcert
suchen.Konfigurieren Sie anhand des Beispiels aus der Konfigurationsvorlage das Geräteidentitätszertifikat oder die Dateien der Edge-Zertifizierungsstelle. Das Beispielmuster lautet:
cert = "file:///var/aziot/certs/my-cert.pem" pk = "file:///var/aziot/secrets/my-private-key.pem"
Anwenden der Konfiguration
sudo iotedge config apply
Um Fehler beim Ablauf von Zertifikaten zu vermeiden, müssen Sie daran denken, die Dateien und die Konfiguration vor dem Ablauf des Zertifikats manuell zu aktualisieren.
Beispiel: Verwenden von Zertifikatsdateien für Geräteidentitäten vom PKI-Anbieter
Fordern Sie von Ihrem PKI-Anbieter ein TLS-Clientzertifikat und einen privaten Schlüssel an.
Anforderungen an das Geräteidentitätszertifikat:
- Standardmäßige Clientzertifikaterweiterungen: extendedKeyUsage = clientAuth keyUsage = critical, digitalSignature
- Schlüsselbezeichner zur Unterscheidung zwischen ausstellenden Zertifizierungsstellen mit demselben allgemeinen Namen (Common Name, CN) für die Rotation des Zertifizierungsstellenzertifikats.
- subjectKeyIdentifier = hash
- authorityKeyIdentifier = keyid:always,issuer:always
Stellen Sie sicher, dass der allgemeine Name (Common Name, CN) mit der IoT Edge-Geräte-ID, die in IoT Hub registriert wurde, oder mit der Registrierungs-ID bei DPS übereinstimmt. Im folgenden Geräteidentitätszertifikat ist z. B. Subject: CN = my-device
das wichtige Feld, das übereinstimmen muss.
Beispiel für ein Geräteidentitätszertifikat:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 48 (0x30)
Signature Algorithm: ecdsa-with-SHA256
Issuer: CN = myPkiCA
Validity
Not Before: Jun 28 21:27:30 2022 GMT
Not After : Jul 28 21:27:30 2022 GMT
Subject: CN = my-device
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (2048 bit)
Modulus:
00:ad:b0:63:1f:48:19:9e:c4:9d:91:d1:b0:b0:e5:
...
80:58:63:6d:ab:56:9f:90:4e:3f:dd:df:74:cf:86:
04:af
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Key Usage:
Digital Signature
X509v3 Extended Key Usage:
TLS Web Client Authentication
X509v3 Subject Key Identifier:
C7:C2:DC:3C:53:71:B8:42:15:D5:6C:4B:5C:03:C2:2A:C5:98:82:7E
X509v3 Authority Key Identifier:
keyid:6E:57:C7:FC:FE:50:09:75:FA:D9:89:13:CB:D2:CA:F2:28:EF:9B:F6
Signature Algorithm: ecdsa-with-SHA256
30:45:02:20:3c:d2:db:06:3c:d7:65:b7:22:fe:df:9e:11:5b:
...
eb:da:fc:f1:6a:bf:31:63:db:5a:16:02:70:0f:cf:c8:e2
-----BEGIN CERTIFICATE-----
MIICdTCCAhugAwIBAgIBMDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxlc3RFeGFt
...
354RWw+eLOpQSkTqXxzjmfw/kVOOAQIhANvRmyCQVb8zLPtqdOVRkuva/PFqvzFj
21oWAnAPz8ji
-----END CERTIFICATE-----
Tipp
Informationen zum Testen ohne Zugriff auf Zertifikatsdateien von einer PKI finden Sie unter Erstellen von Demozertifikaten zum Testen der Features von IoT Edge-Geräten. Dort werden ein kurzlebiges Geräteidentitätszertifikat und ein privater Schlüssel generiert, die nicht für die Produktion vorgesehen sind.
Konfigurationsbeispiel für eine Bereitstellung mit IoT Hub:
[provisioning]
source = "manual"
# ...
[provisioning.authentication]
method = "x509"
identity_cert = "file:///var/aziot/device-id.pem"
identity_pk = "file:///var/aziot/device-id.key.pem"
Konfigurationsbeispiel für eine Bereitstellung mit DPS:
[provisioning]
source = "dps"
# ...
[provisioning.attestation]
method = "x509"
registration_id = "my-device"
identity_cert = "file:///var/aziot/device-id.pem"
identity_pk = "file:///var/aziot/device-id.key.pem"
Der Mehraufwand bei der manuellen Zertifikatverwaltung kann erheblich sein, außerdem ist das Verfahren fehleranfällig. Für die Produktion wird die Verwendung von IoT Edge mit automatischer Zertifikatverwaltung empfohlen.
Verwalten der Edge-Zertifizierungsstelle
Die Edge-Zertifizierungsstelle verfügt über zwei verschiedene Modi:
- Schnellstart ist das Standardverhalten. Ein Schnellstart dient zum Testen und eignet sich nicht für die Produktion.
- Im Produktionsmodus müssen Sie eine eigene Quelle für das Zertifikat der Edge-Zertifizierungsstelle und einen privaten Schlüssel bereitstellen.
Edge-Schnellstart-Zertifizierungsstelle
Um den Einstieg zu vereinfachen, generiert IoT Edge beim ersten Start standardmäßig automatisch ein Edge-Zertifizierungsstellenzertifikat. Dieses selbstsignierte Zertifikat ist nur für Entwicklungs- und Testszenarien und nicht für die Produktion gedacht. Dieses Zertifikat läuft standardmäßig nach 90 Tagen ab. Der Ablauf kann jedoch konfiguriert werden. Dieses Verhalten wird als Edge-Schnellstart-Zertifizierungsstelle bezeichnet.
Die Edge-Schnellstart-Zertifizierungsstelle stellt für edgeHub
und andere IoT Edge-Module ein gültiges Serverzertifikat bereit, wenn IoT Edge zum ersten Mal und ohne Konfiguration installiert wird. Das Zertifikat wird von edgeHub
benötigt, da Module oder nachgelagerte Geräte sichere Kommunikationskanäle einrichten müssen. Ohne die Edge-Schnellstart-Zertifizierungsstelle wären die ersten Schritte erheblich schwieriger, da Sie ein gültiges Serverzertifikat von einem PKI-Anbieter oder mit Tools wie openssl
bereitstellen müssten.
Wichtig
Verwenden Sie die Edge-Schnellstart-Zertifizierungsstelle niemals in der Produktion, da das lokal generierte Zertifikat darin nicht mit einer PKI verbunden ist.
Die Sicherheit einer zertifikatbasierten Identität ergibt sich aus einer gut verwalteten PKI (der Infrastruktur), in der das Zertifikat (ein Dokument) nur eine Komponente ist. Eine gut verwaltete PKI ermöglicht die Definition, Anwendung, Verwaltung und Erzwingung von Sicherheitsrichtlinien, einschließlich (aber nicht beschränkt auf) Ausstellung, Sperrung und Lebenszyklusverwaltung von Zertifikaten.
Anpassen der Lebensdauer für die Edge-Schnellstart-Zertifizierungsstelle
Wenn Sie für das Ablaufdatum des Zertifikats einen anderen Wert als den Standardwert „90 Tage“ konfigurieren möchten, fügen Sie diesen Wert im Abschnitt Edge CA certificate (Quickstart) (Edge-Zertifizierungsstellenzertifikat (Schnellstart)) der Konfigurationsdatei in Tagen hinzu.
[edge_ca]
auto_generated_edge_ca_expiry_days = 180
Löschen Sie den Inhalt der Ordner /var/lib/aziot/certd/certs
und /var/lib/aziot/keyd/keys
, um alle zuvor generierten Zertifikate zu entfernen, und wenden Sie dann die Konfiguration an.
Verlängern der Edge-Schnellstart-Zertifizierungsstelle
Standardmäßig verlängert IoT Edge das Edge-Schnellstart-Zertifikat, wenn 80 % der Zertifikatgültigkeitsdauer abgelaufen sind. Folglich generiert IoT Edge bei einem Zertifikat mit einer Gültigkeitsdauer von z. B. 90 Tagen das Edge-Zertifizierungsstellenzertifikat 72 Tage nach seiner Ausstellung automatisch neu.
Um die Logik für die automatische Verlängerung zu ändern, fügen Sie in config.toml
die folgenden Einstellungen im Abschnitt mit dem Edge-Zertifizierungsstellenzertifikat hinzu. Beispiel:
[edge_ca.auto_renew]
rotate_key = true
threshold = "70%"
retry = "2%"
Edge-Zertifizierungsstelle in der Produktion
Wenn Sie in ein Produktionsszenario wechseln oder ein Gatewaygerät erstellen möchten, können Sie die Edge-Schnellstart-Zertifizierungsstelle nicht mehr verwenden.
Eine Möglichkeit besteht darin, eigene Zertifikate bereitzustellen und manuell zu verwalten. Um jedoch den riskanten und fehleranfälligen manuellen Zertifikatverwaltungsprozess zu vermeiden, sollten Sie nach Möglichkeit einen EST-Server verwenden.
Achtung
Der allgemeine Name (CN) des Edge-Zertifizierungsstellenzertifikats kann nicht mit dem in der Konfigurationsdatei config.toml des Geräts definierten Parameter für den Gerätehostnamen (device hostname) oder der in IoT Hub registrierten Geräte-ID übereinstimmen.
Planen der Verlängerung der Edge-Zertifizierungsstelle
Wenn das Zertifikat der Edge-Zertifizierungsstelle verlängert wird, werden alle ausgestellten Zertifikate wie Modulserverzertifikate neu generiert. Um den Modulen neue Serverzertifikate bereitzustellen, startet IoT Edge alle Module neu, wenn das Zertifikat der Edge-Zertifizierungsstelle erneuert wird.
Um potenziell negative Auswirkungen von Modulneustarts zu minimieren, planen Sie die Verlängerung des Edge-Zertifizierungsstellenzertifikats zu einem bestimmten Zeitpunkt (z. B. threshold = "10d"
), und benachrichtigen Sie alle Personen, die die Lösung nutzen, über die Ausfallzeit.
Beispiel: Verwenden von Zertifikatsdateien für die Edge-Zertifizierungsstelle von einem PKI-Anbieter
Fordern Sie die folgenden Dateien von Ihrem PKI-Anbieter an:
- Das Zertifikat der PKI-Stammzertifizierungsstelle
- Ein ausstellende/Zertifizierungsstellenzertifikat mit dem zugehörigen privaten Schlüssel
Damit das Zertifikat der ausstellenden Zertifizierungsstelle für die Edge-Zertifizierungsstelle verwendet werden kann, muss es über die folgenden Erweiterungen verfügen:
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always
basicConstraints = critical, CA:TRUE, pathlen:0
keyUsage = critical, digitalSignature, keyCertSign
Beispiel für das resultierende Edge-Zertifizierungsstellenzertifikat:
openssl x509 -in my-edge-ca-cert.pem -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4098 (0x1002)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN = myPkiCA
Validity
Not Before: Aug 27 00:00:50 2022 GMT
Not After : Sep 26 00:00:50 2022 GMT
Subject: CN = my-edge-ca.ca
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
Modulus:
00:e1:cb:9c:c0:41:d2:ee:5d:8b:92:f9:4e:0d:3e:
...
25:f5:58:1e:8c:66:ab:d1:56:78:a5:9c:96:eb:01:
e4:e3:49
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
FD:64:48:BB:41:CE:C1:8A:8A:50:9B:2B:2D:6E:1D:E5:3F:86:7D:3E
X509v3 Authority Key Identifier:
keyid:9F:E6:D3:26:EE:2F:D7:84:09:63:84:C8:93:72:D5:13:06:8E:7F:D1
X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 Key Usage: critical
Digital Signature, Certificate Sign
Signature Algorithm: sha256WithRSAEncryption
20:c9:34:41:a3:a4:8e:7c:9c:6e:17:f5:a6:6f:e5:fc:6e:59:
...
7c:20:5d:e5:51:85:4c:4d:f7:f8:01:84:87:27:e3:76:65:47:
9e:6a:c3:2e:1a:f0:dc:9d
-----BEGIN CERTIFICATE-----
MIICdTCCAhugAwIBAgIBMDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDDAxlc3RFeGFt
...
354RWw+eLOpQSkTqXxzjmfw/kVOOAQIhANvRmyCQVb8zLPtqdOVRkuva/PFqvzFj
21oWAnAPz8ji
-----END CERTIFICATE-----
Wenn Sie die neuesten Dateien erhalten haben, aktualisieren Sie das Vertrauenspaket:
trust_bundle_cert = "file:///var/aziot/root-ca.pem"
Konfigurieren Sie dann IoT Edge so, dass diese Dateien mit Zertifikat und privaten Schlüsseln verwendet wird:
[edge_ca]
cert = "file:///var/aziot/my-edge-ca-cert.pem"
pk = "file:///var/aziot/my-edge-ca-private-key.key.pem"
Wenn Sie zuvor andere Zertifikate für IoT Edge auf dem Gerät verwendet haben, löschen Sie die Dateien in /var/lib/aziot/certd/certs
und die privaten Schlüssel, die den Zertifikaten zugeordnet sind (nicht alle Schlüssel), in /var/lib/aziot/keyd/keys
. IoT Edge erstellt sie dann mit dem von Ihnen bereitgestellten neuen Zertifizierungsstellenzertifikat neu.
Bei diesem Ansatz müssen Sie die Dateien manuell aktualisieren, wenn das Zertifikat abläuft. Um dieses Problem zu vermeiden, sollten Sie für die automatische Verwaltung EST verwenden.
Automatische Zertifikatverwaltung mit einem EST-Server
IoT Edge kann bei der automatischen Ausstellung und Verlängerung von Zertifikaten mit einem EST-Server (Enrollment over Secure Transport) zusammenarbeiten. Die Verwendung von EST wird für die Produktion empfohlen, da es die manuelle Zertifikatverwaltung ersetzt, die riskant und fehleranfällig sein kann. Die Konfiguration kann global erfolgen und für jeden Zertifikattyp überschrieben werden.
In diesem Szenario wird erwartet, dass das Bootstrapzertifikat und der private Schlüssel langlebig sind und möglicherweise schon bei der Herstellung auf dem Gerät installiert wurden. IoT Edge verwendet bei der ersten Anforderung die Bootstrap-Anmeldeinformationen für die Authentifizierung beim EST-Server, um ein Identitätszertifikat für nachfolgende Anforderungen und die Authentifizierung bei DPS oder IoT Hub auszustellen.
Greifen Sie auf einen EST-Server zu. Wenn Sie keinen EST-Server haben, nutzen Sie eine der folgenden Optionen für die Tests:
Erstellen Sie einen EST-Testserver mithilfe der Schritte unter Tutorial: Konfigurieren eines Enrollment over Secure Transport-Servers für Azure IoT Edge.
Microsoft arbeitet mit GlobalSign zusammen, um ein Demokonto bereitzustellen.
Konfigurieren Sie in der Konfigurationsdatei
config.toml
des IoT Edge-Geräts den Pfad zu einem vertrauenswürdigen Stammzertifikat, das IoT Edge zum Überprüfen des TLS-Zertifikats des EST-Servers verwendet. Dieser Schritt ist optional, wenn der EST-Server über ein öffentlich vertrauenswürdiges TLS-Stammzertifikat verfügt.[cert_issuance.est] trusted_certs = [ "file:///var/aziot/root-ca.pem", ]
Geben Sie eine Standard-URL für den EST-Server an. Fügen Sie in
config.toml
den folgenden Abschnitt mit der URL des EST-Servers hinzu:[cert_issuance.est.urls] default = "https://example.org/.well-known/est"
Fügen Sie zum Konfigurieren des EST-Zertifikats für die Authentifizierung den folgenden Abschnitt mit dem Pfad zum Zertifikat und zum privaten Schlüssel hinzu:
[cert_issuance.est.auth] bootstrap_identity_cert = "file:///var/aziot/my-est-id-bootstrap-cert.pem" bootstrap_identity_pk = "file:///var/aziot/my-est-id-bootstrap-pk.key.pem" [cert_issuance.est.identity_auto_renew] rotate_key = true threshold = "80%" retry = "4%"
Übernehmen Sie die Konfigurationsänderungen.
sudo iotedge config apply
Die Einstellungen in [cert_issuance.est.identity_auto_renew]
werden im nächsten Abschnitt behandelt.
Authentifizierung per Benutzername und Kennwort
Wenn die Authentifizierung beim EST-Server mithilfe eines Zertifikats nicht möglich ist, können Sie stattdessen ein gemeinsam genutztes Geheimnis oder einen Benutzernamen und ein Kennwort verwenden.
[cert_issuance.est.auth]
username = "username"
password = "password"
Konfigurieren von Parametern für die automatische Verlängerung
Anstatt die Zertifikatsdateien manuell zu verwalten, bietet IoT Edge interne Möglichkeiten zum Abrufen und Verlängern von Zertifikaten vor deren Ablauf. Die Verlängerung von Zertifikaten erfordert eine Ausstellungsmethode, die IoT Edge verwalten kann. Ein EST-Server (Enrollment over Secure Transport) ist eine Ausstellungsmethode, aber IoT Edge kann die Schnellstart-Zertifizierungsstelle standardmäßig automatisch verlängern. Die Zertifikatverlängerung wird pro Zertifikattyp konfiguriert.
Suchen Sie in
config.toml
den relevanten Abschnitt für den Typ des zu konfigurierenden Zertifikats. Sie können beispielsweise nach dem Schlüsselwortauto_renew
suchen.Konfigurieren Sie anhand des Beispiels aus der Konfigurationsvorlage das Geräteidentitätszertifikat, die Edge-Zertifizierungsstelle oder die EST-Identitätszertifikate. Das Beispielmuster lautet:
[REPLACE_WITH_CERT_TYPE] # ... method = "est" # ... [REPLACE_WITH_CERT_TYPE.auto_renew] rotate_key = true threshold = "80%" retry = "4%"
Anwenden der Konfiguration
sudo iotege config apply
In der folgenden Tabelle sind die Auswirkungen der einzelnen Option in auto_renew
aufgeführt:
Parameter | Beschreibung |
---|---|
rotate_key |
Steuert, ob der private Schlüssel rotiert werden soll, wenn IoT Edge das Zertifikat verlängert |
threshold |
Legt fest, wann IoT Edge mit der Verlängerung des Zertifikats beginnen soll. Dies kann angegeben werden als: - Prozentsatz: ganze Zahl zwischen 0 und 100 , gefolgt von % . Die Verlängerung beginnt relativ zur Zertifikatgültigkeitsdauer. Wenn diese beispielsweise auf 80% festgelegt wird, beginnt die Verlängerung eines Zertifikats, das 100 Tage lang gültig ist, 20 Tage vor seinem Ablauf. - Absolute Zeit: ganze Zahl, gefolgt von min (Minuten) oder day (Tagen). Die Verlängerung beginnt relativ zur Ablaufzeit des Zertifikats. Wenn diese beispielsweise auf 4day für vier Tage oder 10min für zehn Minuten festgelegt wird, beginnt die Verlängerung des Zertifikats zu diesem Zeitpunkt noch vor dem Ablauf. Um eine unbeabsichtigte Fehlkonfiguration zu vermeiden, bei der threshold größer als die Zertifikatgültigkeitsdauer ist, wird empfohlen, stattdessen nach Möglichkeit einen Prozentsatz zu verwenden. |
retry |
Steuert, wie oft die Verlängerung bei einem Fehler wiederholt werden soll. Wie threshold kann dieser Wert in ähnlicher Weise als Prozentsatz oder absolute Zeit mit demselben Format angegeben werden. |
Beispiel: Automatisches Verlängern des Geräteidentitätszertifikats mit EST
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. Zum Beispiel:
## DPS provisioning with X.509 certificate
[provisioning]
source = "dps"
# ...
[provisioning.attestation]
method = "x509"
registration_id = "my-device"
[provisioning.attestation.identity_cert]
method = "est"
common_name = "my-device"
[provisioning.attestation.identity_cert.auto_renew]
rotate_key = true
threshold = "80%"
retry = "4%"
Die automatische Verlängerung der Edge-Zertifizierungsstelle muss aktiviert sein, wenn die EST-Veröffentlichungsmethode festgelegt ist. Der Ablauf der Edge-Zertifizierungsstelle muss vermieden werden, da es viele IoT Edge-Funktionen unterbricht. Wenn eine Situation eine vollständige Kontrolle über den Lebenszyklus des Edge-Zertifizierungsstellenzertifikats erfordert, verwenden Sie stattdessen die manuelle Verwaltungsmethode für die Edge-Zertifizierungsstelle.
Verwenden Sie EST oder auto_renew
nicht mit anderen Bereitstellungsmethoden, einschließlich der manuellen X.509-Bereitstellung mit IoT Hub und DPS und individueller Registrierung. IoT Edge kann Zertifikatfingerabdrücke in Azure nicht aktualisieren, wenn ein Zertifikat verlängert wird, da dies verhindert, dass IoT Edge erneut eine Verbindung herstellen kann.
Beispiel: automatische Edge-Zertifizierungsstellenverwaltung mit EST
Verwenden Sie die automatische Edge-Zertifizierungsstellenausstellung und -verlängerung von EST für die Produktion. Nachdem der EST-Server konfiguriert wurde, können Sie die globale Einstellung verwenden oder sie wie in diesem Beispiel überschreiben:
[edge_ca]
method = "est"
common_name = "my-edge-CA"
url = "https://ca.example.org/.well-known/est"
bootstrap_identity_cert = "file:///var/aziot/my-est-id-bootstrap-cert.pem"
bootstrap_identity_pk = "file:///var/aziot/my-est-id-bootstrap-pk.key.pem"
[edge_ca.auto_renew]
rotate_key = true
threshold = "90%"
retry = "2%"
Modulserverzertifikate
Edge Daemon stellt Modulserver- und Identitätszertifikate zur Verwendung durch Edge-Module aus. Edgemodule müssen ihre Identitäts- und Serverzertifikate bei Bedarf selbst erneuern.
Verlängerung
Serverzertifikate können über das Edge-Zertifizierungsstellenzertifikat ausgestellt werden. Unabhängig von der Ausstellungsmethode müssen diese Zertifikate vom Modul verlängert werden. Wenn Sie ein benutzerdefiniertes Modul entwickeln, müssen Sie die Verlängerungslogik in Ihrem Modul implementieren.
Das edgeHub-Modul unterstützt ein Feature für die Zertifikatverlängerung. Sie können die Verlängerung des edgeHub-Modulserverzertifikats mithilfe der folgenden Umgebungsvariablen konfigurieren:
- ServerCertificateRenewAfterInMs: Legt die Dauer in Millisekunden fest, wenn das edgeHub-Serverzertifikat unabhängig von der Ablaufzeit des Zertifikats erneuert wird.
- MaxCheckCertExpiryInMs: Legt die Dauer in Millisekunden fest, wenn der edgeHub-Dienst den Ablauf des edgeHub-Serverzertifikats überprüft. Wenn die Variable festgelegt ist, erfolgt die Überprüfung unabhängig von der Ablaufzeit des Zertifikats.
Weitere Informationen zu den Umgebungsvariablen finden Sie im Artikel zu EdgeHub- und EdgeAgent-Umgebungsvariablen.
Änderungen in Version 1.2 und höher
- Das Zertifikat der Gerätezertifizierungsstelle wurde in Zertifikat der Edgezertifizierungsstelle umbenannt.
- Das Zertifikat der Workloadzertifizierungsstelle wurde als veraltet markiert. Der IoT Edge Security Manager generiert das IoT Edge-Hubserverzertifikat
edgeHub
nun direkt aus dem Zertifikat der Edgezertifizierungsstelle, ohne dass das Zwischenzertifikat der Workloadzertifizierungsstelle zwischen diesen vorhanden sein muss. - Der Standardname und -speicherort der Standardkonfigurationsdatei wurde von
/etc/iotedge/config.yaml
in/etc/aziot/config.toml
geändert. Mithilfe des Befehlsiotedge config import
können Konfigurationsinformationen aus dem alten Speicherort und die Syntax in den neuen Speicherort migriert werden.
Nächste Schritte
Das Installieren von Zertifikaten auf einem IoT Edge-Gerät ist erforderlich, bevor Sie die Lösung in der Produktionsumgebung bereitstellen. Unter Vorbereiten der Bereitstellung einer IoT Edge-Lösung für die Produktion finden Sie weitere Informationen.