Como usar certificados X.509 sobre HTTPS sem um SDK

Neste artigo de instruções, você provisionará um dispositivo usando certificados x.509 por HTTPS sem usar um SDK de dispositivo do Azure IoT DPS. A maioria dos idiomas fornece bibliotecas para enviar solicitações HTTP, mas, em vez de se concentrar em um idioma específico, neste artigo, você usará a ferramenta de linha de comando cURL para enviar e receber por HTTPS.

Você pode seguir as etapas neste artigo em uma máquina Linux ou Windows. Se você estiver executando no Windows Subsystem for Linux (WSL) ou em uma máquina Linux, poderá inserir todos os comandos em seu sistema local em um prompt Bash. Se você estiver executando no Windows, insira todos os comandos em seu sistema local em um prompt do GitBash.

Há vários caminhos através deste artigo, dependendo do tipo de entrada de inscrição e do(s) certificado(s) X.509 que você escolher usar. Depois de instalar os pré-requisitos, leia a Visão geral antes de continuar.

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.

  • Certifique-se de que tem o Python 3.7 ou posterior instalado na sua máquina. Você pode verificar sua versão do Python executando python --version ou python3 --version.

  • Se você estiver executando no Windows, 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. No Windows, você inserirá todos os comandos em seu sistema local em um prompt do GitBash.

  • CLI do Azure. Você tem duas opções para executar comandos da CLI do Azure neste artigo:

    • Use o Azure Cloud Shell, um shell interativo que executa comandos da CLI em seu navegador. Essa opção é recomendada porque você não precisa instalar nada. Se você estiver usando o Cloud Shell pela primeira vez, entre no portal do Azure. Siga as etapas no início rápido do Cloud Shell para iniciar o Cloud Shell e selecionar o ambiente Bash.
    • Opcionalmente, execute a CLI do Azure em sua máquina local. Se a CLI do Azure já estiver instalada, execute az upgrade para atualizar a CLI e as extensões para a versão atual. Para instalar a CLI do Azure, consulte Instalar a CLI do Azure.
  • Se você estiver executando em um ambiente Linux ou WSL, abra um prompt Bash para executar comandos localmente. Se você estiver executando em um ambiente Windows, abra um prompt do GitBash.

Descrição geral

Há três cenários abordados neste artigo e as etapas iniciais que você executará serão diferentes para cada um. Se você quiser:

  • Provisionar por meio de uma inscrição individual usando um certificado autoassinado, siga as etapas nestas seções:

    1. Use um certificado autoassinado para criar um certificado autoassinado.
    2. Use um registro individual para criar um registro individual.
  • Provisionar por meio de um registro individual usando uma cadeia de certificados, siga as etapas nestas seções:

    1. Use uma cadeia de certificados para criar uma cadeia de certificados.
    2. Use um registro individual para criar um registro individual.
    3. Carregue e verifique um certificado de assinatura para carregar e verificar seu certificado de autoridade de certificação raiz.
  • Provisionamento por meio de um grupo de inscrição, siga as etapas nestas seções:

    1. Use uma cadeia de certificados para criar uma cadeia de certificados.
    2. Use um grupo de inscrição para criar um grupo de inscrição.
    3. Carregue e verifique um certificado de assinatura para carregar e verificar seu certificado de autoridade de certificação raiz.

Depois de concluir as etapas para o cenário escolhido, você pode continuar em Registrar seu dispositivo e Enviar uma mensagem de telemetria.

Criar um certificado de dispositivo

Para este artigo, você usará um certificado X.509 para autenticar com o DPS usando um registro individual ou um grupo de inscrição.

Se você estiver usando um registro individual, poderá usar um certificado X.509 autoassinado ou uma cadeia de certificados composta pelo certificado do dispositivo mais um ou mais certificados de assinatura. Se você estiver usando um grupo de registro, deverá usar uma cadeia de certificados.

Importante

Para autenticação de registro X.509, o nome comum da entidade (CN) do certificado do dispositivo é usado como a ID de registro do dispositivo. 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 DPS suporta IDs de registro de até 128 caracteres; no entanto, o nome comum do assunto de um certificado X.509 é limitado a 64 caracteres. Se você alterar o nome comum do assunto para o certificado do dispositivo nas etapas a seguir, verifique se ele está de acordo com esse formato.

Usar um certificado autoassinado

Para criar um certificado autoassinado para usar com um registro individual, navegue até um diretório onde você deseja criar seu certificado e siga estas etapas:

  1. 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.

  2. Quando lhe for pedido para introduzir a frase secreta PEM:, utilize a frase 1234secreta .

  3. 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.

    O ficheiro de chave privada está protegido pela frase secreta: 1234.

  4. O arquivo de certificado é codificado em Base64. Para exibir o nome comum da entidade (CN) e outras propriedades do arquivo de certificado, digite o seguinte comando:

    winpty openssl x509 -in device-cert.pem -text -noout
    
    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
    

Usar uma cadeia de certificados

Se você estiver usando um grupo de registro, deverá autenticar-se com uma cadeia de certificados. Com uma inscrição individual, você pode usar uma cadeia de certificados ou um certificado autoassinado.

Para criar uma cadeia de certificados, siga as instruções em Criar uma cadeia de certificados X.509. Você só precisa de um dispositivo para este artigo, para que possa parar depois de criar a chave privada e a cadeia de certificados para o primeiro dispositivo.

Quando terminar, deverá ter os seguintes ficheiros:

Certificado Ficheiro Description
certificado de autoridade de certificação raiz. certs/azure-iot-test-only.root.ca.cert.pem Será enviado para o DPS e verificado.
certificado de autoridade de certificação intermediária certs/azure-iot-test-only.intermediate.cert.pem Será usado para criar um grupo de inscrição no DPS.
device-01 chave privada privado/device-01.key.pem Usado pelo dispositivo para verificar a propriedade do certificado do dispositivo durante a autenticação com DPS.
certificado device-01 certs/device-01.cert.pem Usado para criar entrada de inscrição individual com DPS.
certificado de cadeia completa device-01 certs/dispositivo-01-full-chain.cert.pem Apresentado pelo dispositivo para autenticar e registrar com DPS.

Usar uma inscrição individual

Para criar um registro individual para usar neste artigo, use o comando az iot dps enrollment create .

O comando a seguir cria uma entrada de registro individual com a política de alocação padrão para sua instância DPS usando o certificado de dispositivo especificado.

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type x509 --certificate-path {path to your certificate}
  • Substitua o nome do grupo de recursos e da instância do DPS.

  • O ID de inscrição é o ID de registro do seu dispositivo e, para inscrições X.509, deve corresponder ao nome comum (CN) do assunto do certificado do dispositivo.

  • O caminho do certificado é o caminho para o certificado do dispositivo.

    • Se você seguiu as instruções em Usar um certificado autoassinado, o nome do arquivo é device-cert.pem.

    • Se você seguiu as instruções em Usar uma cadeia de certificados, o nome do arquivo é certs/device-01.cert.pem.

Nota

Se você estiver usando o Cloud Shell para executar comandos da CLI do Azure, poderá usar o botão de carregamento para carregar seu arquivo de certificado na unidade de nuvem antes de executar o comando.

Captura de ecrã que mostra o botão carregar ficheiro no Azure Cloud Shell.

Usar um grupo de inscrição

Para criar um grupo de inscrição a ser usado neste artigo, use o comando az iot dps enrollment-group create .

O comando a seguir cria uma entrada de grupo de registro com a política de alocação padrão para sua instância DPS usando um certificado de CA intermediário:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
  • Substitua o nome do grupo de recursos e da instância do DPS.

  • O ID de inscrição é uma cadeia de caracteres alfanuméricos que não diferencia maiúsculas de minúsculas mais os caracteres especiais: '-', '.', '_', ':'. O último caractere deve ser alfanumérico ou traço ('-'). Pode ser qualquer nome que você escolher usar para o grupo de inscrição.

  • O caminho do certificado é o caminho para o certificado intermediário. Se você seguiu as instruções em Usar uma cadeia de certificados, o nome do arquivo é certs/azure-iot-test-only.intermediate.cert.pem.

Nota

Se você estiver usando o Cloud Shell para executar comandos da CLI do Azure, poderá usar o botão de carregamento para carregar seu arquivo de certificado na unidade de nuvem antes de executar o comando.

Captura de ecrã que mostra o botão carregar ficheiro no Azure Cloud Shell.

Nota

Se preferir, você pode criar um grupo de inscrição com base em um certificado de assinatura que foi previamente carregado e verificado com o DPS (consulte a próxima seção). Para fazer isso, especifique o nome do certificado com o --ca-name e omita o --certificate-path parâmetro no az iot dps enrollment-group create comando.

Carregar e verificar um certificado de assinatura

Se você estiver usando uma cadeia de certificados para um registro individual ou um grupo de registro, deverá carregar e verificar pelo menos um certificado na cadeia de assinatura do certificado de dispositivo para o DPS.

  • Para um registro individual, isso pode ser qualquer certificado de assinatura na cadeia de certificados do dispositivo.

  • Para um grupo de inscrição, esse pode ser o certificado definido no grupo de inscrição ou qualquer certificado em sua cadeia de assinatura até e incluindo o certificado de autoridade de certificação raiz.

Para carregar e verificar seu certificado, use o comando az iot dps certificate create :

az iot dps certificate create -g {resource_group_name} --dps-name {dps_name} --certificate-name {friendly_name_for_your_certificate} --path {path_to_your_certificate} --verified true
  • Substitua o nome do grupo de recursos e da instância do DPS.

  • O caminho do certificado é o caminho para o certificado de assinatura. Para este artigo, recomendamos que você carregue o certificado de autoridade de certificação raiz. Se você seguiu as instruções em Usar uma cadeia de certificados, o nome do arquivo é certs/azure-iot-test-only.root.ca.cert.pem.

  • O nome do certificado pode conter apenas caracteres alfanuméricos ou os seguintes caracteres especiais: -._. Nenhum espaço em branco é permitido. Por exemplo, "azure-iot-test-only-root".

Nota

Se você estiver usando o Cloud Shell para executar comandos da CLI do Azure, poderá usar o botão de carregamento para carregar seu arquivo de certificado na unidade de nuvem antes de executar o comando.

Captura de ecrã que mostra o botão carregar ficheiro no Azure Cloud Shell.

Nota

As etapas nesta seção verificaram automaticamente o certificado ao carregar. Você também pode fazer a verificação manual do certificado. Para saber mais, consulte Verificação manual de CA intermediária ou raiz.

Registar o seu dispositivo

Você chama a API REST do dispositivo de registro para provisionar seu dispositivo por meio do DPS.

Use o seguinte comando curl:

curl -L -i -X PUT --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

Em que:

  • -L diz ao curl para seguir redirecionamentos HTTP.

  • –i Diz ao curl para incluir cabeçalhos de protocolo na saída. Esses cabeçalhos não são estritamente necessários, mas podem ser úteis.

  • -X PUT informa curl que este é um comando HTTP PUT. Necessário para esta chamada de API.

  • --cert [path_to_your_device_cert] informa onde encontrar o certificado X.509 do seu dispositivo. Se a chave privada do dispositivo estiver protegida por uma frase secreta, pode adicionar a frase secreta após o caminho do certificado precedido por dois pontos, por exemplo: --cert my-device.pem:1234.

    • Se estiver a utilizar um certificado autoassinado, o ficheiro de certificado do dispositivo conterá apenas um único certificado X.509. Se você seguiu as instruções em Usar um certificado autoassinado, o nome do arquivo é device-cert.pem e a senha da chave privada é 1234, portanto, use --cert device-cert.pem:1234.

    • Se você estiver usando uma cadeia de certificados, por exemplo, ao autenticar por meio de um grupo de registro, o arquivo de certificado do dispositivo deverá conter uma cadeia de certificados válida. A cadeia de certificados deve incluir o certificado do dispositivo e todos os certificados de assinatura até um certificado verificado, inclusive. Se você seguiu as instruções em Usar uma cadeia de certificados para criar a cadeia de certificados, o caminho do arquivo é certs/device-01-full-chain.cert.pem, portanto, use --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] Informa à Curl onde encontrar a chave privada do seu dispositivo.

    • Se você seguiu as instruções em Usar um certificado autoassinado, o nome do arquivo é device-key.pem, então use --key device-cert.pem:1234.

    • Se você seguiu as instruções em Usar uma cadeia de certificados, o caminho da chave é certs/device-01-full-chain.cert.pem, portanto, use --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' diz ao DPS que estamos postando conteúdo JSON e deve ser 'application/json'

  • -H 'Content-Encoding: utf-8' informa ao DPS a codificação que estamos usando para o corpo da mensagem. Defina o valor adequado para o seu SO/cliente; no entanto, é geralmente utf-8.

  • -d '{"registrationId": "[registration_id]"}', o –d parâmetro é o 'dados' ou o corpo da mensagem que estamos publicando. Deve ser JSON, na forma de '{"registrationId":"[registration_id"}'. Note que, para a ondulação, ela é embrulhada em aspas simples; caso contrário, você precisa escapar das aspas duplas no JSON. Para inscrição X.509, a ID de registro é o nome comum (CN) da entidade do certificado do dispositivo.

  • Finalmente, o último parâmetro é o URL para postar. Para DPS "regular" (ou seja, não local), o ponto de extremidade DPS global, global.azure-devices-provisioning.net é usado: https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Observe que você tem que substituir [dps_scope_id] e [registration_id] com os valores apropriados.

Por exemplo:

  • Se você seguiu as instruções em Usar um certificado autoassinado:

    curl -L -i -X PUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "my-x509-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register?api-version=2021-06-01
    
  • Se você seguiu as instruções em Usar uma cadeia de certificados:

    curl -L -i -X PUT --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "device-01"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/device-01/register?api-version=2021-06-01
    

Uma chamada bem-sucedida terá uma resposta semelhante à seguinte:

HTTP/1.1 202 Accepted
Date: Sat, 27 Aug 2022 17:53:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register
Retry-After: 3
x-ms-request-id: 05cdec07-c0c7-48f3-b3cd-30cfe27cbe57
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a","status":"assigning"}

A resposta contém um ID de operação e um status. Nesse caso, o status é definido como assigning. O registro do DPS é, potencialmente, uma operação de longa duração, por isso é feito de forma assíncrona. Normalmente, você pesquisará o status usando a API REST de Pesquisa de Status da Operação para determinar quando seu dispositivo foi atribuído ou se ocorreu uma falha.

Os valores de status válidos para DPS são:

  • assigned: o valor de retorno da chamada de status indicará a qual Hub IoT o dispositivo foi atribuído.

  • assigning: a operação ainda está em execução.

  • disabled: o registro de registro está desativado no DPS, portanto, o dispositivo não pode ser atribuído.

  • failed: a atribuição falhou. Haverá um errorCode e errorMessage devolvido em um registrationState registro na resposta para indicar o que falhou.

  • unassigned

Para chamar a API de Pesquisa de Status da Operação , use o seguinte comando curl:

curl -L -i -X GET --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

Você usará o mesmo escopo de ID, ID de registro, certificado e chave que fez na solicitação Registrar dispositivo . Use o ID da operação que foi retornado na resposta Registrar dispositivo .

Por exemplo, o comando a seguir é para o certificado autoassinado criado em Usar um certificado autoassinado. (Você precisa modificar o escopo do ID e o ID da operação.)

curl -L -i -X GET --cert ./device-certPUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/operations/5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a?api-version=2021-06-01

A saída a seguir mostra a resposta para um dispositivo que foi atribuído com êxito. Observe que a status propriedade é assigned e que a registrationState.assignedHub propriedade está definida para o hub IoT onde o dispositivo foi provisionado.

HTTP/1.1 200 OK
Date: Sat, 27 Aug 2022 18:10:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: 8f211bc5-3ed8-4c8b-9a79-e003e756e9e4
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a",
   "status":"assigned",
   "registrationState":{
      "x509":{
         
      },
      "registrationId":"my-x509-device",
      "createdDateTimeUtc":"2022-08-27T17:53:19.5143497Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-x509-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-27T17:53:19.7519141Z",
      "etag":"IjEyMDA4NmYyLTAwMDAtMDMwMC0wMDAwLTYzMGE1YTBmMDAwMCI="
   }
}

Anote o ID do dispositivo e o hub IoT atribuído. Você os usará para enviar uma mensagem de telemetria na próxima seção.

Enviar uma mensagem de telemetria

Você chama a API REST de Evento de Envio de Dispositivo do Hub IoT para enviar telemetria para o dispositivo.

Use o seguinte comando curl:

curl -L -i -X POST --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

Em que:

  • -X POST informa curl que este é um comando HTTP POST. Necessário para esta chamada de API.

  • --cert [path_to_your_device_cert] informa onde encontrar o certificado X.509 do seu dispositivo. Se a chave privada do dispositivo estiver protegida por uma frase secreta, pode adicionar a frase secreta após o caminho do certificado precedido por dois pontos, por exemplo: --cert my-device.pem:1234.

    • Se estiver a utilizar um certificado autoassinado, o ficheiro de certificado do dispositivo conterá apenas um único certificado X.509. Se você seguiu as instruções em Usar um certificado autoassinado, o nome do arquivo é device-cert.pem e a senha da chave privada é 1234, portanto, use --cert device-cert.pem:1234.

    • Se estiver a utilizar uma cadeia de certificados, o ficheiro de certificados do dispositivo tem de conter uma cadeia de certificados válida. Se você seguiu as instruções em Usar uma cadeia de certificados para criar a cadeia de certificados, o caminho do arquivo é certs/device-01-full-chain.cert.pem, portanto, use --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] Informa à Curl onde encontrar a chave privada do seu dispositivo.

    • Se você seguiu as instruções em Usar um certificado autoassinado, o nome do arquivo é device-key.pem, então use --key device-cert.pem:1234.

    • Se você seguiu as instruções em Usar uma cadeia de certificados, o caminho da chave é certs/device-01-full-chain.cert.pem, portanto, use --cert certs/device-01-full-chain.cert.pem.

  • -H 'Content-Type: application/json' informa ao Hub IoT que estamos postando conteúdo JSON e deve ser 'application/json'.

  • -H 'Content-Encoding: utf-8' informa ao Hub IoT a codificação que estamos usando para o corpo da mensagem. Defina o valor adequado para o seu SO/cliente; no entanto, é geralmente utf-8.

  • -d '{"temperature": 30}', o –d parâmetro é o 'dados' ou o corpo da mensagem que estamos publicando. Para este artigo, estamos postando um único ponto de dados de temperatura. O tipo de conteúdo foi especificado como application/json, portanto, para esta solicitação, o corpo é JSON. Note que, para a ondulação, ela é embrulhada em aspas simples; caso contrário, você precisa escapar das aspas duplas no JSON.

  • O último parâmetro é o URL para postar. Para a API de eventos de envio de dispositivo, a URL é: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Substitua [assigned_iot_hub_name] pelo nome do hub IoT ao qual seu dispositivo foi atribuído.

    • Substitua [device_id] pelo ID do dispositivo que foi atribuído quando registou o dispositivo. Para dispositivos provisionados por meio de grupos de inscrição, o ID do dispositivo será o ID de registro. Para inscrições individuais, você pode, opcionalmente, especificar uma ID de dispositivo diferente da ID de registro na entrada de inscrição.

Por exemplo:

  • Se você seguiu as instruções em Usar um certificado autoassinado:

    curl -L -i -X POST --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    
  • Se você seguiu as instruções em Usar uma cadeia de certificados:

    curl -L -i -X POST --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    

Uma chamada bem-sucedida terá uma resposta semelhante à seguinte:

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: aa58c075-20d9-4565-8058-de6dc8524f14
Date: Wed, 31 Aug 2022 18:34:44 GMT

Passos Seguintes