Ao conectar um dispositivo ao IoT Platform por meio de um gateway Message Queuing Telemetry Transport (MQTT), você pode ativar a verificação bidirecional entre o dispositivo e o IoT Platform para validar a identidade do dispositivo. Este tópico descreve como conectar um dispositivo ao IoT Platform usando verificação bidirecional baseada em certificado X.509. Neste exemplo, cria-se um gateway MQTT com o parâmetro Authentication Type definido como One-party Verification e o parâmetro Enable X.509 certificate-based Device Verification definido como Yes. Também é fornecido um código Java de amostra.
Pré-requisitos
Você adquiriu uma instância Exclusive Enterprise Edition. Neste exemplo, a instância Exclusive Enterprise Edition foi adquirida na região China (Shanghai). Para mais informações, consulte Purchase an Enterprise Edition instance.
-
Os certificados necessários para a verificação bidirecional estão preparados.
Neste exemplo, são usados os seguintes arquivos de certificado:
root-ca.crt(arquivo de certificado raiz),server.key(arquivo de chave privada do servidor),server.crt(arquivo de certificado do servidor),client.key(arquivo de chave privada do dispositivo) eclient.crt(arquivo de certificado do dispositivo).
Informações básicas
O IoT Platform oferece gateways MQTT e permite o uso de certificados X.509 e personalizados para verificar e conectar dispositivos ao IoT Platform. Isso ajuda o IoT Platform a atender aos requisitos de diversos cenários de negócios de IoT.
Para mais informações sobre verificação e comunicação entre gateways MQTT e dispositivos, consulte MQTT gateways.
Preparações
Neste exemplo, usa-se Java para desenvolver o programa. Prepare um ambiente de desenvolvimento Java que atenda aos seguintes requisitos:
Sistema operacional: Windows 10 (64 bits)
Java Development Kit (JDK): JDK 8
Ambiente de desenvolvimento integrado (IDE): IntelliJ IDEA Community Edition
Crie um gateway e adicione um dispositivo
-
Create an MQTT gateway: Na caixa de diálogo Add Gateway, defina o parâmetro Server Certificate com o conteúdo do arquivo
server.crt, o parâmetro Private Key of Server Certificate com o conteúdo do arquivoserver.keye o parâmetro Device Root Certificate com o conteúdo do arquivoroot-ca.crt. Em seguida, configure os demais parâmetros da seguinte forma:Defina Protocol como MQTT
Defina Custom Port como
1883Defina Authentication Type como One-party Verification
Defina Enable Data Parsing como No
Defina Enable Device X.509 Certificate Authentication como Yes
Defina Enable OCSP como Not Enabled
Na página Gateway, copie a URL na coluna Gateway URL do gateway. O formato da Gateway URL segue o exemplo
iot-{gateway identifier}.igw.iothub.aliyuncs.com, com o número de porta1883.Add a device to the MQTT gateway product. Neste exemplo, adicione um dispositivo com o parâmetro MQTT Username definido como
device01e o parâmetro MQTT Password definido comohello456.
Desenvolver um programa de dispositivo
Baixe o pacote de código aiot-java-dual-auth-demo e descompacte-o.
-
Abra o IntelliJ IDEA e importe o projeto de amostra
aiot-java-demodo pacote de código.-
Adicione dependências Maven ao arquivo
pom.xml. Neste exemplo, use as seguintes dependências:<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> -
O diretório
/src/main/java/com/aliyun/iotdo projeto contém os seguintes arquivos de programa necessários para a verificação bidirecional:SslUtil.java: lê os certificados do dispositivo.Mqtt5TlsApp.java: conecta dispositivos ao IoT Platform.
-
No arquivo
pom.xmldo projeto, clique em Load Maven Changes para baixar os pacotes de dependência.No diretório
/src/maindo projeto, crie uma pasta chamadaresources.No diretório
/src/main/resourcesdo projeto, importe os seguintes arquivos de certificado:root-ca.crt(contendo o certificado raiz),client.key(contendo a chave privada do dispositivo) eclient.crt(contendo o certificado do dispositivo).-
No arquivo
/src/main/java/com/aliyun/iot/SslUtil.javado projeto, modifique a chave usada para gerar o certificado.ImportanteO valor
123456especificado na funçãoclientKs.setKeyEntry()indica uma chave usada para gerar um certificado. Altere esse valor conforme o seu cenário de negócios....... // Replace 123456 with an actual key value. clientKs.setKeyEntry("private-key", key.getPrivate(), "123456".toCharArray(), new java.security.cert.Certificate[]{clientCertificate}); ...... -
Abra o arquivo
/src/main/java/com/aliyun/iot/Mqtt5TlsApp.javado projeto e modifique os parâmetros de conexão do 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
Exemplo
Descrição
userName
device01Valor do parâmetro MQTT Username do dispositivo adicionado.
password
hello456Valor do parâmetro MQTT Password do dispositivo adicionado.
clientId
test01_client1(Opcional) ID do cliente. Deve ter entre 1 e 64 caracteres. Recomendamos usar o endereço MAC ou o número de série (SN) do dispositivo como ID do cliente.
caCertPath
src/main/resources/root-ca.crtCaminho do projeto onde o arquivo de certificado raiz do dispositivo
root-ca.crtestá armazenado.clientCertPath
src/main/resources/client.crtCaminho do projeto onde o arquivo de certificado do dispositivo
client.crtestá armazenado.clientKeyPath
src/main/resources/client.keyCaminho do projeto onde o arquivo de chave privada do dispositivo
client.keyestá armazenado.broker
ssl://iot-*******.igw.iothub.aliyuncs.com:1883Endpoint do gateway MQTT ao qual você deseja conectar o dispositivo. Formato: ssl://${Gateway endpoint}:${Port number}.
Substitua
${Gateway endpoint}e${Port number}pelo endpoint e número de porta personalizados da gateway URL que você salvou. -
Execute o arquivo de programa
Mqtt5TlsApp.javapara realizar a verificação bidirecional entre o dispositivo e o IoT Platform.NotaNeste exemplo, adicionou-se
Thread.sleep(20000);ao arquivo Mqtt5TlsApp.java. O código Thread.sleep(20000); encerra o programa Mqtt5TlsApp.java e desconecta o dispositivo do IoT Platform 20 segundos após a execução do programa. Em cenários reais, escreva seu próprio código personalizado para conectar ou desconectar dispositivos.A saída abaixo mostra o resultado. Após o dispositivo passar pela verificação, ele se conecta ao 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