Guia de início rápido: provisionar um dispositivo simulado de certificado X.509
Neste início rápido, você cria um dispositivo simulado em sua máquina Windows. O dispositivo simulado está configurado para usar o atestado de certificado X.509 para autenticação. Depois de configurar o dispositivo, provisione-o para o hub IoT usando o Serviço de Provisionamento de Dispositivo do Hub IoT do Azure.
Se você não estiver familiarizado com o processo de provisionamento, revise a visão geral do provisionamento . Certifique-se também de que executa os passos descritos em Configurar o Serviço de Aprovisionamento de Dispositivos no Hub IoT com o portal do Azure antes de continuar.
Este guia de início rápido demonstra uma solução para uma estação de trabalho baseada no Windows. No entanto, você também pode executar os procedimentos no Linux. Para obter um exemplo de Linux, consulte Tutorial: Provisão para latência geográfica.
Pré-requisitos
Se não tiver uma subscrição do Azure, crie uma conta gratuita antes de começar.
Conclua as etapas em Configurar o Serviço de Provisionamento de Dispositivo do Hub IoT com o portal do Azure.
Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.
Instale o Visual Studio 2022 com a carga de trabalho 'Desenvolvimento de área de trabalho com C++' habilitada. Visual Studio 2015, Visual Studio 2017 e Visual Studio 19 também são suportados. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.
Instale o sistema de compilação CMake mais recente. Certifique-se de marcar a opção que adiciona o executável CMake ao seu caminho.
Importante
Confirme se os pré-requisitos do Visual Studio (Visual Studio e a carga de trabalho 'Desenvolvimento de área de trabalho com C++') estão instalados em sua máquina, antes de iniciar a
CMake
instalação. Depois de os pré-requisitos estarem assegurados e a transferência verificada, instale o sistema de compilação CMake. Além disso, esteja ciente de que versões mais antigas do sistema de compilação CMake não conseguem gerar o arquivo de solução usado neste artigo. Certifique-se de usar a versão mais recente do CMake.
Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.
Instale o .NET SDK 6.0 ou posterior em sua máquina baseada no Windows. Você pode usar o seguinte comando para verificar sua versão.
dotnet --info
Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.
- Instale Node.js v4.0 ou superior na sua máquina.
Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows.
- Python 3.6 ou posterior na sua máquina.
Os pré-requisitos a seguir são para um ambiente de desenvolvimento do Windows. Para Linux ou macOS, consulte a seção apropriada em Prepare your development environment na documentação do SDK.
Instale o Java SE Development Kit 8 ou posterior na sua máquina.
Transfira e instale o Maven.
Instale a versão mais recente do Git. Certifique-se de que o Git é adicionado às variáveis de ambiente acessíveis à janela de comando. Consulte as ferramentas de cliente Git da Software Freedom Conservancy para obter a versão mais recente das ferramentas a serem instaladas, que inclui o Git Bash, o aplicativo de linha de
git
comando que você pode usar para interagir com seu repositório Git local.Certifique-se de que o OpenSSL está instalado na sua máquina. No Windows, sua instalação do Git inclui uma instalação do OpenSSL. Você pode acessar o OpenSSL a partir do prompt do Git Bash. Para verificar se o OpenSSL está instalado, abra um prompt do Git Bash e digite
openssl version
.Nota
A menos que você esteja familiarizado com o OpenSSL e já o tenha instalado em sua máquina Windows, recomendamos usar o OpenSSL no prompt do Git Bash. Como alternativa, você pode optar por baixar o código-fonte e construir OpenSSL. Para saber mais, consulte a página Downloads do OpenSSL. Ou, você pode baixar OpenSSL pré-construído de terceiros. Para saber mais, consulte o wiki do OpenSSL. A Microsoft não garante a validade de pacotes baixados de terceiros. Se você optar por construir ou baixar o OpenSSL, certifique-se de que o binário OpenSSL esteja acessível em seu caminho e que a
OPENSSL_CNF
variável de ambiente esteja definida como o caminho do arquivo openssl.cnf .Abra um prompt de comando do Windows e um prompt do Git Bash.
As etapas neste início rápido pressupõem que você esteja usando uma máquina Windows e a instalação do OpenSSL instalada como parte do Git. Você usa o prompt do Git Bash para emitir comandos OpenSSL e o prompt de comando do Windows para todo o resto. Se você estiver usando Linux, você pode emitir todos os comandos a partir de um shell Bash.
Preparar o ambiente de desenvolvimento
Nesta seção, você prepara um ambiente de desenvolvimento usado para criar o SDK do Azure IoT C. O código de exemplo tenta provisionar o dispositivo, durante a sequência de inicialização do dispositivo.
Abra um navegador da Web e vá para a página Lançamento do SDK do Azure IoT C.
Selecione a guia Tags na parte superior da página.
Copie o nome da marca para a versão mais recente do Azure IoT C SDK.
No prompt de comando do Windows, execute os seguintes comandos para clonar a versão mais recente do SDK do Dispositivo IoT do Azure para o repositório C GitHub. Substitua
<release-tag>
pela tag copiada na etapa anterior, por exemplo:lts_01_2023
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Esta operação pode levar vários minutos para ser concluída.
Quando a operação estiver concluída, execute os seguintes comandos a
azure-iot-sdk-c
partir do diretório:mkdir cmake cd cmake
O exemplo de código utiliza um certificado X.509 para fornecer um atestado através da autenticação X.509. Execute o comando a seguir para criar uma versão do SDK específica para sua plataforma de desenvolvimento que inclua o cliente de provisionamento de dispositivo. Uma solução do Visual Studio para o dispositivo simulado
cmake
é gerada no diretório.Ao especificar o caminho usado com
-Dhsm_custom_lib
o comando a seguir, certifique-se de usar o caminho absoluto para a biblioteca nocmake
diretório criado anteriormente. O caminho mostrado pressupõe que você clonou o C SDK no diretório raiz da unidade C. Se você usou outro diretório, ajuste o caminho de acordo.
Gorjeta
Se cmake
não encontrar seu compilador C++, você pode obter erros de compilação ao executar o comando acima. Se isso acontecer, tente executar o comando no prompt de comando do Visual Studio.
Quando a compilação é bem-sucedida, as últimas linhas de saída são semelhantes à seguinte saída:
-- Building for: Visual Studio 17 2022 -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000. -- The C compiler identification is MSVC 19.32.31329.0 -- The CXX compiler identification is MSVC 19.32.31329.0 ... -- Configuring done -- Generating done -- Build files have been written to: C:/azure-iot-sdk-c/cmake
No prompt de comando do Windows, clone o repositório GitHub do SDK do Azure IoT para C# usando o seguinte comando:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
No prompt de comando do Windows, clone o SDK do Azure IoT para Node.js repositório GitHub usando o seguinte comando:
git clone https://github.com/Azure/azure-iot-sdk-node.git
No prompt de comando do Windows, clone o SDK do Dispositivo IoT do Azure para o repositório GitHub do Python usando o seguinte comando:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Nota
Os exemplos usados neste tutorial estão na ramificação v2 do repositório azure-iot-sdk-python. V3 do Python SDK está disponível para uso em beta.
No prompt de comando do Windows, clone o repositório Azure IoT Samples for Java GitHub usando o seguinte comando:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Vá para o diretório raiz
azure-iot-sdk-java
e construa o projeto para baixar todos os pacotes necessários.cd azure-iot-sdk-java mvn install -DskipTests=true
Criar um certificado de dispositivo X.509 autoassinado
Nesta seção, você usa OpenSSL para criar um certificado X.509 auto-assinado e uma chave privada. Esse certificado é carregado na instância do serviço de provisionamento e verificado pelo serviço.
Atenção
Use certificados criados com OpenSSL neste início rápido apenas para testes de desenvolvimento. Não utilize estes certificados na produção. Esses certificados expiram após 30 dias e podem conter senhas codificadas, como 1234. Para saber mais sobre como obter certificados adequados para uso em produção, consulte Como obter um certificado de CA X.509 na documentação do Hub IoT do Azure.
Execute as etapas nesta seção no prompt do Git Bash.
No prompt do Git Bash, navegue até um diretório onde você gostaria de criar seus certificados.
Execute o seguinte comando:
winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
Importante
A barra extra dada para o nome do assunto (
//CN=my-x509-device
) só é necessária para escapar da cadeia de caracteres com o Git em plataformas Windows.Quando lhe for pedido para introduzir a frase secreta PEM:, utilize a frase
1234
secreta .Quando lhe for perguntado Verificar - Introduza a frase secreta PEM:, utilize novamente a frase
1234
secreta.Um arquivo de certificado de chave pública (device-cert.pem) e um arquivo de chave privada (device-key.pem) agora devem ser gerados no diretório onde você executou o
openssl
comando.O arquivo de certificado tem seu nome comum de assunto (CN) definido como
my-x509-device
. Para inscrições baseadas em X.509, a ID de Registro é definida como o nome comum. O ID de registo é uma cadeia de carateres alfanuméricos que não diferencia maiúsculas de minúsculas mais os carateres especiais:'-'
,'.'
,'_'
,':'
. O último caractere deve ser alfanumérico ou traço ('-'
). O nome comum deve aderir a este formato. O DPS suporta IDs de registro de até 128 caracteres; no entanto, o comprimento máximo do nome comum da entidade em um certificado X.509 é de 64 caracteres. O ID de registro, portanto, é limitado a 64 caracteres ao usar certificados X.509.O arquivo de certificado é codificado em Base 64. Para exibir o nome comum da entidade (CN) e outras propriedades do arquivo de certificado, digite o seguinte comando:
Certificate: Data: Version: 3 (0x2) Serial Number: 77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = my-x509-device Validity Not Before: May 5 21:41:42 2022 GMT Not After : Jun 4 21:41:42 2022 GMT Subject: CN = my-x509-device Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (4096 bit) Modulus: 00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7: e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29: ... 23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f: 9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85: 0e:cd:53 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18 X509v3 Authority Key Identifier: keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18 X509v3 Extended Key Usage: TLS Web Client Authentication Signature Algorithm: sha256WithRSAEncryption 82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a: ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1: ... cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c: ac:d2:49:b9:36:d2:b0:21
O código de exemplo requer uma chave privada que não está encriptada. Execute o seguinte comando para criar uma chave privada não encriptada:
Quando solicitado a inserir a frase secreta para device-key.pem:, use a mesma frase secreta que você fez anteriormente,
1234
.
Mantenha o prompt do Git Bash aberto. Você precisa dele mais tarde neste início rápido.
O código de exemplo C# é configurado para usar certificados X.509 armazenados em um arquivo formatado PKCS#12 protegido por senha (certificate.pfx
). Você ainda precisa do arquivo de certificado de chave pública formatado PEM (device-cert.pem
) que acabou de criar para criar uma entrada de registro individual posteriormente neste início rápido.
Para gerar o arquivo formatado PKCS12 esperado pelo exemplo, digite o seguinte comando:
Quando solicitado a inserir a frase secreta para device-key.pem:, use a mesma frase secreta que você fez anteriormente,
1234
.Quando lhe for pedido para introduzir a palavra-passe de exportação:, utilize a palavra-passe
1234
.Quando solicitado Verificando - Digite Exportar senha:, use a senha
1234
novamente.Um arquivo de certificado formatado PKCS12 (certificate.pfx) agora deve ser gerado no diretório onde você executou o
openssl
comando.Copie o arquivo de certificado formatado PKCS12 para o diretório do projeto para o exemplo de provisionamento de dispositivo X.509. O caminho fornecido é relativo ao local onde você baixou o repositório de exemplo.
cp certificate.pfx ./azure-iot-sdk-csharp/provisioning/device/samples/"Getting Started"/X509Sample
Você não precisa do prompt do Git Bash para o resto deste início rápido. No entanto, você pode querer mantê-lo aberto para verificar seu certificado se tiver problemas em etapas posteriores.
O código de exemplo requer uma chave privada que não está encriptada. Execute o seguinte comando para criar uma chave privada não encriptada:
Quando solicitado a inserir a frase secreta para device-key.pem:, use a mesma frase secreta que você fez anteriormente,
1234
.Copie o certificado do dispositivo e a chave privada não criptografada para o diretório do projeto para o exemplo de provisionamento de dispositivo X.509. O caminho fornecido é relativo ao local onde você baixou o SDK.
cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples cp unencrypted-device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
Você não precisa do prompt do Git Bash para o resto deste início rápido. No entanto, você pode querer mantê-lo aberto para verificar seu certificado se tiver problemas em etapas posteriores.
Copie o certificado do dispositivo e a chave privada para o diretório do projeto para o exemplo de provisionamento de dispositivo X.509. O caminho fornecido é relativo ao local onde você baixou o SDK.
cp device-cert.pem ./azure-iot-sdk-python/samples/async-hub-scenarios cp device-key.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
Você não precisa do prompt do Git Bash para o resto deste início rápido. No entanto, você pode querer mantê-lo aberto para verificar seu certificado se tiver problemas em etapas posteriores.
O código de exemplo Java requer uma chave privada que não está criptografada. Execute o seguinte comando para criar uma chave privada não encriptada:
Quando solicitado a inserir a frase secreta para device-key.pem:, use a mesma frase secreta que você fez anteriormente,
1234
.
Mantenha o prompt do Git Bash aberto. Você precisa dele mais tarde neste início rápido.
Criar um registro de dispositivo
O Serviço Aprovisionamento de Dispositivos no IoT do Azure suporta dois tipos de inscrição:
- Grupos de inscrição: utilizados para inscrever vários dispositivos relacionados.
- Inscrições individuais: usadas para registrar um único dispositivo.
Este artigo demonstra um registro individual para um único dispositivo a ser provisionado com um hub IoT.
Entre no portal do Azure e navegue até sua instância do Serviço de Provisionamento de Dispositivo.
Selecione Gerenciar inscrições na seção Configurações do menu de navegação.
Selecione a guia Inscrições individuais e, em seguida, selecione Adicionar inscrição individual.
Na página Registro + provisionamento da página Adicionar registro, forneça as seguintes informações para configurar os detalhes do registro:
Campo Descrição Atestado Selecione certificados de cliente X.509 como o mecanismo de atestado. Configurações de certificado X.509 Carregue um ou dois certificados que serão usados para verificar o dispositivo para este registro. Status de provisionamento Marque a caixa Habilitar este registro se quiser que esse registro esteja disponível para provisionar seu dispositivo. Desmarque esta caixa se quiser que a inscrição seja desativada. Você pode alterar essa configuração mais tarde. Política de reaprovisionamento Escolha uma política de reprovisionamento que reflita como você deseja que o DPS manipule dispositivos que solicitam reprovisionamento. Para obter mais informações, consulte Políticas de reprovisionamento. Selecione Next: Hubs IoT.
Na guia Hubs IoT da página Adicionar registro, forneça as seguintes informações para determinar para quais hubs IoT o registro pode provisionar dispositivos:
Campo Descrição Hubs IoT de destino Selecione um ou mais hubs IoT vinculados ou adicione um novo link a um hub IoT. Para saber mais sobre como vincular hubs IoT à sua instância DPS, consulte Como vincular e gerenciar hubs IoT. Política de afetação Se você selecionou mais de um hub IoT vinculado, selecione como deseja atribuir dispositivos aos diferentes hubs. Para saber mais sobre políticas de alocação, consulte Como usar políticas de alocação.
Se você selecionou apenas um hub IoT vinculado, recomendamos usar a política de distribuição ponderada uniformemente.Selecione Next: Configurações do dispositivo
Na guia Configurações do dispositivo da página Adicionar registro, forneça as seguintes informações para definir como os dispositivos recém-provisionados serão configurados:
Campo Descrição ID do Dispositivo Forneça um ID de dispositivo que será atribuído ao dispositivo provisionado no Hub IoT. Se não fornecer um ID de dispositivo, o ID de registo será utilizado. IoT Edge Verifique a opção Habilitar o IoT Edge em dispositivos provisionados se o dispositivo provisionado executará o Azure IoT Edge. Desmarque esta caixa se este registro for para um dispositivo não habilitado para IoT Edge. Tags de dispositivo Use esta caixa de texto para fornecer as tags que você deseja aplicar ao gêmeo de dispositivo do dispositivo provisionado. Propriedades desejadas Use esta caixa de texto para fornecer as propriedades desejadas que você deseja aplicar ao gêmeo de dispositivo do dispositivo provisionado. Para obter mais informações, veja Understand and use device twins in IoT Hub (Compreender e utilizar dispositivos duplos no Hub IoT).
Selecione Seguinte: Rever + criar.
No separador Rever + criar, verifique todos os seus valores e, em seguida, selecione Criar.
Preparar e executar o código de provisionamento do dispositivo
Nesta seção, você atualiza o código de exemplo para enviar a sequência de inicialização do dispositivo para sua instância do Serviço de Provisionamento de Dispositivo. Essa sequência de inicialização faz com que o dispositivo seja reconhecido e atribuído a um hub IoT vinculado à instância do DPS.
Nesta seção, você usa o prompt do Git Bash e o IDE do Visual Studio.
Configurar o código do dispositivo de provisionamento
Nesta seção, você atualiza o código de exemplo com as informações da instância do Serviço de Provisionamento de Dispositivo.
No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.
Copie o valor ID Scope .
Inicie o Visual Studio e abra o novo arquivo de solução que foi criado no
cmake
diretório criado na raiz do repositório git azure-iot-sdk-c. O arquivo de solução é chamadoazure_iot_sdks.sln
.No Gerenciador de Soluções para Visual Studio, navegue até Provision_Samples > prov_dev_client_sample Arquivos de > Origem e abra prov_dev_client_sample.c.
Localize a
id_scope
constante e substitua o valor pelo valor do Escopo de ID copiado na etapa 2.static const char* id_scope = "0ne00000A0A";
Localize a definição da função
main()
no mesmo ficheiro. Verifique se ahsm_type
variável está definida comoSECURE_DEVICE_TYPE_X509
.SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; hsm_type = SECURE_DEVICE_TYPE_X509; //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Guardar as suas alterações.
Clique com o botão direito do mouse no projeto prov_dev_client_sample e selecione Definir como projeto de inicialização.
Configurar o código de stub HSM personalizado
As especificidades da interação com o armazenamento seguro real baseado em hardware variam dependendo do hardware. Como resultado, o certificado e a chave privada usados pelo dispositivo simulado neste início rápido são codificados no código de stub personalizado do HSM (Hardware Security Module).
Para atualizar o código de stub HSM personalizado para simular a identidade do dispositivo com ID my-x509-device
:
No Gerenciador de Soluções para Visual Studio, navegue até Provision_Samples > custom_hsm_example > Arquivos de Origem e abra o custom_hsm_example.c.
Atualize o valor da cadeia de caracteres constante
COMMON_NAME
usando o nome comum usado ao gerar o certificado do dispositivo,my-x509-device
.static const char* const COMMON_NAME = "my-x509-device";
Atualize o valor da cadeia de caracteres constante usando o certificado de
CERTIFICATE
dispositivo, device-cert.pem, que você gerou anteriormente.A sintaxe do texto do certificado no exemplo deve seguir o seguinte padrão sem espaços extras ou análise feita pelo Visual Studio.
static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Atualizar esse valor de cadeia de caracteres manualmente pode ser propenso a erros. Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da
CERTIFICATE
constante de cadeia de caracteres e grava-a na saída.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
Copie e cole o texto do certificado de saída para o valor constante.
Atualize o valor da cadeia de caracteres da
PRIVATE_KEY
constante com a chave privada não criptografada para o certificado do dispositivo, unencrypted-device-key.pem.A sintaxe do texto da chave privada deve seguir o seguinte padrão sem espaços extras ou análise feita pelo Visual Studio.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
Atualizar esse valor de cadeia de caracteres manualmente pode ser propenso a erros. Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da
PRIVATE_KEY
constante de cadeia de caracteres e grava-a na saída.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
Copie e cole o texto da chave privada de saída para o valor constante.
Guardar as suas alterações.
Clique com o botão direito do mouse no projeto custom_hsm_-_example e selecione Construir.
Importante
Você deve criar o projeto custom_hsm_example antes de criar o restante da solução na próxima seção.
Executar o exemplo
No menu do Visual Studio, selecione Debug (Depurar) >Start without debugging (Iniciar sem depuração) para executar a solução. Se você for solicitado a reconstruir o projeto, selecione Sim para reconstruir o projeto antes de executá-lo.
A saída a seguir é um exemplo do dispositivo
my-x509-device
simulado inicializando com êxito e conectando-se ao serviço de provisionamento. O dispositivo é atribuído a um hub IoT e registrado:Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-iot-hub-2.azure-devices.net, deviceId: my-x509-device Press enter key to exit:
Nesta seção, você usa o prompt de comando do Windows.
No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.
Copie o valor ID Scope .
No prompt de comando do Windows, mude para o diretório X509Sample. Este diretório está localizado no diretório .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample fora do diretório onde você clonou os exemplos no seu computador.
Digite o seguinte comando para criar e executar o exemplo de provisionamento de dispositivo X.509 (substitua o
<IDScope>
valor pelo Escopo de ID que você copiou na seção anterior. O arquivo de certificado assume como padrão ./certificate.pfx e solicita a senha .pfx.dotnet run -- -s <IDScope>
Se você quiser passar o certificado e a senha como parâmetro, você pode usar o seguinte formato.
Nota
Parâmetros adicionais podem ser passados durante a execução do aplicativo para alterar o TransportType (-t) e o GlobalDeviceEndpoint (-g).
dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
O dispositivo se conecta ao DPS e é atribuído a um hub IoT. Em seguida, o dispositivo envia uma mensagem de telemetria para o hub IoT.
Loading the certificate... Enter the PFX password for certificate.pfx: **** Found certificate: A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device; PrivateKey: True Using certificate A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device Initializing the device provisioning client... Initialized for registration Id my-x509-device. Registering with the device provisioning service... Registration status: Assigned. Device my-x509-device registered to MyExampleHub.azure-devices.net. Creating X509 authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
Nesta seção, você usa o prompt de comando do Windows.
No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.
Copie o valor ID Scope .
No prompt de comando do Windows, vá para o diretório de exemplo e instale os pacotes necessários para o exemplo. O caminho mostrado é relativo ao local onde você clonou o SDK.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
O exemplo usa cinco variáveis de ambiente para autenticar e provisionar um dispositivo IoT usando DPS. Estas variáveis de ambiente são:
Nome da variável Description PROVISIONING_HOST
O ponto de extremidade a ser usado para se conectar à sua instância DPS. Para este início rápido, use o ponto de extremidade global, global.azure-devices-provisioning.net
.PROVISIONING_IDSCOPE
O escopo de ID para sua instância DPS. PROVISIONING_REGISTRATION_ID
O ID de registo do seu dispositivo. Ele deve corresponder ao nome comum da entidade no certificado do dispositivo. CERTIFICATE_FILE
O caminho para o arquivo de certificado do dispositivo. KEY_FILE
O caminho para o arquivo de chave privada do dispositivo. Adicione variáveis de ambiente para o ponto de extremidade do dispositivo global e o escopo de ID. Substitua
<id-scope>
pelo valor copiado na etapa 2.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Defina a variável de ambiente para o ID de registro do dispositivo. A ID de registro do dispositivo IoT deve corresponder ao nome comum da entidade no certificado do dispositivo. Se você seguiu as etapas neste início rápido para gerar um certificado de teste autoassinado,
my-x509-device
é o nome do assunto e o ID de registro do dispositivo.set PROVISIONING_REGISTRATION_ID=my-x509-device
Defina as variáveis de ambiente para o certificado do dispositivo e os arquivos de chave privada do dispositivo (não criptografados).
set CERTIFICATE_FILE=.\device-cert.pem set KEY_FILE=.\unencrypted-device-key.pem
Execute o exemplo e verifique se o dispositivo foi provisionado com êxito.
node register_x509.js
Você deve ver uma saída semelhante ao exemplo a seguir:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=my-x509-device Client connected send status: MessageEnqueued
Nesta seção, você usa o prompt de comando do Windows.
No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.
Copie os valores de ID Scope e Global device endpoint .
No prompt de comando do Windows, vá para o diretório do exemplo de provision_x509.py . O caminho mostrado é relativo ao local onde você clonou o SDK.
cd ./azure-iot-sdk-python/samples/async-hub-scenarios
Este exemplo usa seis variáveis de ambiente para autenticar e provisionar um dispositivo IoT usando DPS. Estas variáveis de ambiente são:
Nome da variável Description PROVISIONING_HOST
O ponto de extremidade global usado para se conectar à sua instância DPS. PROVISIONING_IDSCOPE
O escopo de ID para sua instância DPS. DPS_X509_REGISTRATION_ID
O ID de registo do seu dispositivo. Ele também deve corresponder ao nome do assunto no certificado do dispositivo. X509_CERT_FILE
O caminho para o arquivo de certificado do dispositivo. X509_KEY_FILE
O caminho para o arquivo de chave privada do certificado do dispositivo. PASS_PHRASE
A frase secreta usada para criptografar o certificado e o arquivo de chave privada ( 1234
).Adicione as variáveis de ambiente para o ponto de extremidade do dispositivo global e o Escopo do ID.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Defina a variável de ambiente para a ID de registro. O ID de registro do dispositivo IoT deve corresponder ao nome do assunto no certificado do dispositivo. Se você seguiu as etapas neste início rápido para gerar um certificado de teste autoassinado,
my-x509-device
é o nome do assunto e o ID de registro do dispositivo.set DPS_X509_REGISTRATION_ID=my-x509-device
Defina as variáveis de ambiente para o arquivo de certificado, arquivo de chave privada e frase secreta.
set X509_CERT_FILE=./device-cert.pem set X509_KEY_FILE=./device-key.pem set PASS_PHRASE=1234
Revise o código para provision_x509.py. Se você não estiver usando o Python versão 3.7 ou posterior, faça a alteração de código mencionada aqui para substituir
asyncio.run(main())
e salvar suas alterações.Execute o exemplo. O exemplo se conecta ao DPS, que provisiona o dispositivo para um hub IoT. Depois que o dispositivo é provisionado, o exemplo envia algumas mensagens de teste para o hub IoT.
$ python azure-iot-sdk-python/samples/async-hub-scenarios/provision_x509.py RegistrationStage(RequestAndResponseOperation): Op will transition into polling after interval 2. Setting timer. The complete registration result is my-x509-device TestHub12345.azure-devices.net initialAssignment null Will send telemetry from the provisioned device sending message #4 sending message #7 sending message #2 sending message #8 sending message #5 sending message #9 sending message #1 sending message #6 sending message #10 sending message #3 done sending message #4 done sending message #7 done sending message #2 done sending message #8 done sending message #5 done sending message #9 done sending message #1 done sending message #6 done sending message #10 done sending message #3
Nesta seção, você usa o prompt de comando do Windows e o prompt do Git Bash.
No portal do Azure, selecione a guia Visão geral do seu Serviço de Provisionamento de Dispositivo.
Copie os valores de ID Scope e Global device endpoint .
No prompt de comando do Windows, navegue até a pasta de projeto de exemplo. O caminho mostrado é relativo ao local onde você clonou o SDK
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Insira o serviço de provisionamento e as informações de identidade X.509 no código de exemplo. Essas informações são usadas durante o provisionamento, para atestado do dispositivo simulado, antes do registro do dispositivo.
Abra o arquivo
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
em seu editor favorito.Atualize os valores a seguir com o ID Scope and Provisioning Service Global Endpoint que você copiou anteriormente.
private static final String idScope = "[Your ID scope here]"; private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]"; private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
Atualize o
leafPublicPem
valor da cadeia de caracteres constante com o valor do seu certificado, device-cert.pem.A sintaxe do texto do certificado deve seguir o seguinte padrão, sem espaços ou caracteres extras.
private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" + "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" + ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" + "-----END CERTIFICATE-----";
Atualizar esse valor de cadeia de caracteres manualmente pode ser propenso a erros. Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da
leafPublicPem
constante de cadeia de caracteres e grava-a na saída.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
Copie e cole o texto do certificado de saída para o valor constante.
Atualize o valor da cadeia de caracteres da
leafPrivateKey
constante com a chave privada não criptografada para o certificado do dispositivo, unencrypted-device-key.pem.A sintaxe do texto da chave privada deve seguir o seguinte padrão, sem espaços ou caracteres extras.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
Atualizar esse valor de cadeia de caracteres manualmente pode ser propenso a erros. Para gerar a sintaxe adequada, você pode copiar e colar o seguinte comando no prompt do Git Bash e pressionar ENTER. Este comando gera a sintaxe para o valor da
leafPrivateKey
constante de cadeia de caracteres e grava-a na saída.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
Copie e cole o texto da chave privada de saída para o valor constante.
Guardar as suas alterações.
Crie o exemplo e, em seguida, vá para a
target
pasta.mvn clean install cd target
A compilação produz .jar arquivo na
target
pasta com o seguinte formato de arquivo:provisioning-x509-sample-{version}-with-deps.jar
; por exemplo:provisioning-x509-sample-1.8.1-with-deps.jar
. Execute o arquivo .jar. Talvez seja necessário substituir a versão no comando a seguir.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
O exemplo se conecta ao DPS, que provisiona o dispositivo para um hub IoT. Depois que o dispositivo é provisionado, o exemplo envia algumas mensagens de teste para o hub IoT.
Starting... Beginning setup. WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance. 2022-05-11 09:42:05,025 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.0 2022-05-11 09:42:05,027 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread... Waiting for Provisioning Service to register 2022-05-11 09:42:05,030 INFO (global.azure-devices-provisioning.net-6255a8ba-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service... 2022-05-11 09:42:05,252 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message 2022-05-11 09:42:05,286 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device... 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING Waiting for Provisioning Service to register 2022-05-11 09:42:15,685 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully IotHUb Uri : MyExampleHub.azure-devices.net Device ID : java-device-01 2022-05-11 09:42:25,057 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,080 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,087 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.0.3 2022-05-11 09:42:25,129 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection... 2022-05-11 09:42:25,150 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet... 2022-05-11 09:42:25,982 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged 2022-05-11 09:42:25,983 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# was acknowledged 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully 2022-05-11 09:42:26,070 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads 2022-05-11 09:42:26,073 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details 2022-05-11 09:42:26,074 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully 2022-05-11 09:42:26,075 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully Sending message from device to IoT Hub... 2022-05-11 09:42:26,077 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) Press any key to exit... 2022-05-11 09:42:26,079 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,422 DEBUG (MQTT Call: java-device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,425 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message sent!
Confirme o registro de provisionamento do dispositivo
Para ver para qual hub IoT seu dispositivo foi provisionado, examine os detalhes de registro do registro individual criado anteriormente:
No portal do Azure, vá para o seu Serviço de Provisionamento de Dispositivo.
No menu Configurações, selecione Gerenciar inscrições.
Selecione Inscrições individuais. A entrada de inscrição X.509 que você criou anteriormente, my-x509-device, deve aparecer na lista.
Selecione a entrada de inscrição. O hub IoT ao qual seu dispositivo foi atribuído e sua ID de dispositivo aparecem em Status de registro.
Para verificar o dispositivo no seu hub IoT:
No portal do Azure, vá para o hub IoT ao qual seu dispositivo foi atribuído.
No menu Gerenciamento de dispositivos, selecione Dispositivos.
Se o dispositivo tiver sido provisionado com êxito, o ID do dispositivo, my-x509-device, deverá aparecer na lista, com Status definido como habilitado. Se não vir o dispositivo, selecione Atualizar.
Importante
Se tiver alterado o estado inicial do dispositivo duplo face ao valor predefinido na entrada de inscrição do seu dispositivo, este pode extrair o estado pretendido do dispositivo duplo a partir do hub e agir em conformidade. Para obter mais informações, veja Understand and use device twins in IoT Hub (Compreender e utilizar dispositivos duplos no Hub IoT)
Clean up resources (Limpar recursos)
Se você planeja continuar trabalhando e explorando o exemplo de cliente de dispositivo, não limpe os recursos criados neste início rápido. Se você não planeja continuar, use as etapas a seguir para excluir todos os recursos criados por este início rápido.
Excluir o registro do dispositivo
Feche a janela da saída do exemplo de dispositivo cliente no seu computador.
No menu à esquerda no portal do Azure, selecione Todos os recursos.
Selecione o Serviço de Provisionamento de Dispositivo.
No menu Configurações, selecione Gerenciar inscrições.
Selecione a guia Inscrições individuais.
Marque a caixa de seleção ao lado da ID de registro do dispositivo que você inscreveu neste início rápido.
Na parte superior da página, selecione Eliminar.
Excluir o registro do dispositivo do Hub IoT
No menu à esquerda no portal do Azure, selecione Todos os recursos.
Selecione seu hub IoT.
No menu Explorers, selecione dispositivos IoT.
Marque a caixa de seleção ao lado da ID do dispositivo que você registrou neste início rápido.
Na parte superior da página, selecione Eliminar.
Próximos passos
Neste início rápido, você provisionou um único dispositivo para seu hub IoT usando um registro individual. Em seguida, saiba como provisionar vários dispositivos em vários hubs.