Schlüsselbereitstellung im Entwicklermodus - FreeRTOS

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Schlüsselbereitstellung im Entwicklermodus

Wichtig

Diese Seite bezieht sich auf das Amazon-FreeRTOS-Repository, das veraltet ist. z. B. sollten Sie hier beginnen, wenn Sie ein neues Projekt erstellen. Wenn Sie bereits über ein bestehendes FreeRTOS-Projekt verfügen, das auf dem inzwischen veralteten Amazon-FreeRTOS-Repository basiert, lesen Sie dieLeitfaden zur Migration des Amazon-FreerTOS Github-Repositorys.

Einführung

In diesem Abschnitt werden zwei Optionen beschrieben, um ein vertrauenswürdiges X.509-Clientzertifikat auf ein IoT-Gerät für Labortests zu erhalten. Abhängig von den Funktionen des Geräts können verschiedene bereitstellungsbezogene Vorgänge unterstützt werden, einschließlich der integrierten ECDSA-Schlüsselgenerierung, Import privater Schlüssel und X.509-Zertifikatregistrierung. Darüber hinaus erfordern verschiedene Anwendungsfälle unterschiedliche Schutzstufen, angefangen von Onboard-Flash-Speicher bis hin zur Verwendung dedizierter Kryptohardware. Dieser Abschnitt enthält Logik für die Arbeit in den kryptografischen Funktionen Ihres Geräts.

Option 1: Importieren eines privaten Schlüssels aus AWS IoT

Wenn Ihr Gerät den Import von privaten Schlüsseln zulässt, befolgen Sie die Anweisungen unter Konfigurieren der FreeRTOS-Demos.

Option 2: Integrierte Generierung eines privaten Schlüssels

Wenn Ihr Gerät über ein sicheres Element verfügt oder Sie Ihr eigenes Geräte-Schlüsselpaar und Zertifikat erstellen möchten, folgen Sie den Anweisungen hier.

Erstkonfiguration

Führen Sie zunächst die Schritte in Konfigurieren der FreeRTOS-Demos aus, überspringen Sie aber den letzten Schritt (d. h. So formatieren Sie Ihre AWS IoT-Anmeldeinformationen). Das Nettoergebnis sollte sein, dass die Datei demos/include/aws_clientcredential.h mit Ihren Einstellungen aktualisiert wurde, jedoch nicht die Datei demos/include/aws_clientcredential_keys.h.

Demo-Projekt-Konfiguration

Öffnen Sie die Demo zur gegenseitigen Authentifizierung von CoreMQTT, wie in der Anleitung für Ihr Board unter beschriebenBoard-spezifische Handbücher "Erste Schritte". Öffnen Sie im Projekt die Datei aws_dev_mode_key_provisioning.c und ändern Sie die Definition von keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR, die standardmäßig auf Null gesetzt ist, in eins:

#define keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR 1

Erstellen Sie dann das Demo-Projekt und führen Sie es aus und fahren Sie mit dem nächsten Schritt fort.

Extraktion öffentlicher Schlüssel

Da das Gerät nicht mit einem privaten Schlüssel und einem Client-Zertifikat ausgestattet wurde, kann sich die Demo nicht authentifizierenAWS IoT. Die CoreMQTT-Demo Mutual Authentication beginnt jedoch mit der Ausführung der Schlüsselbereitstellung im Entwicklermodus, was zur Erstellung eines privaten Schlüssels führt, falls noch keiner vorhanden war. z. B. sollten Sie etwas wie das Folgende am Anfang der seriellen Konsolenausgabe sehen.

7 910 [IP-task] Device public key, 91 bytes: 3059 3013 0607 2a86 48ce 3d02 0106 082a 8648 ce3d 0301 0703 4200 04cd 6569 ceb8 1bb9 1e72 339f e8cf 60ef 0f9f b473 33ac 6f19 1813 6999 3fa0 c293 5fae 08f1 1ad0 41b7 345c e746 1046 228e 5a5f d787 d571 dcb2 4e8d 75b3 2586 e2cc 0c

Kopieren Sie die sechs Zeilen von Schlüsselbytes in eine Datei namens DevicePublicKeyAsciiHex.txt. Verwenden Sie dann das Befehlszeilentool „xxd“, um die Hex-Bytes binär zu analysieren:

xxd -r -ps DevicePublicKeyAsciiHex.txt DevicePublicKeyDer.bin

Verwenden Sie „openssl“, um den öffentlichen Schlüssel des binär codierten (DER) Gerätes als PEM zu formatieren:

openssl ec -inform der -in DevicePublicKeyDer.bin -pubin -pubout -outform pem -out DevicePublicKey.pem

Vergessen Sie nicht, die oben aktivierte temporäre Schlüsselgenerierungseinstellung zu deaktivieren. Andernfalls erstellt das Gerät ein weiteres Schlüsselpaar, und Sie müssen die vorherigen Schritte wiederholen:

#define keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR 0
Einrichtung der öffentlichen Schlüsselinfrastruktur

Folgen Sie den Anweisungen unter Registrieren des Zertifizierungsstellenzertifikats, um eine Zertifikathierarchie für das Gerätelaborzertifikat zu erstellen. Stoppen Sie, bevor Sie die im Abschnitt Erstellen eines Gerätezertifikats mit Ihrem Zertifizierungsstellenzertifikat beschriebene Sequenz ausführen.

In diesem Fall signiert das Gerät die Zertifikatsanforderung (also die Certificate Service Request oder CSR) nicht, da die X.509-Kodierungslogik, die zum Erstellen und Signieren eines CSR erforderlich ist, aus den FreeRTOS-Demo-Projekten ausgeschlossen wurde, um die ROM-Größe zu reduzieren. Erstellen Sie stattdessen für Testzwecke einen privaten Schlüssel auf Ihrer Workstation, und verwenden Sie ihn, um die CSR zu signieren.

openssl genrsa -out tempCsrSigner.key 2048 openssl req -new -key tempCsrSigner.key -out deviceCert.csr

Nachdem Ihre Zertifizierungsstelle erstellt und bei AWS IoT registriert wurde, verwenden Sie den folgenden Befehl, um ein Clientzertifikat auszustellen, das auf der Geräte-CSR basiert, die im vorherigen Schritt signiert wurde:

openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.pem -days 500 -sha256 -force_pubkey DevicePublicKey.pem

Obwohl die CSR mit einem temporären privaten Schlüssel signiert wurde, kann das ausgestellte Zertifikat nur mit dem eigentlichen privaten Schlüssel des Geräts verwendet werden. Derselbe Mechanismus kann in der Produktion verwendet werden, wenn Sie den CSR-Signierschlüssel in separater Hardware speichern und Ihre Zertifizierungsstelle so konfigurieren, dass sie nur Zertifikate für Anforderungen ausstellt, die von diesem bestimmten Schlüssel signiert wurden. Dieser Schlüssel sollte auch unter der Kontrolle eines bestimmten Administrators bleiben.

Zertifikatsimport

Wenn das Zertifikat ausgestellt wurde, besteht der nächste Schritt darin, es in Ihr Gerät zu importieren. Außerdem müssen Sie das Zertifikat der Zertifizierungsstelle (Certificate Authority, CA) importieren, da es für die erstmalige Authentifizierung bei AWS IoT zur Verwendung von JITP erforderlich ist. Legen Sie in der Datei aws_clientcredential_keys.h in Ihrem Projekt das Makro keyCLIENT_CERTIFICATE_PEM auf den Inhalt von deviceCert.pem fest, und legen Sie das Makro keyJITR_DEVICE_CERTIFICATE_AUTHORITY_PEM auf den Inhalt von rootCA.pem fest.

Geräteautorisierung

Importieren Sie deviceCert.pem in die AWS IoT-Registrierung, wie unter Verwenden eines eigenen Zertifikats beschrieben. Sie müssen ein neues AWS IoT-Objekt erstellen, das PENDING-Zertifikat und eine Richtlinie an Ihr Objekt anhängen und dann das Zertifikat als ACTIVE markieren. Alle diese Schritte können manuell in der AWS IoT-Konsole ausgeführt werden.

Sobald das neue Client-Zertifikat AKTIV und mit einer Sache und einer Richtlinie verknüpft ist, führen Sie die CoreMQTT-Demo Mutual Authentication erneut aus. Dieses Mal wird die Verbindung zum AWS IoT MQTT Broker erfolgreich sein.