Lorsque vous connectez un appareil à IoT Platform via une passerelle Message Queuing Telemetry Transport (MQTT), vous pouvez activer l'authentification mutuelle entre l'appareil et IoT Platform pour vérifier l'identité de l'appareil. Cette rubrique explique comment connecter un appareil à IoT Platform en utilisant une authentification mutuelle basée sur les certificats X.509. Dans cet exemple, nous créons une passerelle MQTT dont le paramètre Authentication Type est défini sur One-party Verification et le paramètre Enable X.509 certificate-based Device Verification sur Yes, et nous fournissons un exemple de code Java.
Prérequis
Vous avez acheté une instance Exclusive Enterprise Edition. Dans cet exemple, l'instance est achetée dans la région Chine (Shanghai). Pour plus d'informations, consultez Acheter une instance Enterprise Edition.
-
Les certificats nécessaires à l'authentification mutuelle sont prêts.
Dans cet exemple, les fichiers de certificat suivants sont utilisés : le fichier de certificat racine
root-ca.crt, le fichier de clé privée côté serveurserver.key, le fichier de certificat côté serveurserver.crt, le fichier de clé privée côté appareilclient.keyet le fichier de certificat d'appareilclient.crt.
Contexte
IoT Platform met à disposition des passerelles MQTT et vous permet d'utiliser des certificats X.509 ainsi que des certificats personnalisés pour authentifier et connecter les appareils à IoT Platform. Cette approche permet à IoT Platform de répondre aux exigences de divers scénarios métier IoT.
Pour plus d'informations sur l'authentification et la communication entre les passerelles MQTT et les appareils, consultez la documentation relative aux passerelles MQTT.
Préparatifs
Dans cet exemple, le programme est développé en Java. Préparez un environnement de développement Java répondant aux exigences suivantes :
Système d'exploitation : Windows 10 (64 bits)
Java Development Kit (JDK) : JDK 8
Environnement de développement intégré (IDE) : IntelliJ IDEA Community Edition
Créer une passerelle et ajouter un appareil
-
Créer une passerelle MQTT : dans la boîte de dialogue Add Gateway, définissez le paramètre Server Certificate avec le contenu du fichier
server.crt, le paramètre Private Key of Server Certificate avec le contenu du fichierserver.keyet le paramètre Device Root Certificate avec le contenu du fichierroot-ca.crt. Configurez ensuite les autres paramètres comme suit :Définissez Protocol sur MQTT
Définissez Custom Port sur
1883Définissez Authentication Type sur One-party Verification
Définissez Enable Data Parsing sur No
Définissez Enable Device X.509 Certificate Authentication sur Yes
Définissez Enable OCSP sur Not Enabled
Sur la page Gateway, copiez l'URL figurant dans la colonne Gateway URL de la passerelle. Le format de l'URL Gateway URL est par exemple
iot-{gateway identifier}.igw.iothub.aliyuncs.com, avec le numéro de port1883.Ajouter un appareil au produit de passerelle MQTT. Dans cet exemple, ajoutez un appareil avec le paramètre MQTT Username défini sur
device01et le paramètre MQTT Password défini surhello456.
Développer un programme pour l'appareil
Téléchargez le package de code aiot-java-dual-auth-demo et décompressez-le.
-
Ouvrez IntelliJ IDEA et importez l'exemple de projet
aiot-java-demodepuis le package de code.-
Ajoutez les dépendances Maven au fichier
pom.xml. Dans cet exemple, utilisez les dépendances suivantes :<dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.mqttv5.client</artifactId> <version>1.2.5</version> </dependency> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> <version>1.47</version> </dependency> -
Le répertoire
/src/main/java/com/aliyun/iotdu projet contient les fichiers de programme suivants requis pour l'authentification mutuelle :SslUtil.java: lit les certificats de l'appareil.Mqtt5TlsApp.java: connecte les appareils à IoT Platform.
-
Dans le fichier
pom.xmldu projet, cliquez sur Load Maven Changes pour télécharger les packages de dépendance.Dans le répertoire
/src/maindu projet, créez un dossier nomméresources.Dans le répertoire
/src/main/resourcesdu projet, importez les fichiers de certificat suivants :root-ca.crtcontenant le certificat racine,client.keycontenant la clé privée côté appareil etclient.crtcontenant le certificat de l'appareil.-
Dans le fichier
/src/main/java/com/aliyun/iot/SslUtil.javadu projet, modifiez la clé utilisée pour générer un certificat.ImportantLa valeur
123456spécifiée pour la fonctionclientKs.setKeyEntry()indique une clé utilisée pour générer un certificat. Adaptez cette valeur à votre scénario métier....... // Replace 123456 with an actual key value. clientKs.setKeyEntry("private-key", key.getPrivate(), "123456".toCharArray(), new java.security.cert.Certificate[]{clientCertificate}); ...... -
Ouvrez le fichier
/src/main/java/com/aliyun/iot/Mqtt5TlsApp.javadu projet et modifiez les paramètres de connexion de l'appareil....... // MQTT connection parameters String userName = "device01"; String password = "hello456"; String clientId = "test01_client1"; // The path in which the root directory is stored. String caCertPath = "src/main/resources/root-ca.crt"; // The path in which the device certificate is stored. String clientCertPath= "src/main/resources/client.crt"; // The path in which the device-side private key is stored. String clientKeyPath="src/main/resources/client.key"; // The URL of the MQTT gateway. String broker = "ssl://iot-*******.igw.iothub.aliyuncs.com:1883"; ......Parameter
Example
Description
userName
device01Valeur du paramètre MQTT Username de l'appareil ajouté.
password
hello456Valeur du paramètre MQTT Password de l'appareil ajouté.
clientId
test01_client1(Facultatif) ID du client. L'ID client doit comporter entre 1 et 64 caractères. Nous vous recommandons d'utiliser l'adresse MAC ou le numéro de série (SN) de l'appareil comme ID client.
caCertPath
src/main/resources/root-ca.crtChemin du projet où est stocké le fichier de certificat racine de l'appareil
root-ca.crt.clientCertPath
src/main/resources/client.crtChemin du projet où est stocké le fichier de certificat de l'appareil
client.crt.clientKeyPath
src/main/resources/client.keyChemin du projet où est stocké le fichier de clé privée côté appareil
client.key.broker
ssl://iot-*******.igw.iothub.aliyuncs.com:1883Endpoint de la passerelle MQTT à laquelle vous souhaitez connecter l'appareil. Format : ssl://${Gateway endpoint}:${Port number}.
Remplacez
${Gateway endpoint}et${Port number}par l'endpoint et le numéro de port personnalisé de l'gateway URL que vous avez enregistrés. -
Exécutez le fichier de programme
Mqtt5TlsApp.javapour effectuer l'authentification mutuelle entre l'appareil et IoT Platform.RemarqueDans cet exemple,
Thread.sleep(20000);est ajouté au fichier Mqtt5TlsApp.java. Ce code termine le programme Mqtt5TlsApp.java et déconnecte l'appareil d'IoT Platform 20 secondes après l'exécution du programme. Dans des scénarios réels, écrivez du code personnalisé pour connecter ou déconnecter les appareils.Le résultat suivant s'affiche. Une fois l'appareil authentifié, il est connecté à IoT Platform.
broker: ssl://iot-xxx.igw.iothub.aliyuncs.com:1883 Connected broker available ability, retain is available: true broker available ability, shared subscription is available: true publish: content finish Disconnected