Como usar certificados X.509 por HTTPS sem um SDK
Neste artigo de instruções, você provisionará um dispositivo usando certificados x.509 por HTTPS sem usar um SDK do dispositivo DPS em IoT do Azure. A maioria das linguagens fornece bibliotecas para enviar solicitações HTTP, mas, em vez de se concentrar em uma linguagem específica, 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 um computador Linux ou Windows. No caso de execuções em WSL (Subsistema do Windows para Linux) ou em um computador Linux, você poderá inserir todos os comandos no seu sistema local em um prompt do Bash. No caso de execuções no Windows, insira todos os comandos no seu sistema local em um prompt do GitBash.
Há vários caminhos neste artigo, dependendo do tipo de entrada de registro e certificado(s) X.509 que você escolher usar. Depois de instalar os prerrequisitos, leia a Visão geral antes de continuar.
Pré-requisitos
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Conclua as etapas em Configurar o Serviço de Provisionamento de Dispositivos no Hub IoT com o portal do Azure.
Verifique se você tem o Python 3.7 ou posterior instalado no computador. Verifique sua versão do Python executando
python --version
oupython3 --version
.No caso de execuções no Windows, instale a versão mais recente do Git. Verifique se o Git foi adicionado às variáveis de ambiente que podem ser acessadas pela janela de comando. Confira Ferramentas de cliente Git do Software Freedom Conservancy para obter a versão mais recente das ferramentas
git
a serem instaladas, que inclui o Git Bash, o aplicativo de linha de comando que você pode usar para interagir com seu repositório Git local. No Windows, insira todos os comandos no 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:
- Usar o Azure Cloud Shell, um shell interativo que executa comandos da CLI no navegador. Essa opção é recomendada porque não é preciso instalar nada. Se estiver usando o Cloud Shell pela primeira vez, faça logon no portal do Azure. Siga as etapas do Guia de início rápido do Cloud Shell para Iniciar o Cloud Shell e Selecionar o ambiente Bash.
- Opcionalmente, execute a CLI do Azure no computador local. Se a CLI do Azure já estiver instalado, 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.
No caso de execuções em um ambiente Linux ou WSL, abra um prompt do Bash para executar comandos localmente. No caso de execuções em um ambiente do Windows, abra um prompt do GitBash.
Visã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:
Provisione por meio de um registro individual usando um certificado autoassinado. Siga as etapas nestas seções:
- Use um certificado autoassinado para criar um certificado autoassinado.
- Use um registro individual para criar um registro individual.
Provisione por meio de um registro individual usando uma cadeia de certificados autoassinados. Siga as etapas nestas seções:
- Use uma cadeia de certificados para criar uma cadeia de certificados.
- Use um registro individual para criar um registro individual.
- Carregue e verifique um certificado de autenticação para carregar e verificar seu certificado de AC raiz.
Provisione por meio de um grupo de registros. Siga as etapas nestas seções:
- Use uma cadeia de certificados para criar uma cadeia de certificados.
- Use um grupo de registros para criar um grupo de registros.
- Carregue e verifique um certificado de autenticação para carregar e verificar seu certificado de AC raiz.
Depois de concluir as etapas para o cenário escolhido, você poderá continuar para Registrar seu dispositivo e Enviar uma mensagem de telemetria.
Criar um certificado de dispositivo
Neste artigo, você usará um certificado X.509 para autenticar com o DPS usando um registro individual ou um grupo de registros.
Se estiver usando um registro individual, você poderá usar um certificado X.509 autoassinado ou uma cadeia de certificados composta pelo certificado do dispositivo mais um ou mais certificados de autenticação. Se estiver usando um grupo de registros, você deverá usar uma cadeia de certificados.
Importante
Para a autenticação de registro X.509, o CN (nome comum da entidade) do certificado do dispositivo é usado como a ID de registro do dispositivo. A ID de registro é uma cadeia de caracteres alfanuméricos que não diferencia maiúsculas de minúsculas e caracteres especiais: '-'
, '.'
, '_'
e ':'
. O último caractere deve ser alfanumérico ou um traço ('-'
). O DPS dá suporte a IDs de registro com até 128 caracteres. No entanto, o nome comum da entidade em um certificado X.509 é limitado a 64 caracteres. Se você alterar o nome comum da entidade para o certificado do dispositivo nas etapas a seguir, verifique se ele segue esse formato.
Usar um certificado autoassinado
Para criar um certificado autoassinado a ser usado com um registro individual, navegue até um diretório em que você deseja criar seu certificado e siga estas etapas:
Execute o comando a seguir:
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 fornecida para o nome da entidade (
//CN=my-x509-device
) só é necessária para escapar a cadeia de caracteres com o Git em plataformas Windows.Quando receber a solicitação Insira a frase secreta de PEM: , use a frase secreta
1234
.Quando receber a solicitação Verificando – Insira a frase secreta de PEM: , use a frase secreta
1234
novamente.Um arquivo de certificado de chave pública (device-cert.pem) e um arquivo de chave privada (device-key.pem) devem ser gerados no diretório em que você executou o comando
openssl
.O arquivo de certificado tem seu CN (nome comum da entidade) definido como
my-x509-device
.The private key file is protected by the pass phrase:
1234
.O arquivo de certificado é codificado em Base64. Para exibir o CN (nome comum) da entidade e outras propriedades do arquivo de certificado, insira 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 estiver usando um grupo de registros, você deverá autenticar com uma cadeia de certificados. Com um registro 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 tiver terminado, você deverá ter os arquivos a seguir:
Certificado | Arquivo | Descrição |
---|---|---|
Certificado de Autoridade de Certificação raiz. | certs/azure-iot-test-only.root.ca.cert.pem | Será carregado no DPS e verificado. |
Certificado de Autoridade de Certificação intermediário | certs/azure-iot-test-only.intermediate.cert.pem | Será usado para criar um grupo de registro no DPS. |
chave privada device-01 | private/device-01.key.pem | Usado pelo dispositivo para verificar a propriedade do certificado do dispositivo durante a autenticação com o DPS. |
device-01 certificate | certs/device-01.cert.pem | Usado para criar entrada de registro individual com DPS. |
Certificado de cadeia completa device-01 | certs/device-01-full-chain.cert.pem | Apresentado pelo dispositivo para autenticar e registrar-se no DPS. |
Usar um registro individual
Para criar um registro individual a ser usado para este 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 a instância do DPS usando o certificado do 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 seu grupo de recursos e a instância do DPS.
A ID de registro é a ID de registro do dispositivo e, para registros X.509, deve corresponder ao CN (nome comum) da entidade do certificado do dispositivo.
Se você tiver seguido as instruções em Usar um certificado autoassinado, a ID de registro será my-x509-device.
Se você tiver seguido as instruções em Usar uma cadeia de certificados, a ID de registro será device-01.
O caminho do certificado é o caminho para o certificado do dispositivo.
Se você tiver seguido as instruções em Usar um certificado autoassinado, o nome do arquivo será device-cert.pem.
Se você tiver seguido as instruções em Usar uma cadeia de certificados, o nome do arquivo será certs/device-01.cert.pem.
Observação
Se estiver usando o Cloud Shell para executar comandos da CLI do Azure, você poderá usar o botão carregar para carregar o arquivo de certificado na unidade de nuvem antes de executar o comando.
Usar um grupo de registros
Para criar um grupo de registros a ser usado para este artigo, use o comando az iot dps enrollment-group create.
O comando a seguir cria uma entrada de grupo de registros com a política de alocação padrão para sua instância do DPS usando um certificado de AC 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 seu grupo de recursos e a instância do DPS.
A ID de registro é uma cadeia de caracteres alfanuméricos que não diferencia maiúsculas de minúsculas e caracteres especiais:
'-'
,'.'
,'_'
e':'
. O último caractere deve ser alfanumérico ou um traço ('-'
). Pode ser qualquer nome que você escolher usar para o grupo de registros.O caminho do certificado é o caminho para o certificado intermediário. Se você tiver seguido as instruções em Usar uma cadeia de certificados, o nome do arquivo será certs/azure-iot-test-only.intermediate.cert.pem.
Observação
Se estiver usando o Cloud Shell para executar comandos da CLI do Azure, você poderá usar o botão carregar para carregar o arquivo de certificado na unidade de nuvem antes de executar o comando.
Observação
Se preferir, você pode criar um grupo de registros com base em um certificado de autenticação que tenha sido carregado anteriormente e verificado com o DPS (consulte a próxima seção). Para fazer isso, especifique o nome do certificado com --ca-name
e omita o parâmetro --certificate-path
no comando az iot dps enrollment-group create
.
Carregar e verificar um certificado de autenticação
Se estiver usando uma cadeia de certificados para um registro individual ou um grupo de registros, você deverá carregar e verificar pelo menos um certificado na cadeia de autenticações do certificado do dispositivo no DPS.
Para um registro individual, isso pode ser qualquer certificado de autenticação na cadeia de certificados do dispositivo.
Para um grupo de registros, isso pode ser o certificado definido no grupo de registros ou qualquer certificado na sua cadeia de autenticações até e incluindo o certificado de AC 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 seu grupo de recursos e a instância do DPS.
O caminho do certificado é o caminho para o certificado do dispositivo. Para este artigo, recomendamos que você carregue o certificado de AC raiz. Se você tiver seguido as instruções em Usar uma cadeia de certificados, o nome do arquivo será 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".
Observação
Se estiver usando o Cloud Shell para executar comandos da CLI do Azure, você poderá usar o botão carregar para carregar o arquivo de certificado na unidade de nuvem antes de executar o comando.
Observação
As etapas nesta seção verificaram automaticamente o certificado no upload. Você também pode fazer a verificação manual do certificado. Para saber mais, confira Verificação manual da AC intermediária ou raiz.
Registre seu dispositivo
Chame a API REST Registrar dispositivo para provisionar seu dispositivo por meio do DPS.
Use o comando curl a seguir:
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
informa ao curl para seguir redirecionamentos HTTP.–i
informa 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 ao curl que esse é um comando HTTP PUT. Necessário para essa chamada à API.--cert [path_to_your_device_cert]
informa ao curl onde encontrar o certificado X.509 do dispositivo. Se a chave privada do dispositivo estiver protegida por uma frase secreta, você poderá adicionar a frase secreta após o caminho do certificado precedido por dois-pontos, por exemplo:--cert my-device.pem:1234
.Se você estiver usando um certificado autoassinado, o arquivo de certificado do dispositivo conterá apenas um único certificado X.509. Se você tiver seguido as instruções em Usar um certificado autoassinado, o nome do arquivo será device-cert.pem e a frase secreta da chave privada será
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 registros, 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é e incluindo um certificado verificado. Se você tiver seguido as instruções em Usar uma cadeia de certificados para criar a cadeia de certificados, o filepath será 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 ao curl onde encontrar a chave privada do dispositivo.Se você tiver seguido as instruções em Usar um certificado autoassinado, o nome do arquivo será device-key.pem. Portanto, use
--key device-cert.pem:1234
.Se você tiver seguido as instruções em Usar uma cadeia de certificados, o caminho da chave será certs/device-01-full-chain.cert.pem. Portanto, use
--cert certs/device-01-full-chain.cert.pem
.
-H 'Content-Type: application/json'
informa 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 como o valor adequado para o sistema operacional/cliente, porém, geralmente éutf-8
.-d '{"registrationId": "[registration_id]"}'
, o parâmetro–d
é o 'data' ou o corpo da mensagem que estamos postando. Deve ser JSON, na forma de '{"registrationId":"[registration_id"}'. Observe que, para o curl, ele é encapsulado em aspas simples. Caso contrário, você precisará escapar das aspas duplas no JSON. Para registro X.509, a ID de registro é o CN (nome comum da entidade) do certificado do dispositivo.Por fim, o último parâmetro é a URL para a qual postar. Para DPS "regular" (ou seja, não local), o ponto de extremidade do 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ê precisa substituir[dps_scope_id]
e[registration_id]
pelos valores apropriados.
Por exemplo:
Se você tiver seguido 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ê tiver seguido 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 uma ID de operação e um status. Nesse caso, o status é definido como assigning
. O registro de DPS é, potencialmente, uma operação de execução longa e, portanto, é feito de forma assíncrona. Normalmente, você sondará o status usando a API REST de Pesquisa de status da operação para determinar quando o dispositivo foi atribuído ou se ocorreu uma falha.
Os valores de status válidos para DPS são:
assigned
: o valor retornado 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 está desabilitado no DPS e, portanto, o dispositivo não pode ser atribuído.failed
: falha na atribuição. Haverá umerrorCode
eerrorMessage
retornados em um registroregistrationState
na resposta para indicar o que falhou.unassigned
Para chamar a API 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 e certificado e chave como fez na solicitação Registrar dispositivo. Use a ID da operação que foi retornada 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 da ID e a 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 tenha sido atribuído com êxito. Observe que a propriedade status
é assigned
e que a propriedade registrationState.assignedHub
está definida como o hub IoT em que 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 a 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 Enviar evento de dispositivo do Hub IoT para enviar telemetria para o dispositivo.
Use o comando curl a seguir:
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 ao curl que esse é um comando HTTP POST. Necessário para essa chamada à API.--cert [path_to_your_device_cert]
informa ao curl onde encontrar o certificado X.509 do dispositivo. Se a chave privada do dispositivo estiver protegida por uma frase secreta, você poderá adicionar a frase secreta após o caminho do certificado precedido por dois-pontos, por exemplo:--cert my-device.pem:1234
.Se você estiver usando um certificado autoassinado, o arquivo de certificado do dispositivo conterá apenas um único certificado X.509. Se você tiver seguido as instruções em Usar um certificado autoassinado, o nome do arquivo será device-cert.pem e a frase secreta da chave privada será
1234
. Portanto, use--cert device-cert.pem:1234
.Se você estiver usando uma cadeia de certificados, o arquivo de certificado do dispositivo deverá conter uma cadeia de certificados válida. Se você tiver seguido as instruções em Usar uma cadeia de certificados para criar a cadeia de certificados, o filepath será 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 ao curl onde encontrar a chave privada do dispositivo.Se você tiver seguido as instruções em Usar um certificado autoassinado, o nome do arquivo será device-key.pem. Portanto, use
--key device-cert.pem:1234
.Se você tiver seguido as instruções em Usar uma cadeia de certificados, o caminho da chave será 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 como o valor adequado para o sistema operacional/cliente, porém, geralmente éutf-8
.-d '{"temperature": 30}'
, o parâmetro–d
é o 'data' ou o corpo da mensagem que estamos postando. Para este artigo, estamos postando um único ponto de dados de temperatura. O tipo de conteúdo foi especificado como application/json e, portanto, para essa solicitação, o corpo é JSON. Observe que, para o curl, ele é encapsulado em aspas simples. Caso contrário, você precisará escapar das aspas duplas no JSON.O último parâmetro é a URL para a qual postar. Para a API Enviar evento 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]
pela ID do dispositivo que foi atribuída quando você registrou seu dispositivo. Para dispositivos que provisionam por meio de grupos de registros, a ID do dispositivo será a ID de registro. Para registros individuais, você pode, opcionalmente, especificar uma ID do dispositivo diferente da ID de registro na entrada de registro.
Por exemplo:
Se você tiver seguido 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ê tiver seguido 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
Próximas etapas
Para saber mais sobre o atestado com certificados X.509, confira Atestado de certificado X.509.
Para saber mais sobre como carregar e verificar certificados X.509, consulte Configurar certificados de AC verificados.