Veilige apparaatauthenticatie met X.509-certificaten in Eclipse Hono
In de afgelopen maanden heeft mediadekking onveilige IoT-apparaten benadrukt die niet voldoen aan basisbeveiligingsstandaarden. Een terugkerende zorg is de vertrouwelijkheid van data verzonden van apparaten naar cloud-diensten. Verrassend genoeg sturen veel apparaten data over publieke netwerken onversleuteld, zelfs al ondersteunen TCP/IP-gebaseerde protocollen zoals HTTP en MQTT TLS-versleuteling.
Eclipse Hono heeft TLS voor zijn HTTP- en MQTT-adapters ingeschakeld vanaf het begin. De 0.9-M2 mijlpaal voegt nu ondersteuning toe voor X.509 client-certificaat-authenticatie tijdens de TLS-handshake, wat apparaten in staat stelt een sleutelpaar te gebruiken in plaats van een gebruikersnaam/wachtwoord.
Alle ontwikkelaars geroepen
Europas grootste IoT-hackathon keert terug naar Berlijn op 14-15 mei 2023. Sluit je aan bij 700+ ontwikkelaars in domeinspecifieke uitdagingen, leer, netwerk en have fun.
In deze gids lopen we door een compleet voorbeeld: een tenant-specifieke trust anchor creëren en registreren, een apparaatcertificaat genereren, zijn subject DN registreren en het certificaat gebruiken om het apparaat te authenticeren tegen Hono's MQTT-adapter. Een werkende kennis van RSA-cryptografie en X.509-concepten (RFC 5280) wordt verondersteld.
Waarom client-certificaten?
Het gebruik van wachtwoorden vereist het opslaan van een geheim per apparaat in Hono's Credentials-service, wat dan vergeleken wordt met het door het apparaat geleverde wachtwoord. Client-certificaten elimineren de behoefte aan per-apparaat geheimen. Door een enkele trust anchor voor een tenant te registreren, kunnen alle apparaatcertificaten in de TLS-handshake gevalideerd worden met behulp van de publieke sleutel van de tenant.
Een tenant certificate authority creëren
Genereer het RSA-sleutelpaar en zelf-ondertekende certificaat van de tenant. Deze zullen alle apparaatcertificaten ondertekenen.
$ 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"
Gebruik alleen standaard X.500-attributen (CN, L, ST, O, OU, C, STREET, DC, UID) om de DN simpel te houden.
De tenant registreren
Registreer de trust anchor bij Hono. Het volgende voorbeeld gebruikt de Hono Sandbox (v0.9-M2 of later). Vervang ACME met een unieke tenant-ID voor uw instantie.
$ 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
Een apparaatcertificaat creëren
Genereer een apparaatsleutelpaar en een certificaat ondertekend door de CA van de tenant.
$ 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
Het apparaat registreren
Registreer een apparaat-ID met de tenant.
$ curl -i -H "Content-Type: application/json" --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$TENANT
Het apparaat's subject DN registreren
Associeer het subject DN van het apparaatcertificaat met de apparaat-ID.
$ 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
De verbinding testen
Start een consumer voor de tenant en publiceer telemetrie met behulp van het apparaatcertificaat.
# Start consumer
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
# Publiceer telemetrie via MQTT
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 "Hello there"
Als succesvol, zal de consumer-console het bericht tonen. U kunt ook via HTTP publiceren:
curl -i --cert device-cert.pem --key device-key.pem \
-H "Content-Type: plain/text" -H "Expect:" \
--data-binary "Hello there" https://hono.eclipse.org:8443/telemetry
Internet of Things-technologie
- LM35-gebaseerd temperatuurregelsysteem met AT89S52 microcontroller
- Solid-State Device Theory: van fysica naar praktische toepassingen
- Eclipse Hono lanceert MongoDB-gebaseerde Device Registry – Schaalbaar, Productie-klaar
- Eclipse Hono 1.0.0 gelanceerd: Unified, open-source IoT-connectiviteitsplatform
- Betrouwbare power-on oplossingen voor batterij-gedreven medische apparaten
- Vooruitgang in medische apparaattechnologie volgen
- Arm Versterkt IoT Connectiviteit En Apparaatbeheer Door Overname Van Stream Technologies
- IoT-apparaatkwetsbaarheden blootstellen slimme huizen aan aanvallen: De credential compromise-dreiging
- Ongeconfigureerde IoT-apparaten: De verborgen dreiging voor uw slimme huis
- Embedded Hardware Hacken voor IoT-apparaten: Tools, Technieken en Zakelijke Implicaties
- IoT benutten om medische apparaten op afstand te verbinden en beheren - Nieuwe bedrijfsmodellen ontgrendelen