Come usare i certificati X.509 su HTTPS senza un SDK
In questo articolo di procedura si eseguirà il provisioning di un dispositivo usando certificati x.509 su HTTPS senza usare un SDK per dispositivi DPS IoT di Azure. La maggior parte dei linguaggi fornisce librerie per inviare richieste HTTP, ma, invece di concentrarsi su un linguaggio specifico, in questo articolo si userà lo strumento da riga di comando cURL per inviare e ricevere tramite HTTPS.
È possibile seguire la procedura descritta in questo articolo in un computer Linux o Windows. Se si esegue in sottosistema Windows per Linux (WSL) o in esecuzione in un computer Linux, è possibile immettere tutti i comandi nel sistema locale in un prompt di Bash. Se si esegue in Windows, immettere tutti i comandi nel sistema locale in un prompt di GitBash.
Esistono più percorsi in questo articolo a seconda del tipo di voce di registrazione e dei certificati X.509 che si sceglie di usare. Dopo aver installato i prerequisiti, assicurarsi di leggere la panoramica prima di procedere.
Prerequisiti
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Completare la procedura descritta in Configurare il servizio Device Provisioning in hub IoT con il portale di Azure.
Assicurarsi di avere installato Python 3.7 o versione successiva nel computer. È possibile controllare la versione di Python eseguendo
python --version
opython3 --version
.Se si esegue in Windows, installare la versione più recente di Git. Verificare che Git venga aggiunto alle variabili di ambiente accessibili alla finestra di comando. Vedere gli strumenti client Git di Software Freedom Conservancy per la versione più recente degli strumenti
git
da installare, tra cui Git Bash, l'app da riga di comando che è possibile usare per interagire con il repository Git locale. In Windows immettere tutti i comandi nel sistema locale in un prompt di GitBash.Interfaccia della riga di comando di Azure. In questo articolo sono disponibili due opzioni per l'esecuzione dei comandi dell'interfaccia della riga di comando di Azure:
- Usare Azure Cloud Shell, una shell interattiva che esegue i comandi dell'interfaccia della riga di comando nel browser. Questa opzione è consigliata perché non è necessario installare nulla. Se si usa Cloud Shell per la prima volta, accedere al portale di Azure. Seguire la procedura descritta in Avvio rapido di Cloud Shell per Avviare Cloud Shell e selezionare l'ambiente Bash.
- Facoltativamente, eseguire l'interfaccia della riga di comando di Azure nel computer locale. Se l'interfaccia della riga di comando di Azure è già installata, eseguire
az upgrade
per aggiornare l'interfaccia della riga di comando e le estensioni alla versione corrente. Per installare l'interfaccia della riga di comando di Azure, vedere Installare l'interfaccia della riga di comando di Azure.
Se si esegue in un ambiente Linux o WSL, aprire un prompt di Bash per eseguire i comandi in locale. Se si esegue in un ambiente Windows, aprire un prompt di GitBash.
Panoramica
In questo articolo sono illustrati tre scenari e i passaggi iniziali che verranno eseguiti saranno diversi per ognuno di essi. Se si vuole:
Eseguire il provisioning tramite una registrazione singola usando un certificato autofirmato, seguire la procedura descritta in queste sezioni:
- Usare un certificato autofirmato per creare un certificato autofirmato.
- Usare una registrazione singola per creare una registrazione singola.
Eseguire il provisioning tramite una registrazione singola usando una catena di certificati, seguire la procedura descritta in queste sezioni:
- Usare una catena di certificati per creare una catena di certificati.
- Usare una registrazione singola per creare una registrazione singola.
- Caricare e verificare un certificato di firma per caricare e verificare il certificato CA radice.
Eseguire il provisioning tramite un gruppo di registrazione, seguire la procedura descritta in queste sezioni:
- Usare una catena di certificati per creare una catena di certificati.
- Usare un gruppo di registrazione per creare un gruppo di registrazione.
- Caricare e verificare un certificato di firma per caricare e verificare il certificato CA radice.
Dopo aver completato i passaggi per lo scenario scelto, è possibile continuare a Registrare il dispositivo e Inviare un messaggio di telemetria.
Creare un certificato del dispositivo
Per questo articolo si userà un certificato X.509 per eseguire l'autenticazione con DPS usando una registrazione singola o un gruppo di registrazione.
Se si usa una registrazione singola, è possibile usare un certificato X.509 autofirmato o una catena di certificati composta dal certificato del dispositivo più uno o più certificati di firma. Se si usa un gruppo di registrazione, è necessario usare una catena di certificati.
Importante
Per l'autenticazione di registrazione X.509, il nome comune soggetto del certificato del dispositivo viene usato come ID di registrazione per il dispositivo. L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole di caratteri alfanumerici più i caratteri speciali: '-'
, '.'
'_'
, , ':'
. L'ultimo carattere deve essere alfanumerico o un trattino ('-'
). DPS supporta ID di registrazione fino a 128 caratteri; Tuttavia, il nome comune del soggetto di un certificato X.509 è limitato a 64 caratteri. Se si modifica il nome comune dell'oggetto per il certificato del dispositivo nei passaggi seguenti, assicurarsi che sia conforme a questo formato.
Usare un certificato autofirmato
Per creare un certificato autofirmato da usare con una registrazione singola, passare a una directory in cui si vuole creare il certificato e seguire questa procedura:
Esegui questo 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
La barra aggiuntiva specificata per il nome soggetto (
//CN=my-x509-device
) è necessaria solo per eseguire l'escape della stringa con Git nelle piattaforme Windows.Quando viene chiesto di immettere la pass phrase PEM: usare la pass phrase
1234
.Quando viene chiesto Verifica : immettere pem pass phrase:, usare di nuovo la pass phrase
1234
.Un file di certificato di chiave pubblica (device-cert.pem) e un file di chiave privata (device-key.pem) devono ora essere generati nella directory in cui è stato eseguito il
openssl
comando.Il nome comune del soggetto del file di certificato è impostato su
my-x509-device
.Il file di chiave privata è protetto dalla pass phrase:
1234
.Il file di certificato è codificato in Base64. Per visualizzare il nome comune del soggetto (CN) e altre proprietà del file di certificato, immettere il comando seguente:
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
Usare una catena di certificati
Se si usa un gruppo di registrazione, è necessario eseguire l'autenticazione con una catena di certificati. Con una registrazione singola è possibile usare una catena di certificati o un certificato autofirmato.
Per creare una catena di certificati, seguire le istruzioni riportate in Creare una catena di certificati X.509. È necessario un solo dispositivo per questo articolo, quindi è possibile arrestarsi dopo aver creato la chiave privata e la catena di certificati per il primo dispositivo.
Al termine, dovrebbero essere presenti i file seguenti:
Certificate | File | Descrizione |
---|---|---|
certificato CA radice. | certs/azure-iot-test-only.root.ca.cert.pem | Verrà caricato in DPS e verificato. |
Certificato CA intermedio | certs/azure-iot-test-only.intermediate.cert.pem | Verrà usato per creare un gruppo di registrazione nel servizio Device Provisioning. |
chiave privata device-01 | private/device-01.key.pem | Usato dal dispositivo per verificare la proprietà del certificato del dispositivo durante l'autenticazione con DPS. |
certificato device-01 | certs/device-01.cert.pem | Usato per creare una singola voce di registrazione con DPS. |
certificato della catena completa device-01 | certs/device-01-full-chain.cert.pem | Presentato dal dispositivo per l'autenticazione e la registrazione con DPS. |
Usare una registrazione singola
Per creare una registrazione singola da usare per questo articolo, usare il comando az iot dps enrollment create .
Il comando seguente crea una singola voce di registrazione con i criteri di allocazione predefiniti per l'istanza del servizio Device Provisioning usando il certificato del dispositivo specificato.
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}
Sostituire il nome del gruppo di risorse e dell'istanza del servizio Device Provisioning.
L'ID registrazione è l'ID di registrazione per il dispositivo e, per le registrazioni X.509, deve corrispondere al nome comune soggetto (CN) del certificato del dispositivo.
Se sono state seguite le istruzioni in Usare un certificato autofirmato, l'ID di registrazione è my-x509-device.
Se sono state seguite le istruzioni in Usare una catena di certificati, l'ID di registrazione è device-01.
Il percorso del certificato è il percorso del certificato del dispositivo.
Se sono state seguite le istruzioni in Usare un certificato autofirmato, il nome file è device-cert.pem.
Se sono state seguite le istruzioni in Usare una catena di certificati, il nome file è certs/device-01.cert.pem.
Nota
Se si usa Cloud Shell per eseguire i comandi dell'interfaccia della riga di comando di Azure, è possibile usare il pulsante di caricamento per caricare il file del certificato nell'unità cloud prima di eseguire il comando.
Usare un gruppo di registrazione
Per creare un gruppo di registrazione da usare per questo articolo, usare il comando az iot dps enrollment-group create .
Il comando seguente crea una voce del gruppo di registrazione con i criteri di allocazione predefiniti per l'istanza del servizio Device Provisioning usando un certificato ca intermedio:
az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
Sostituire il nome del gruppo di risorse e dell'istanza del servizio Device Provisioning.
L'ID registrazione è una stringa senza distinzione tra maiuscole e minuscole di caratteri alfanumerici più i caratteri speciali:
'-'
,'.'
,'_'
,':'
. L'ultimo carattere deve essere alfanumerico o un trattino ('-'
). Può essere qualsiasi nome che si sceglie di usare per il gruppo di registrazione.Il percorso del certificato è il percorso del certificato intermedio. Se sono state seguite le istruzioni in Usare una catena di certificati, il nome file è certs/azure-iot-test-only.intermediate.cert.pem.
Nota
Se si usa Cloud Shell per eseguire i comandi dell'interfaccia della riga di comando di Azure, è possibile usare il pulsante di caricamento per caricare il file del certificato nell'unità cloud prima di eseguire il comando.
Nota
Se si preferisce, è possibile creare un gruppo di registrazioni in base a un certificato di firma caricato e verificato in precedenza con DPS (vedere la sezione successiva). A tale scopo, specificare il nome del certificato con --ca-name
e omettere il --certificate-path
parametro nel az iot dps enrollment-group create
comando .
Caricare e verificare un certificato di firma
Se si usa una catena di certificati per una registrazione singola o un gruppo di registrazione, è necessario caricare e verificare almeno un certificato nella catena di firma del certificato del dispositivo nel servizio Device Provisioning.
Per una registrazione singola, questo può essere qualsiasi certificato di firma nella catena di certificati del dispositivo.
Per un gruppo di registrazioni, questo può essere il certificato impostato nel gruppo di registrazione o qualsiasi certificato nella catena di firma fino a e incluso il certificato CA radice.
Per caricare e verificare il certificato, usare il 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
Sostituire il nome del gruppo di risorse e dell'istanza del servizio Device Provisioning.
Il percorso del certificato è il percorso del certificato di firma. Per questo articolo, è consigliabile caricare il certificato CA radice. Se sono state seguite le istruzioni in Usare una catena di certificati, il nome file è certs/azure-iot-test-only.root.ca.cert.pem.
Il nome del certificato può contenere solo caratteri alfanumerici o i caratteri speciali seguenti:
-._
. Non sono consentiti spazi vuoti. Ad esempio, "azure-iot-test-only-root".
Nota
Se si usa Cloud Shell per eseguire i comandi dell'interfaccia della riga di comando di Azure, è possibile usare il pulsante di caricamento per caricare il file del certificato nell'unità cloud prima di eseguire il comando.
Nota
I passaggi descritti in questa sezione hanno verificato automaticamente il certificato al caricamento. È anche possibile eseguire la verifica manuale del certificato. Per altre informazioni, vedere Verifica manuale della CA intermedia o radice.
Registrare il dispositivo
Chiamare l'API REST Registra dispositivo per effettuare il provisioning del dispositivo tramite DPS.
Usare il comando curl seguente:
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
Dove:
-L
indica a curl di seguire i reindirizzamenti HTTP.–i
indica a curl di includere le intestazioni del protocollo nell'output. Queste intestazioni non sono strettamente necessarie, ma possono essere utili.-X PUT
indica a curl che si tratta di un comando HTTP PUT. Obbligatorio per questa chiamata API.--cert [path_to_your_device_cert]
indica a curl dove trovare il certificato X.509 del dispositivo. Se la chiave privata del dispositivo è protetta da una pass phrase, è possibile aggiungere la pass phrase dopo il percorso del certificato preceduto da due punti, ad esempio:--cert my-device.pem:1234
.Se si usa un certificato autofirmato, il file del certificato del dispositivo conterrà solo un singolo certificato X.509. Se sono state seguite le istruzioni in Usare un certificato autofirmato, il nome file è device-cert.pem e la pass phrase della chiave privata è
1234
, quindi usare--cert device-cert.pem:1234
.Se si usa una catena di certificati, ad esempio quando si esegue l'autenticazione tramite un gruppo di registrazione, il file del certificato del dispositivo deve contenere una catena di certificati valida. La catena di certificati deve includere il certificato del dispositivo e tutti i certificati di firma fino a e includere un certificato verificato. Se sono state seguite le istruzioni in Usare una catena di certificati per creare la catena di certificati, il percorso file è certs/device-01-full-chain.cert.pem, quindi usare
--cert certs/device-01-full-chain.cert.pem
.
--key [path_to_your_device_private_key]
indica a curl dove trovare la chiave privata del dispositivo.Se sono state seguite le istruzioni in Usare un certificato autofirmato, il nome file è device-key.pem, quindi usare
--key device-cert.pem:1234
.Se sono state seguite le istruzioni in Usare una catena di certificati, il percorso della chiave è certs/device-01-full-chain.cert.pem, quindi usare
--cert certs/device-01-full-chain.cert.pem
.
-H 'Content-Type: application/json'
indica che il servizio Device Provisioning sta pubblicando contenuto JSON e deve essere "application/json"-H 'Content-Encoding: utf-8'
indica al servizio Device Provisioning la codifica usata per il corpo del messaggio. Impostare sul valore appropriato per il sistema operativo/client; tuttavia, è in genereutf-8
.-d '{"registrationId": "[registration_id]"}'
, il–d
parametro è il corpo o i dati del messaggio che si sta pubblicando. Deve essere JSON, sotto forma di '{"registrationId":"[registration_id"}'. Si noti che per curl, viene racchiuso tra virgolette singole; in caso contrario, è necessario eseguire l'escape delle virgolette doppie nel codice JSON. Per la registrazione X.509, l'ID registrazione è il nome comune soggetto (CN) del certificato del dispositivo.Infine, l'ultimo parametro è l'URL a cui inviare il post. Per il servizio Device Provisioning "regolare", ovvero non in locale, viene usato l'endpoint dps globale global.azure-devices-provisioning.net:
https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31
. Si noti che è necessario sostituire[dps_scope_id]
e[registration_id]
con i valori appropriati.
Ad esempio:
Se sono state seguite le istruzioni in Usare un certificato autofirmato:
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 sono state seguite le istruzioni in Usare una catena di certificati:
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
Una chiamata con esito positivo avrà una risposta simile alla seguente:
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"}
La risposta contiene un ID operazione e uno stato. In questo caso, lo stato è impostato su assigning
. La registrazione dps è, potenzialmente, un'operazione a esecuzione prolungata, quindi viene eseguita in modo asincrono. In genere, si eseguirà il polling dello stato usando l'API REST Ricerca stato operazione per determinare quando il dispositivo è stato assegnato o se si è verificato un errore.
I valori di stato validi per DPS sono:
assigned
: il valore restituito dalla chiamata di stato indicherà a quale hub IoT il dispositivo è stato assegnato.assigning
: l'operazione è ancora in esecuzione.disabled
: il record di registrazione è disabilitato in DPS, quindi il dispositivo non può essere assegnato.failed
: l'assegnazione non è riuscita. Nella risposta sarà presente un oggettoerrorCode
eerrorMessage
restituito in unregistrationState
record per indicare l'errore.unassigned
Per chiamare l'API Ricerca stato operazione, usare il comando curl seguente:
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
Si userà lo stesso ambito ID, ID di registrazione e certificato e chiave come è stato fatto nella richiesta Registra dispositivo . Usare l'ID operazione restituito nella risposta Registra dispositivo .
Ad esempio, il comando seguente è relativo al certificato autofirmato creato in Usare un certificato autofirmato. È necessario modificare l'ambito ID e l'ID operazione.
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
L'output seguente mostra la risposta per un dispositivo assegnato correttamente. Si noti che la status
proprietà è assigned
e che la registrationState.assignedHub
proprietà è impostata sull'hub IoT in cui è stato effettuato il provisioning del dispositivo.
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="
}
}
Prendere nota dell'ID dispositivo e dell'hub IoT assegnato. Verranno usati per inviare un messaggio di telemetria nella sezione successiva.
Inviare un messaggio di telemetria
Chiamare l'API REST invia evento dispositivo hub IoT per inviare dati di telemetria al dispositivo.
Usare il comando curl seguente:
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
Dove:
-X POST
indica a curl che si tratta di un comando HTTP POST. Obbligatorio per questa chiamata API.--cert [path_to_your_device_cert]
indica a curl dove trovare il certificato X.509 del dispositivo. Se la chiave privata del dispositivo è protetta da una pass phrase, è possibile aggiungere la pass phrase dopo il percorso del certificato preceduto da due punti, ad esempio:--cert my-device.pem:1234
.Se si usa un certificato autofirmato, il file del certificato del dispositivo conterrà solo un singolo certificato X.509. Se sono state seguite le istruzioni in Usare un certificato autofirmato, il nome file è device-cert.pem e la pass phrase della chiave privata è
1234
, quindi usare--cert device-cert.pem:1234
.Se si usa una catena di certificati, il file del certificato del dispositivo deve contenere una catena di certificati valida. Se sono state seguite le istruzioni in Usare una catena di certificati per creare la catena di certificati, il percorso file è certs/device-01-full-chain.cert.pem, quindi usare
--cert certs/device-01-full-chain.cert.pem
.
--key [path_to_your_device_private_key]
indica a curl dove trovare la chiave privata del dispositivo.Se sono state seguite le istruzioni in Usare un certificato autofirmato, il nome file è device-key.pem, quindi usare
--key device-cert.pem:1234
.Se sono state seguite le istruzioni in Usare una catena di certificati, il percorso della chiave è certs/device-01-full-chain.cert.pem, quindi usare
--cert certs/device-01-full-chain.cert.pem
.
-H 'Content-Type: application/json'
indica hub IoT stiamo pubblicando contenuto JSON e deve essere "application/json".-H 'Content-Encoding: utf-8'
indica hub IoT la codifica usata per il corpo del messaggio. Impostare sul valore appropriato per il sistema operativo/client; tuttavia, è in genereutf-8
.-d '{"temperature": 30}'
, il–d
parametro è il corpo o i dati del messaggio che si sta pubblicando. Per questo articolo viene pubblicato un singolo punto dati relativo alla temperatura. Il tipo di contenuto è stato specificato come application/json, quindi, per questa richiesta, il corpo è JSON. Si noti che per curl, viene racchiuso tra virgolette singole; in caso contrario, è necessario eseguire l'escape delle virgolette doppie nel codice JSON.L'ultimo parametro è l'URL a cui inviare il post. Per l'API Di invio dell'evento del dispositivo, l'URL è:
https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13
.Sostituire
[assigned_iot_hub_name]
con il nome dell'hub IoT a cui è stato assegnato il dispositivo.Sostituire
[device_id]
con l'ID dispositivo assegnato al momento della registrazione del dispositivo. Per i dispositivi di cui viene effettuato il provisioning tramite i gruppi di registrazione, l'ID dispositivo sarà l'ID registrazione. Per le registrazioni individuali, è possibile, facoltativamente, specificare un ID dispositivo diverso dall'ID di registrazione nella voce di registrazione.
Ad esempio:
Se sono state seguite le istruzioni in Usare un certificato autofirmato:
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 sono state seguite le istruzioni in Usare una catena di certificati:
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
Una chiamata con esito positivo avrà una risposta simile alla seguente:
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
Passaggi successivi
Per altre informazioni sull'attestazione con certificati X.509, vedere Attestazione del certificato X.509.
Per altre informazioni sul caricamento e la verifica dei certificati X.509, vedere Configurare i certificati ca verificati.