Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial Internet of Things >> Technologie de l'Internet des objets

Authentification de périphérique basée sur X.509 dans Eclipse Hono

Au cours des derniers mois, les médias ont été pleins de reportages sur l'insécurité Des appareils IoT qui ne répondaient même pas aux exigences de sécurité les plus élémentaires. L'une des préoccupations soulevées était la confidentialité des données transférées des appareils vers les services cloud fournis par les fabricants. Dans de nombreux cas, les données sont envoyées sur des réseaux publics entièrement non cryptées, ce qui est assez surprenant, étant donné que tous les protocoles de transport populaires basés sur TCP/IP utilisés dans les appareils IoT d'aujourd'hui (par exemple, HTTP et MQTT) prennent en charge la négociation et l'utilisation d'un canal de transport sécurisé (crypté) au moyen de Transport Layer Security (TLS).

Eclipse Hono a pris en charge l'utilisation de TLS dans ses adaptateurs de protocole HTTP et MQTT depuis le tout début. Le jalon 0.9-M2 récemment publié a ajouté la prise en charge de l'authentification des appareils à l'aide d'un certificat client X.509 dans le cadre de la négociation TLS pour les adaptateurs HTTP et MQTT. Cela permet aux appareils d'utiliser une paire de clés privée/publique au lieu d'un nom d'utilisateur et d'un mot de passe pour s'authentifier auprès des adaptateurs de protocole.

Appel à tous les développeurs

Le plus grand hackathon IoT d'Europe revient à Berlin les 14 et 15 mai 2019. Rejoignez plus de 700 développeurs dans divers défis de hack spécifiques à un domaine pour pirater, jouer, apprendre, s'amuser et se faire de nouveaux amis du monde entier !

Rejoignez le hackathon IoT

Dans cet article de blog, je vais vous présenter un exemple complet de création et d'enregistrement d'une ancre de confiance spécifique au locataire. , créez un certificat pour un appareil, enregistrez son nom distinctif du sujet et, enfin, utilisez le certificat pour authentifier l'appareil auprès de l'adaptateur de protocole MQTT de Hono. Dans la suite de cet article, je supposerai que vous avez une compréhension générale de la cryptographie basée sur RSA et, en particulier, des rôles joués par les clés privées et publiques. Pour référence, la RFC 5280 définit tous les détails techniques de X.509.

Pourquoi des certificats clients ?

Lors de l'utilisation de mots de passe pour authentifier les appareils, le mot de passe de chaque appareil doit être enregistré auprès du service d'identification de Hono afin que les adaptateurs de protocole puissent comparer le mot de passe présenté par l'appareil lors de l'authentification avec le hachage du mot de passe enregistré.

L'un des avantages de l'utilisation de certificats clients pour authentifier les appareils est qu'il n'est plus nécessaire d'enregistrer des secrets individuels (mots de passe) pour les appareils avec Hono. Au lieu de cela, il suffit d'enregistrer une seule ancre de confiance pour un locataire qui peut ensuite être utilisé pour vérifier l'identité de tous les appareils appartenant au locataire dans le cadre de la négociation TLS. Pour que cela fonctionne, les certificats clients utilisés par les appareils doivent contenir une signature numérique qui peut être validée à l'aide de la clé publique qui sert d'ancre de confiance au locataire.

Créer une autorité de certification locataire

La première étape consiste donc à créer la paire de clés publique/privée du locataire qui sera utilisée pour signer le(s) certificat(s) client(s) utilisé(s) par les appareils du locataire.

$ 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"

Le nom distinctif du sujet défini à l'aide du paramètre `-subj` peut contenir n'importe quel nom distinctif X.500 valide. Cependant, afin de garder les choses simples, vous devez vous abstenir d'utiliser des types d'attributs autres que `CN`, `L`, `ST`, `O`, `OU`, `C`, `STREET`, `DC`, `UID`.

Inscrire le locataire

Maintenant que les clés ont été créées, nous pouvons enregistrer un locataire en utilisant la clé publique comme ancre de confiance.

Pour plus de commodité, nous utiliserons le bac à sable Hono. Cependant, toute autre installation (locale) exécutant la version 0.9-M2 ou une version ultérieure devrait également fonctionner.

Dans les commandes ci-dessous, veuillez remplacer l'identifiant du locataire « ACME » par un identifiant de votre choix. Ceci est important car Hono applique l'unicité des identifiants de locataire. Chaque identifiant ne peut donc être enregistré qu'une seule fois par instance Hono.

Les trois premières commandes définissent certaines variables pour une utilisation ultérieure :l'identifiant du locataire, le nom distinctif du sujet du certificat et la clé publique codée en Base64. Les variables sont ensuite utilisées dans la commande pour enregistrer l'ancre de confiance auprès du nouveau locataire.

$ LOCATAIRE="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 < locataire.json {"tenant-id":"$TENANT", "trusted-ca":{"subject-dn":"$SUBJECT", "public-key":"$PK"}} EOS $ curl -i -H 'Type de contenu :application/json' -H 'Attente :' --data-binary @tenant.json https://hono.eclipse.org:28443/tenant

Créer un certificat d'appareil

L'étape suivante consiste à créer une paire de clés pour l'appareil et son certificat client correspondant, qui est signé par la clé privée du locataire.

$ 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

Encore une fois, assurez-vous de n'utiliser aucun type d'attribut en dehors de `CN`, `L`, `ST`, `O`, `OU`, `C`, `STREET`, `DC`, `UID` dans le sujet nom distinctif.

Enregistrez l'appareil

Nous pouvons maintenant utiliser un identifiant d'appareil arbitraire pour enregistrer l'appareil auprès du locataire.

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

Enregistrez le DN du sujet de l'appareil

La dernière étape consiste à enregistrer le nom distinctif du sujet de l'appareil. Encore une fois, assurez-vous d'utiliser les mêmes identifiants de locataire et d'appareil que ci-dessus.

$ 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 'Type de contenu :application/json' --data-binary @credentials.json https://hono.eclipse.org:28443/credentials/$TENANT

Testez la connexion

Maintenant que l'appareil a été enregistré, il est temps de se connecter à l'adaptateur MQTT à l'aide du certificat client nouvellement créé et de publier des données.

Tout d'abord, nous commençons un consommateur pour le locataire pour lequel nous avons enregistré l'appareil. Vous pouvez télécharger le client à partir du site Web Hono :

$ 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

Dans la dernière étape, nous utilisons le client de ligne de commande Eclipse Mosquitto pour publier des données de télémétrie :

$ 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 "Bonjour"

Si tout se passe bien, vous devriez pouvoir voir les données enregistrées dans la console du terminal où vous avez démarré le consommateur.

L'appareil peut également utiliser HTTP pour publier des données :

$ curl -i --cert device-cert.pem --key device-key.pem -H 'Content-Type:plain/text' -H 'Attente:' --data-binary 'Bonjour' https:// hono.eclipse.org:8443/télémétrie

Technologie de l'Internet des objets

  1. Libération du nouveau registre d'appareils basé sur MongoDB dans Eclipse Hono
  2. Lancement d'Eclipse Hono 1.0.0 :une plate-forme de connectivité IoT ouverte
  3. Mise sous tension fiable d'un appareil médical à piles
  4. Surveillance des progrès des dispositifs médicaux
  5. Système de contrôle d'appareil basé sur la température utilisant LM35
  6. Arm étend la connectivité IoT et les capacités de gestion des appareils avec l'acquisition de Stream Technologies
  7. Les vulnérabilités des applications laissent les appareils IoT exposés aux attaques
  8. Fit and forget :la menace posée par l'IoT non configuré
  9. Introduction au piratage du matériel embarqué des appareils IoT