When you connect a device to IoT Platform by using a Message Queuing Telemetry Transport (MQTT) gateway, you can enable two-way verification between the device and IoT Platform to verify the identity of the device. Este tema describe cómo conectar un dispositivo a IoT Platform mediante la verificación bidireccional con certificado X.509. En este ejemplo, se crea una puerta de enlace MQTT cuyo parámetro Authentication Type está configurado en One-party Verification y el parámetro Enable X.509 certificate-based Device Verification está establecido en Yes; además, se proporciona código Java de muestra.
Requisitos previos
Se adquirió una instancia Exclusive Enterprise Edition. En este ejemplo, la instancia Exclusive Enterprise Edition se adquirió en la región China (Shanghai). Para obtener más información, consulte Purchase an Enterprise Edition instance.
-
Se prepararon los certificados necesarios para realizar la verificación bidireccional.
En este ejemplo se utilizan los siguientes archivos de certificado:
root-ca.crt(archivo de certificado raíz),server.key(archivo de clave privada del servidor),server.crt(archivo de certificado del servidor),client.key(archivo de clave privada del dispositivo) yclient.crt(archivo de certificado del dispositivo).
Contexto
IoT Platform ofrece puertas de enlace MQTT y permite utilizar certificados X.509 y certificados personalizados para verificar y conectar dispositivos a IoT Platform con fines de comunicación. Esto ayuda a IoT Platform a cumplir con los requisitos de diversos escenarios de negocio de IoT.
Para obtener más información sobre la verificación y la comunicación entre las puertas de enlace MQTT y los dispositivos, consulte MQTT gateways.
Preparativos
En este ejemplo se utiliza Java para desarrollar un programa. Se requiere un entorno de desarrollo de Java que cumpla con los siguientes requisitos:
Sistema operativo: Windows 10 (64 bits)
Java Development Kit (JDK): JDK 8
Entorno de desarrollo integrado (IDE): IntelliJ IDEA Community Edition
Creación de una puerta de enlace y adición de un dispositivo
-
Create an MQTT gateway: En el cuadro de diálogo Add Gateway, establezca el parámetro Server Certificate con el contenido del archivo
server.crt, el parámetro Private Key of Server Certificate con el contenido del archivoserver.keyy el parámetro Device Root Certificate con el contenido del archivoroot-ca.crt. A continuación, configure los demás parámetros de la siguiente manera:Establezca Protocol en MQTT
Establezca Custom Port en
1883Establezca Authentication Type en One-party Verification
Establezca Enable Data Parsing en No
Establezca Enable Device X.509 Certificate Authentication en Yes
Establezca Enable OCSP en Not Enabled
En la página Gateway, copie la URL de la columna Gateway URL correspondiente a la puerta de enlace. El formato de Gateway URL es similar a
iot-{gateway identifier}.igw.iothub.aliyuncs.com, con el número de puerto1883.Add a device to the MQTT gateway product. En este ejemplo se agrega un dispositivo cuyo parámetro MQTT Username está establecido en
device01y cuyo parámetro MQTT Password está establecido enhello456.
Desarrollo del programa del dispositivo
Descargue el paquete de código aiot-java-dual-auth-demo y descomprímalo.
-
Abra IntelliJ IDEA e importe el proyecto de muestra
aiot-java-demodesde el paquete de código.-
Agregue las dependencias de Maven al archivo
pom.xml. En este ejemplo se utilizan las siguientes dependencias:<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> -
El directorio
/src/main/java/com/aliyun/iotdel proyecto contiene los siguientes archivos de programa necesarios para realizar la verificación bidireccional:SslUtil.java: lee los certificados del dispositivo.Mqtt5TlsApp.java: conecta los dispositivos a IoT Platform.
-
En el archivo
pom.xmldel proyecto, haga clic en Load Maven Changes para descargar los paquetes de dependencias.En el directorio
/src/maindel proyecto, cree una carpeta llamadaresources.En el directorio
/src/main/resourcesdel proyecto, importe los siguientes archivos de certificado:root-ca.crt(que contiene el certificado raíz),client.key(que contiene la clave privada del dispositivo) yclient.crt(que contiene el certificado del dispositivo).-
En el archivo
/src/main/java/com/aliyun/iot/SslUtil.javadel proyecto, modifique la clave que se utiliza para generar un certificado.ImportanteEl valor
123456especificado en la funciónclientKs.setKeyEntry()indica una clave que se usa para generar un certificado. Cambie este valor según su escenario de negocio....... // Replace 123456 with an actual key value. clientKs.setKeyEntry("private-key", key.getPrivate(), "123456".toCharArray(), new java.security.cert.Certificate[]{clientCertificate}); ...... -
Abra el archivo
/src/main/java/com/aliyun/iot/Mqtt5TlsApp.javadel proyecto y modifique los parámetros de conexión del dispositivo....... // 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"; ......Parámetro
Ejemplo
Descripción
userName
device01Valor del parámetro MQTT Username del dispositivo agregado.
password
hello456Valor del parámetro MQTT Password del dispositivo agregado.
clientId
test01_client1(Opcional) ID del cliente. Debe tener entre 1 y 64 caracteres. Se recomienda usar la dirección MAC o el número de serie (SN) del dispositivo como ID de cliente.
caCertPath
src/main/resources/root-ca.crtRuta del proyecto donde se almacena el archivo de certificado raíz del dispositivo
root-ca.crt.clientCertPath
src/main/resources/client.crtRuta del proyecto donde se almacena el archivo de certificado del dispositivo
client.crt.clientKeyPath
src/main/resources/client.keyRuta del proyecto donde se almacena el archivo de clave privada del dispositivo
client.key.broker
ssl://iot-*******.igw.iothub.aliyuncs.com:1883Endpoint de la puerta de enlace MQTT a la que desea conectar el dispositivo. Formato:
ssl://${Gateway endpoint}:${Port number}.Sustituya
${Gateway endpoint}y${Port number}por el endpoint del número de puerto personalizado de la gateway URL que guardó previamente. -
Ejecute el archivo de programa
Mqtt5TlsApp.javapara llevar a cabo la verificación bidireccional entre el dispositivo e IoT Platform.NotaEn este ejemplo se agregó
Thread.sleep(20000);al archivo Mqtt5TlsApp.java. Este código finaliza el programa Mqtt5TlsApp.java y desconecta el dispositivo de IoT Platform 20 segundos después de iniciada la ejecución. En escenarios reales, puede escribir código personalizado para conectar o desconectar dispositivos.La siguiente salida muestra el resultado. Una vez superada la verificación, el dispositivo queda conectado a 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