X.509-certificaten gebruiken via HTTPS zonder SDK
In dit artikel gaat u een apparaat inrichten met behulp van x.509-certificaten via HTTPS zonder een Azure IoT DPS-apparaat-SDK te gebruiken. De meeste talen bieden bibliotheken voor het verzenden van HTTP-aanvragen, maar in plaats van zich te richten op een specifieke taal, gebruikt u in dit artikel het cURL-opdrachtregelprogramma voor het verzenden en ontvangen via HTTPS.
U kunt de stappen in dit artikel volgen op een Linux- of Windows-computer. Als u op Windows-subsysteem voor Linux (WSL) of op een Linux-computer werkt, kunt u alle opdrachten op uw lokale systeem invoeren in een Bash-prompt. Als u windows gebruikt, voert u alle opdrachten op uw lokale systeem in in een GitBash-prompt.
Er zijn meerdere paden in dit artikel, afhankelijk van het type inschrijvingsvermelding en X.509-certificaten dat u wilt gebruiken. Nadat u de vereisten hebt geïnstalleerd, moet u het overzicht lezen voordat u doorgaat.
Vereisten
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Voer de stappen uit in IoT Hub Device Provisioning Service instellen met Azure Portal.
Zorg ervoor dat Python 3.7 of hoger op uw computer is geïnstalleerd. U kunt uw versie van Python controleren door deze uit te voeren
python --version
ofpython3 --version
.Als u werkt in Windows, installeert u de nieuwste versie van Git. Zorg ervoor dat Git is toegevoegd aan de omgevingsvariabelen die toegankelijk zijn voor het opdrachtvenster. Zie de Git-clienthulpprogramma's van Software Freedom Conservancy voor de nieuwste versie van
git
hulpprogramma's die u kunt installeren, waaronder Git Bash, de opdrachtregel-app die u kunt gebruiken om te communiceren met uw lokale Git-opslagplaats. In Windows voert u alle opdrachten op uw lokale systeem in in een GitBash-prompt.Azure CLI. U hebt twee opties voor het uitvoeren van Azure CLI-opdrachten in dit artikel:
- Gebruik De Azure Cloud Shell, een interactieve shell waarmee CLI-opdrachten in uw browser worden uitgevoerd. Deze optie wordt aanbevolen omdat u niets hoeft te installeren. Als u Cloud Shell voor het eerst gebruikt, meldt u zich aan bij Azure Portal. Volg de stappen in de quickstart van Cloud Shell om Cloud Shell te starten en de Bash-omgeving te selecteren.
- Voer desgewenst Azure CLI uit op uw lokale computer. Als Azure CLI al is geïnstalleerd, voert u een
az upgrade
upgrade uit van de CLI en extensies naar de huidige versie. Zie Azure CLI installeren om Azure CLI te installeren.
Als u in een Linux- of WSL-omgeving werkt, opent u een Bash-prompt om opdrachten lokaal uit te voeren. Als u in een Windows-omgeving werkt, opent u een GitBash-prompt.
Overzicht
In dit artikel worden drie scenario's beschreven. De eerste stappen die u uitvoert, zijn voor elk scenario anders. Als u het volgende wilt doen:
Voer de stappen in deze secties uit via een afzonderlijke inschrijving met behulp van een zelfondertekend certificaat:
- Gebruik een zelfondertekend certificaat om een zelfondertekend certificaat te maken.
- Gebruik een afzonderlijke inschrijving om een afzonderlijke inschrijving te maken.
Voer de stappen in deze secties uit via een afzonderlijke inschrijving met behulp van een certificaatketen:
- Gebruik een certificaatketen om een certificaatketen te maken.
- Gebruik een afzonderlijke inschrijving om een afzonderlijke inschrijving te maken.
- Upload en verifieer een handtekeningcertificaat om uw basis-CA-certificaat te uploaden en te verifiëren.
Voer de stappen in deze secties uit door een inschrijvingsgroep in te richten:
- Gebruik een certificaatketen om een certificaatketen te maken.
- Gebruik een inschrijvingsgroep om een inschrijvingsgroep te maken.
- Upload en verifieer een handtekeningcertificaat om uw basis-CA-certificaat te uploaden en te verifiëren.
Zodra u de stappen voor het gekozen scenario hebt voltooid, kunt u doorgaan met het registreren van uw apparaat en een telemetriebericht verzenden.
Een apparaatcertificaat maken
Voor dit artikel gebruikt u een X.509-certificaat om te verifiëren bij DPS met behulp van een afzonderlijke inschrijving of een inschrijvingsgroep.
Als u een afzonderlijke inschrijving gebruikt, kunt u een zelfondertekend X.509-certificaat of een certificaatketen gebruiken die bestaat uit het apparaatcertificaat plus een of meer handtekeningcertificaten. Als u een inschrijvingsgroep gebruikt, moet u een certificaatketen gebruiken.
Belangrijk
Voor X.509-registratieverificatie wordt de algemene naam van het onderwerp (CN) van het apparaatcertificaat gebruikt als registratie-id voor het apparaat. De registratie-id is een niet-hoofdlettergevoelige tekenreeks van alfanumerieke tekens plus de speciale tekens: '-'
, '.'
, '_'
, . ':'
Het laatste teken moet alfanumeriek of streepje ('-'
) zijn. DPS ondersteunt registratie-id's van maximaal 128 tekens; De algemene naam van het onderwerp van een X.509-certificaat is echter beperkt tot 64 tekens. Als u de algemene naam van het onderwerp voor uw apparaatcertificaat in de volgende stappen wijzigt, moet u ervoor zorgen dat het voldoet aan deze indeling.
Een zelfondertekend certificaat gebruiken
Als u een zelfondertekend certificaat wilt maken voor gebruik met een afzonderlijke inschrijving, gaat u naar een map waarin u uw certificaat wilt maken en voert u de volgende stappen uit:
Voer de volgende opdracht uit:
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"
Belangrijk
De extra slash die wordt opgegeven voor de onderwerpnaam (
//CN=my-x509-device
) is alleen vereist om de tekenreeks te escapen met Git op Windows-platforms.Wanneer u wordt gevraagd om PEM-wachtwoordzin in te voeren:, gebruikt u de wachtwoordzin
1234
.Wanneer u wordt gevraagd te verifiëren - VOER PEM-wachtwoordzin in:, gebruikt u de wachtwoordzin
1234
opnieuw.Er moet nu een certificaatbestand met een openbare sleutel (device-cert.pem) en een persoonlijk sleutelbestand (device-key.pem) worden gegenereerd in de map waarin u de
openssl
opdracht hebt uitgevoerd.Het certificaatbestand heeft de algemene naam van het onderwerp (CN) ingesteld op
my-x509-device
.Het bestand met de persoonlijke sleutel wordt beveiligd door de wachtwoordzin:
1234
.Het certificaatbestand is Base64 gecodeerd. Als u de algemene naam van het onderwerp (CN) en andere eigenschappen van het certificaatbestand wilt weergeven, voert u de volgende opdracht in:
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
Een certificaatketen gebruiken
Als u een inschrijvingsgroep gebruikt, moet u zich verifiëren met een certificaatketen. Met een afzonderlijke inschrijving kunt u een certificaatketen of een zelfondertekend certificaat gebruiken.
Als u een certificaatketen wilt maken, volgt u de instructies in Een X.509-certificaatketen maken. U hebt slechts één apparaat nodig voor dit artikel, zodat u kunt stoppen nadat u de persoonlijke sleutel en certificaatketen voor het eerste apparaat hebt gemaakt.
Wanneer u klaar bent, moet u de volgende bestanden hebben:
Certificaat | Bestand | Beschrijving |
---|---|---|
basis-CA-certificaat. | certs/azure-iot-test-only.root.ca.cert.pem | Wordt geüpload naar DPS en geverifieerd. |
tussenliggend CA-certificaat | certs/azure-iot-test-only.intermediate.cert.pem | Wordt gebruikt voor het maken van een inschrijvingsgroep in DPS. |
persoonlijke sleutel apparaat-01 | private/device-01.key.pem | Wordt door het apparaat gebruikt om het eigendom van het apparaatcertificaat te verifiëren tijdens verificatie met DPS. |
device-01-certificaat | certs/device-01.cert.pem | Wordt gebruikt voor het maken van afzonderlijke inschrijvingsvermeldingen met DPS. |
apparaat-01-certificaat voor volledige keten | certs/device-01-full-chain.cert.pem | Aangeboden door het apparaat voor verificatie en registratie bij DPS. |
Een afzonderlijke inschrijving gebruiken
Als u een afzonderlijke inschrijving wilt maken die u voor dit artikel wilt gebruiken, gebruikt u de opdracht az iot dps enrollment create .
Met de volgende opdracht maakt u een afzonderlijke inschrijvingsvermelding met het standaardtoewijzingsbeleid voor uw DPS-exemplaar met behulp van het apparaatcertificaat dat u opgeeft.
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}
Vervang de naam van uw resourcegroep en DPS-exemplaar.
De inschrijvings-id is de registratie-id voor uw apparaat en moet voor X.509-inschrijvingen overeenkomen met de algemene naam van het onderwerp (CN) van het apparaatcertificaat.
Als u de instructies in Een zelfondertekend certificaat hebt gevolgd, is de inschrijvings-id mijn-x509-apparaat.
Als u de instructies in Een certificaatketen gebruiken hebt gevolgd, is de inschrijvings-id apparaat-01.
Het certificaatpad is het pad naar uw apparaatcertificaat.
Als u de instructies in Gebruik van een zelfondertekend certificaat hebt gevolgd, is de bestandsnaam device-cert.pem.
Als u de instructies in Een certificaatketen gebruiken hebt gevolgd, is de bestandsnaam certificaats/device-01.cert.pem.
Notitie
Als u Cloud Shell gebruikt om Azure CLI-opdrachten uit te voeren, kunt u de knop Uploaden gebruiken om uw certificaatbestand te uploaden naar uw cloudstation voordat u de opdracht uitvoert.
Een inschrijvingsgroep gebruiken
Als u een inschrijvingsgroep wilt maken die u voor dit artikel wilt gebruiken, gebruikt u de opdracht az iot dps enrollment-group create .
Met de volgende opdracht maakt u een inschrijvingsgroepvermelding met het standaardtoewijzingsbeleid voor uw DPS-exemplaar met behulp van een tussenliggend CA-certificaat:
az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
Vervang de naam van uw resourcegroep en DPS-exemplaar.
De inschrijvings-id is een niet-hoofdlettergevoelige tekenreeks met alfanumerieke tekens plus de speciale tekens:
'-'
,'.'
,'_'
, .':'
Het laatste teken moet alfanumeriek of streepje ('-'
) zijn. Dit kan elke naam zijn die u wilt gebruiken voor de inschrijvingsgroep.Het certificaatpad is het pad naar uw tussenliggende certificaat. Als u de instructies in Een certificaatketen gebruiken hebt gevolgd, is de bestandsnaam certificaats/azure-iot-test-only.intermediate.cert.pem.
Notitie
Als u Cloud Shell gebruikt om Azure CLI-opdrachten uit te voeren, kunt u de knop Uploaden gebruiken om uw certificaatbestand te uploaden naar uw cloudstation voordat u de opdracht uitvoert.
Notitie
Als u wilt, kunt u een inschrijvingsgroep maken op basis van een handtekeningcertificaat dat eerder is geüpload en geverifieerd met DPS (zie de volgende sectie). Hiervoor geeft u de certificaatnaam op met de --ca-name
parameter en laat u deze --certificate-path
weg in de az iot dps enrollment-group create
opdracht.
Een handtekeningcertificaat uploaden en verifiëren
Als u een certificaatketen gebruikt voor een afzonderlijke inschrijving of een inschrijvingsgroep, moet u ten minste één certificaat in de ondertekeningsketen van het apparaatcertificaat uploaden en controleren naar DPS.
Voor een afzonderlijke inschrijving kan dit elk handtekeningcertificaat in de certificaatketen van het apparaat zijn.
Voor een inschrijvingsgroep kan dit het certificaat zijn dat is ingesteld op de inschrijvingsgroep of een certificaat in de registratieketen tot en met het basis-CA-certificaat.
Als u uw certificaat wilt uploaden en verifiëren, gebruikt u de opdracht 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
Vervang de naam van uw resourcegroep en DPS-exemplaar.
Het certificaatpad is het pad naar uw handtekeningcertificaat. Voor dit artikel raden we u aan het basis-CA-certificaat te uploaden. Als u de instructies in Een certificaatketen gebruiken hebt gevolgd, is de bestandsnaam certificaats/azure-iot-test-only.root.ca.cert.pem.
De certificaatnaam mag alleen alfanumerieke tekens of de volgende speciale tekens bevatten:
-._
Er is geen witruimte toegestaan. Bijvoorbeeld 'azure-iot-test-only-root'.
Notitie
Als u Cloud Shell gebruikt om Azure CLI-opdrachten uit te voeren, kunt u de knop Uploaden gebruiken om uw certificaatbestand te uploaden naar uw cloudstation voordat u de opdracht uitvoert.
Notitie
De stappen in deze sectie hebben het certificaat automatisch geverifieerd bij het uploaden. U kunt ook handmatige verificatie van het certificaat uitvoeren. Zie Handmatige verificatie van tussenliggende of basis-CA voor meer informatie.
Uw apparaat registreren
U roept de REST API apparaat registreren aan om uw apparaat in te richten via DPS.
Gebruik de volgende curl-opdracht:
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
Hierin:
-L
vertelt curl om HTTP-omleidingen te volgen.–i
vertelt curl protocolheaders in uitvoer op te nemen. Deze headers zijn niet strikt noodzakelijk, maar kunnen nuttig zijn.-X PUT
vertelt curl dat dit een HTTP PUT-opdracht is. Vereist voor deze API-aanroep.--cert [path_to_your_device_cert]
vertelt curl waar het X.509-certificaat van uw apparaat moet worden gevonden. Als de persoonlijke sleutel van uw apparaat wordt beveiligd door een wachtwoordzin, kunt u de wachtwoordzin toevoegen nadat het certificaatpad voorafgegaan is door een dubbele punt, bijvoorbeeld:--cert my-device.pem:1234
.Als u een zelfondertekend certificaat gebruikt, bevat uw apparaatcertificaatbestand slechts één X.509-certificaat. Als u de instructies in Gebruik een zelfondertekend certificaat hebt gevolgd, is de bestandsnaam device-cert.pem en is de wachtwoordzin
1234
voor de persoonlijke sleutel , dus gebruik--cert device-cert.pem:1234
.Als u bijvoorbeeld een certificaatketen gebruikt bij het verifiëren via een inschrijvingsgroep, moet het certificaatbestand van uw apparaat een geldige certificaatketen bevatten. De certificaatketen moet het apparaatcertificaat en alle ondertekeningscertificaten bevatten tot en met een geverifieerd certificaat. Als u de instructies in Een certificaatketen gebruiken om de certificaatketen te maken hebt gevolgd, is het bestandspad certificaats/device-01-full-chain.cert.pem, dus gebruik
--cert certs/device-01-full-chain.cert.pem
.
--key [path_to_your_device_private_key]
vertelt curl waar de persoonlijke sleutel van uw apparaat moet worden gevonden.Als u de instructies in Gebruik een zelfondertekend certificaat hebt gevolgd, is de bestandsnaam device-key.pem, dus gebruik
--key device-cert.pem:1234
.Als u de instructies in Een certificaatketen gebruiken hebt gevolgd, is het sleutelpad certificaats/device-01-full-chain.cert.pem, dus gebruik
--cert certs/device-01-full-chain.cert.pem
.
-H 'Content-Type: application/json'
vertelt DPS dat we JSON-inhoud plaatsen en moeten 'application/json' zijn-H 'Content-Encoding: utf-8'
vertelt DPS dat de codering die we gebruiken voor de berichttekst. Ingesteld op de juiste waarde voor uw besturingssysteem/client; het is echter over het algemeenutf-8
.-d '{"registrationId": "[registration_id]"}'
, de–d
parameter is de 'gegevens' of hoofdtekst van het bericht dat we plaatsen. Dit moet JSON zijn, in de vorm van {"registrationId":"[registration_id"}. Houd er rekening mee dat het voor curl is verpakt in enkele aanhalingstekens; anders moet u de dubbele aanhalingstekens in de JSON ontsnappen. Voor X.509-inschrijving is de registratie-id de algemene naam van het onderwerp (CN) van uw apparaatcertificaat.Ten slotte is de laatste parameter de URL waarnaar moet worden geplaatst. Voor 'reguliere' (dat wil niet on-premises) DPS, wordt het globale DPS-eindpunt gebruikt global.azure-devices-provisioning.net wordt gebruikt:
https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31
. Houd er rekening mee dat u de juiste waarden moet vervangen[dps_scope_id]
en[registration_id]
vervangen.
Voorbeeld:
Als u de instructies in Een zelfondertekend certificaat hebt gevolgd:
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
Als u de instructies in Use a certificate chain hebt gevolgd:
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
Een geslaagde aanroep heeft een antwoord dat lijkt op het volgende:
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"}
Het antwoord bevat een bewerkings-id en een status. In dit geval is de status ingesteld op assigning
. DPS-inschrijving is mogelijk een langdurige bewerking, dus deze wordt asynchroon uitgevoerd. Normaal gesproken peilt u naar status met behulp van de REST API voor het opzoeken van bewerkingsstatussen om te bepalen wanneer uw apparaat is toegewezen of of er een fout is opgetreden.
De geldige statuswaarden voor DPS zijn:
assigned
: de retourwaarde van de statusoproep geeft aan aan aan welke IoT Hub het apparaat is toegewezen.assigning
: de bewerking wordt nog steeds uitgevoerd.disabled
: de registratierecord is uitgeschakeld in DPS, zodat het apparaat niet kan worden toegewezen.failed
: de toewijzing is mislukt. Er wordt eenerrorCode
enerrorMessage
geretourneerd in eenregistrationState
record in het antwoord om aan te geven wat er is mislukt.unassigned
Gebruik de volgende curl-opdracht om de Lookup-API voor bewerkingsstatus aan te roepen:
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
U gebruikt hetzelfde id-bereik, de registratie-id en het certificaat en de sleutel die u hebt gedaan in de aanvraag Apparaat registreren. Gebruik de bewerkings-id die is geretourneerd in het antwoord Apparaat registreren.
De volgende opdracht is bijvoorbeeld voor het zelfondertekende certificaat dat is gemaakt in Een zelfondertekend certificaat gebruiken. (U moet het id-bereik en de bewerkings-id wijzigen.)
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
In de volgende uitvoer ziet u het antwoord voor een apparaat dat is toegewezen. U ziet dat de status
eigenschap is assigned
en dat de registrationState.assignedHub
eigenschap is ingesteld op de IoT-hub waar het apparaat is ingericht.
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="
}
}
Noteer de apparaat-id en de toegewezen IoT-hub. U gebruikt ze om een telemetriebericht te verzenden in de volgende sectie.
Een telemetriebericht verzenden
U roept de REST API voor Apparaat gebeurtenis verzenden van IoT Hub aan om telemetrie naar het apparaat te verzenden.
Gebruik de volgende curl-opdracht:
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
Hierin:
-X POST
vertelt curl dat dit een HTTP POST-opdracht is. Vereist voor deze API-aanroep.--cert [path_to_your_device_cert]
vertelt curl waar het X.509-certificaat van uw apparaat moet worden gevonden. Als de persoonlijke sleutel van uw apparaat wordt beveiligd door een wachtwoordzin, kunt u de wachtwoordzin toevoegen nadat het certificaatpad voorafgegaan is door een dubbele punt, bijvoorbeeld:--cert my-device.pem:1234
.Als u een zelfondertekend certificaat gebruikt, bevat uw apparaatcertificaatbestand slechts één X.509-certificaat. Als u de instructies in Gebruik een zelfondertekend certificaat hebt gevolgd, is de bestandsnaam device-cert.pem en is de wachtwoordzin
1234
voor de persoonlijke sleutel , dus gebruik--cert device-cert.pem:1234
.Als u een certificaatketen gebruikt, moet het certificaatbestand van het apparaat een geldige certificaatketen bevatten. Als u de instructies in Een certificaatketen gebruiken om de certificaatketen te maken hebt gevolgd, is het bestandspad certificaats/device-01-full-chain.cert.pem, dus gebruik
--cert certs/device-01-full-chain.cert.pem
.
--key [path_to_your_device_private_key]
vertelt curl waar de persoonlijke sleutel van uw apparaat moet worden gevonden.Als u de instructies in Gebruik een zelfondertekend certificaat hebt gevolgd, is de bestandsnaam device-key.pem, dus gebruik
--key device-cert.pem:1234
.Als u de instructies in Een certificaatketen gebruiken hebt gevolgd, is het sleutelpad certificaats/device-01-full-chain.cert.pem, dus gebruik
--cert certs/device-01-full-chain.cert.pem
.
-H 'Content-Type: application/json'
vertelt IoT Hub dat we JSON-inhoud plaatsen en moet 'application/json' zijn.-H 'Content-Encoding: utf-8'
vertelt IoT Hub over de codering die we gebruiken voor de berichttekst. Ingesteld op de juiste waarde voor uw besturingssysteem/client; het is echter over het algemeenutf-8
.-d '{"temperature": 30}'
, de–d
parameter is de 'gegevens' of hoofdtekst van het bericht dat we plaatsen. Voor dit artikel plaatsen we één temperatuurgegevenspunt. Het inhoudstype is opgegeven als application/json, dus voor deze aanvraag is de hoofdtekst JSON. Houd er rekening mee dat het voor curl is verpakt in enkele aanhalingstekens; anders moet u de dubbele aanhalingstekens in de JSON ontsnappen.De laatste parameter is de URL waarnaar moet worden geplaatst. Voor de Gebeurtenis-API apparaat verzenden is de URL:
https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13
.Vervang
[assigned_iot_hub_name]
door de naam van de IoT-hub waaraan uw apparaat is toegewezen.Vervang
[device_id]
door de apparaat-id die is toegewezen toen u uw apparaat registreerde. Voor apparaten die worden ingericht via inschrijvingsgroepen, is de apparaat-id de registratie-id. Voor afzonderlijke inschrijvingen kunt u desgewenst een apparaat-id opgeven die verschilt van de registratie-id in de inschrijvingsvermelding.
Voorbeeld:
Als u de instructies in Een zelfondertekend certificaat hebt gevolgd:
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
Als u de instructies in Use a certificate chain hebt gevolgd:
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
Een geslaagde aanroep heeft een antwoord dat lijkt op het volgende:
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