Verwalten von IoT Edge-Zertifikaten

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

Wichtig

IoT Edge Version 1.4 wird unterstützt. 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 bearbeiten

  • Wenn 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 auch PRIVATE 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.

  1. Rufen Sie das Zertifikat der Stammzertifizierungsstelle von einem PKI-Anbieter ab.

  2. Vergewissern Sie sich, dass das Zertifikat die Formatanforderungen erfüllt.

  3. 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
    
  4. 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.

  5. Legen Sie den Schlüssel trust_bundle_cert auf den Speicherort der Zertifikatsdatei fest.

    trust_bundle_cert = "file:///var/aziot/certs/root-ca.pem"
    
  6. 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:

  1. Vergewissern Sie sich, dass die Dateien mit den Zertifikaten und privaten Schlüsseln die Formatanforderungen erfüllen.

  2. 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
    
  3. Weisen Sie dem Zertifikatdienst aziotcs und dem Schlüsseldienst aziotks 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
    
  4. Suchen Sie in config.toml den relevanten Abschnitt für den Typ des zu konfigurierenden Zertifikats. Sie können beispielsweise nach dem Schlüsselwort cert suchen.

  5. 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"
    
  6. 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.

  1. Greifen Sie auf einen EST-Server zu. Wenn Sie keinen EST-Server haben, nutzen Sie eine der folgenden Optionen für die Tests:

  2. 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",
    ]
    
  3. 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"
    
  4. 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%"
    
  5. Ü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.

  1. Suchen Sie in config.toml den relevanten Abschnitt für den Typ des zu konfigurierenden Zertifikats. Sie können beispielsweise nach dem Schlüsselwort auto_renew suchen.

  2. 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%"
    
  3. 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 Befehls iotedge 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.