Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial Internet of Things >> Internet der Dinge-Technologie

X.509-basierte Geräteauthentifizierung in Eclipse Hono

In den letzten Monaten waren die Medien voller Berichte über unsicher IoT-Geräte, die nicht einmal die grundlegendsten Sicherheitsanforderungen erfüllen. Eine der Bedenken war die Vertraulichkeit der Daten, die von Geräten zu Cloud-Diensten der Hersteller übertragen werden. In vielen Fällen werden Daten vollständig unverschlüsselt über öffentliche Netzwerke gesendet, was ziemlich überraschend ist, da alle gängigen TCP/IP-basierten Transportprotokolle, die in heutigen IoT-Geräten verwendet werden (z. B. HTTP und MQTT), die Aushandlung und Verwendung von a sicherer (verschlüsselter) Transportkanal mittels Transport Layer Security (TLS).

Eclipse Hono hat die Verwendung von TLS in seinen HTTP- und MQTT-Protokolladaptern von Anfang an unterstützt. Der kürzlich veröffentlichte Meilenstein 0.9-M2 bietet Unterstützung für die Authentifizierung von Geräten mit einem X.509-Clientzertifikat als Teil des TLS-Handshakes sowohl für den HTTP- als auch für den MQTT-Adapter. Dadurch können Geräte ein privates/öffentliches Schlüsselpaar anstelle eines Benutzernamens und eines Passworts verwenden, um sich bei den Protokolladaptern zu authentifizieren.

Aufruf an alle Entwickler

Europas größter IoT-Hackathon kehrt vom 14. bis 15. Mai 2019 nach Berlin zurück. Schließe dich mehr als 700 Entwicklern in verschiedenen domänenspezifischen Hack-Herausforderungen an, um zu hacken, zu spielen, zu lernen, Spaß zu haben und neue Freunde aus der ganzen Welt zu finden!

Nehmen Sie am IoT-Hackathon teil

In diesem Blogbeitrag werde ich Sie durch ein vollständiges Beispiel zum Erstellen und Registrieren eines mieterspezifischen Vertrauensankers führen , ein Zertifikat für ein Gerät erstellen, seinen Distinguished Name des Subjekts registrieren und verwenden Sie schließlich das Zertifikat, um das Gerät gegenüber dem MQTT-Protokolladapter von Hono zu authentifizieren. Für den Rest dieses Beitrags gehe ich davon aus, dass Sie ein allgemeines Verständnis der RSA-basierten Kryptographie und insbesondere der Rolle von privaten und öffentlichen Schlüsseln haben. Als Referenz definiert RFC 5280 alle technischen Details von X.509.

Warum Client-Zertifikate?

Bei der Verwendung von Passwörtern zur Authentifizierung von Geräten muss das Passwort jedes Geräts beim Credentials-Dienst von Hono registriert werden, damit die Protokolladapter das vom Gerät während der Authentifizierung angezeigte Passwort mit dem aufgezeichneten Hash des Passworts vergleichen können.

Einer der Vorteile der Verwendung von Client-Zertifikaten zur Authentifizierung von Geräten besteht darin, dass bei Hono keine individuellen Geheimnisse (Passwörter) für Geräte mehr registriert werden müssen. Stattdessen reicht es aus, einen einzelnen Vertrauensanker zu registrieren für einen Mieter, mit dem dann im Rahmen des TLS-Handshakes die Identität aller zum Mieter gehörenden Geräte überprüft werden kann. Damit dies funktioniert, müssen die von den Geräten verwendeten Client-Zertifikate eine digitale Signatur enthalten, die mit dem öffentlichen Schlüssel validiert werden kann, der als Vertrauensanker des Mieters dient.

Erstellen Sie eine Tenant-Zertifizierungsstelle

Der erste Schritt besteht daher darin, das öffentliche/private Schlüsselpaar des Mandanten zu erstellen, das zum Signieren der Client-Zertifikate verwendet wird, die von den Geräten des Mandanten verwendet werden.

$ openssl genrsa -out Tenant-key.pem 4096 $ openssl req -x509 -key Tenant-key.pem -out Tenant-cert.pem -days 365 -subj "/O=ACME Inc./CN=Sensors"

Der mit dem Parameter `-subj` festgelegte Distinguished Name des Subjekts kann jeden gültigen Distinguished Name in X.500 enthalten. Der Einfachheit halber sollten Sie jedoch keine Attributtypen außer `CN`, `L`, `ST`, `O`, `OU`, `C`, `STREET`, `DC`, `UID`.

Registrieren Sie den Mieter

Nachdem die Schlüssel erstellt wurden, können wir einen Mandanten mit dem öffentlichen Schlüssel als Vertrauensanker registrieren.

Der Einfachheit halber verwenden wir die Hono Sandbox. Jede andere (lokale) Installation mit Version 0.9-M2 oder höher sollte jedoch ebenfalls funktionieren.

Ersetzen Sie in den folgenden Befehlen bitte die Mieterkennung `ACME` durch eine Kennung Ihrer Wahl. Dies ist wichtig, da Hono die Eindeutigkeit von Mandantenkennungen erzwingt. Jeder Identifikator kann daher nur einmal pro Hono-Instanz registriert werden.

Die ersten drei Befehle definieren einige Variablen für die spätere Verwendung:die Mandantenkennung, den eindeutigen Namen des Zertifikatssubjekts und den Base64-codierten öffentlichen Schlüssel. Die Variablen werden dann im Befehl verwendet, um den Vertrauensanker beim neuen Mandanten zu registrieren.

$ TENANT="ACME" $ SUBJECT=$(openssl x509 -in Tenant-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//) $ PK=$(openssl x509 -in Tenant-cert.pem -noout -pubkey | sed /^---/d | sed -z 's/\n//g') $ cat < Tenant.json {"tenant-id":"$TENANT", "trusted-ca":{"subject-dn":"$SUBJECT", "public-key":"$PK"}} EOS $ curl -i -H 'Content-Type:application/json' -H 'Expect:' --data-binary @tenant.json https://hono.eclipse.org:28443/tenant

Gerätezertifikat erstellen

Der nächste Schritt besteht darin, ein Schlüsselpaar für das Gerät und das zugehörige Client-Zertifikat zu erstellen, das mit dem privaten Schlüssel des Mandanten signiert ist.

$ openssl genrsa -out device-key.pem 4096 $ openssl req -new -key device-key.pem -subj "/O=ACME Inc./CN=Hot Fuzz Device" | openssl x509 -req -days 365 -out device-cert.pem -CA Tenant-cert.pem -CAkey Tenant-key.pem -CAcreateserial

Stellen Sie auch hier sicher, dass Sie keine Attributtypen außer `CN`, `L`, `ST`, `O`, `OU`, `C`, `STREET`, `DC`, `UID` im Betreff verwenden Distinguished Name.

Gerät registrieren

Wir können jetzt eine beliebige Gerätekennung verwenden, um das Gerät beim Mieter zu registrieren.

$ curl -i -H 'Content-Type:application/json' --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$ MIETER

Registrieren Sie die Betreff-DN des Geräts

Der letzte Schritt besteht darin, den eindeutigen Subjektnamen des Geräts zu registrieren. Stellen Sie auch hier sicher, dass Sie dieselben Mandanten- und Gerätekennungen wie oben verwenden.

$ SUBJECT=$(openssl x509 -in device-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//) $ cat < Credentials.json {"device-id":"hot-fuzz", "type":"x509-cert", "auth-id":"$SUBJECT", "secrets":[{}]} EOS $ curl -i -H 'Content-Type:application/json' --data-binary @credentials.json https://hono.eclipse.org:28443/credentials/$TENANT

Testen Sie die Verbindung

Nachdem das Gerät jetzt registriert wurde, ist es an der Zeit, sich mit dem neu erstellten Client-Zertifikat mit dem MQTT-Adapter zu verbinden und einige Daten zu veröffentlichen.

Zuerst starten wir einen Consumer für den Mieter, für den wir das Gerät registriert haben. Sie können den Client von der Hono-Website herunterladen:

$ java -jar hono-cli-*-exec.jar --hono.client.host=hono.eclipse.org --hono.client.port=15671 --hono.client.tlsEnabled=true --hono.client. username=consumer@HONO --hono.client.password=verysecret --spring.profiles.active=receiver --tenant.id=$TENANT

Im letzten Schritt verwenden wir den Eclipse Mosquitto-Befehlszeilenclient, um einige Telemetriedaten zu veröffentlichen:

$ mosquitto_pub -h hono.eclipse.org -p 8883 --capath /etc/ssl/certs/ --cert device-cert.pem --key device-key.pem -q 1 -t telemetry -m "Hallo da"

Wenn alles gut geht, sollten Sie die Daten sehen können, die in der Konsole des Terminals protokolliert werden, in dem Sie den Consumer gestartet haben.

Das Gerät kann auch HTTP verwenden, um Daten zu veröffentlichen:

$ curl -i --cert device-cert.pem --key device-key.pem -H 'Content-Type:plain/text' -H 'Expect:' --data-binary 'Hallo da' https:// hono.eclipse.org:8443/telemetry

Internet der Dinge-Technologie

  1. Einführung in die Halbleitertheorie
  2. Veröffentlichung der neuen MongoDB-basierten Geräteregistrierung in Eclipse Hono
  3. Eclipse Hono 1.0.0 veröffentlicht:Eine offene IoT-Konnektivitätsplattform
  4. Zuverlässiges Einschalten eines batteriebetriebenen medizinischen Geräts
  5. Überwachung der Fortschritte bei Medizinprodukten
  6. Temperaturbasiertes Gerätesteuerungssystem mit LM35
  7. Arm erweitert die IoT-Konnektivitäts- und Geräteverwaltungsfunktionen durch die Übernahme von Stream Technologies
  8. Anwendungsschwachstellen machen IoT-Geräte angreifbar
  9. Anpassen und vergessen:Die Bedrohung durch unkonfiguriertes IoT
  10. Eine Einführung in das Hacken von eingebetteter IoT-Hardware