Avvio rapido: Effettuare il provisioning di un dispositivo simulato con certificato X.509
In questa guida introduttiva si crea un dispositivo simulato nel computer Windows. Il dispositivo simulato è configurato per l'uso dell'attestazione del certificato X.509 per l'autenticazione. Dopo aver configurato il dispositivo, eseguirne il provisioning nell'hub IoT usando il servizio Device Provisioning hub IoT di Azure.
Se non si ha familiarità con il processo di provisioning, vedere la panoramica del provisioning . È anche necessario aver completato la procedura descritta in Configurare il servizio Device Provisioning in hub IoT con il portale di Azure prima di continuare.
Questa guida introduttiva illustra una soluzione per una workstation basata su Windows. Tuttavia, è anche possibile eseguire le procedure in Linux. Per un esempio di Linux, vedere Esercitazione: Effettuare il provisioning per la latenza geografica.
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.
I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.
Installare Visual Studio 2022 con il carico di lavoro "Sviluppo di applicazioni desktop con C++". Sono supportati anche Visual Studio 2015, Visual Studio 2017 e Visual Studio 19. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.
Installare il sistema di compilazione CMake più recente. Assicurarsi di selezionare l'opzione che aggiunge il file eseguibile CMake al percorso.
Importante
Verificare che i prerequisiti di Visual Studio (Visual Studio e il carico di lavoro "Sviluppo di applicazioni desktop con C++") siano installati nel computer prima di avviare l'installazione
CMake
. Quando i prerequisiti sono pronti e il download è stato verificato, installare il sistema di compilazione CMake. Tenere inoltre presente che le versioni precedenti del sistema di compilazione CMake non riescono a generare il file di soluzione usato in questo articolo. Assicurarsi di usare la versione più recente di CMake.
I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.
Installare .NET SDK 6.0 o versione successiva nel computer basato su Windows. Per controllare la versione, è possibile usare il comando seguente.
dotnet --info
I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.
- Installare Node.js v4.0 o versione successiva nel computer.
I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows.
- Python 3.6 o versione successiva nel computer.
I prerequisiti seguenti si riferiscono a un ambiente di sviluppo Windows. Per Linux o macOS, vedere la sezione appropriata in Preparare l'ambiente di sviluppo nella documentazione dell'SDK.
Installare Java SE Development Kit 8 o versione successiva nel computer.
Scaricare e installare Maven.
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.Assicurarsi che OpenSSL sia installato nel computer. In Windows l'installazione di Git include un'installazione di OpenSSL. È possibile accedere a OpenSSL dal prompt di Git Bash. Per verificare che OpenSSL sia installato, aprire un prompt di Git Bash e immettere
openssl version
.Nota
A meno che non si abbia familiarità con OpenSSL e che sia già installato nel computer Windows, è consigliabile usare OpenSSL dal prompt di Git Bash. In alternativa, è possibile scegliere di scaricare il codice sorgente e compilare OpenSSL. Per altre informazioni, vedere la pagina Download di OpenSSL. In alternativa, è possibile scaricare OpenSSL predefinito da una terza parte. Per altre informazioni, vedere la pagina Wiki di OpenSSL. Microsoft non garantisce la validità dei pacchetti scaricati da terze parti. Se si sceglie di compilare o scaricare OpenSSL, assicurarsi che il file binario OpenSSL sia accessibile nel percorso e che la variabile di ambiente
OPENSSL_CNF
sia impostata sul percorso del file openssl.cnf.Aprire un prompt dei comandi di Windows e un prompt di Git Bash.
I passaggi descritti in questa guida introduttiva presuppongono che si stia usando un computer Windows e l'installazione di OpenSSL installata come parte di Git. Usare il prompt di Git Bash per eseguire comandi OpenSSL e il prompt dei comandi di Windows per tutto il resto. Se si usa Linux, è possibile eseguire tutti i comandi da una shell Bash.
Preparare l'ambiente di sviluppo
In questa sezione viene preparato un ambiente di sviluppo usato per compilare Azure IoT C SDK. Il codice di esempio tenta di effettuare il provisioning del dispositivo durante la sequenza di avvio del dispositivo.
Aprire un Web browser e passare alla pagina Versione di Azure IoT C SDK.
Selezionare la scheda Tag nella parte superiore della pagina.
Copiare il nome del tag per la versione più recente di Azure IoT C SDK.
Nel prompt dei comandi di Windows eseguire i comandi seguenti per clonare la versione più recente del repository GitHub azure IoT Device SDK per C . Sostituire
<release-tag>
con il tag copiato nel passaggio precedente, ad esempio :lts_01_2023
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Il completamento di questa operazione potrebbe richiedere alcuni minuti.
Al termine dell'operazione, eseguire i comandi seguenti dalla
azure-iot-sdk-c
directory :mkdir cmake cd cmake
L'esempio di codice usa un certificato X.509 per fornire l'attestazione tramite l'autenticazione X.509. Eseguire il comando seguente per compilare una versione dell'SDK specifica per la piattaforma di sviluppo che include il client di provisioning di dispositivi. Viene generata una soluzione di Visual Studio per il dispositivo simulato nella directory
cmake
.Quando si specifica il percorso usato con
-Dhsm_custom_lib
nel comando seguente, assicurarsi di usare il percorso assoluto della libreria nellacmake
directory creata in precedenza. Il percorso mostrato presuppone che sia stato clonato L'SDK C nella directory radice dell'unità C. Se è stata usata un'altra directory, modificare il percorso di conseguenza.
Suggerimento
Se cmake
non trova il compilatore C++, è possibile che si verifichino errori di compilazione durante l'esecuzione del comando precedente. In tal caso, provare a eseguire il comando nel prompt dei comandi di Visual Studio.
Quando la compilazione ha esito positivo, le ultime righe di output sono simili all'output seguente:
-- Building for: Visual Studio 17 2022 -- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.22000. -- The C compiler identification is MSVC 19.32.31329.0 -- The CXX compiler identification is MSVC 19.32.31329.0 ... -- Configuring done -- Generating done -- Build files have been written to: C:/azure-iot-sdk-c/cmake
Nel prompt dei comandi di Windows clonare il repository GitHub azure IoT SDK per C# usando il comando seguente:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
Nel prompt dei comandi di Windows clonare Azure IoT SDK per Node.js repository GitHub usando il comando seguente:
git clone https://github.com/Azure/azure-iot-sdk-node.git
Nel prompt dei comandi di Windows clonare il repository GitHub azure IoT Device SDK per Python usando il comando seguente:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Nota
Gli esempi usati in questa esercitazione si trovano nel ramo v2 del repository azure-iot-sdk-python. La versione 3 di Python SDK è disponibile per l'uso nella versione beta.
Nel prompt dei comandi di Windows clonare il repository Azure IoT Samples for Java GitHub usando il comando seguente:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Passare alla directory radice
azure-iot-sdk-java
e compilare il progetto per scaricare tutti i pacchetti necessari.cd azure-iot-sdk-java mvn install -DskipTests=true
Creare un certificato per un dispositivo X.509 autofirmato
In questa sezione si usa OpenSSL per creare un certificato X.509 autofirmato e una chiave privata. Questo certificato viene caricato nell'istanza del servizio di provisioning e verificato dal servizio.
Attenzione
Usare i certificati creati con OpenSSL in questa guida introduttiva solo per i test di sviluppo. Non usare questi certificati nell'ambiente di produzione. Questi certificati scadono dopo 30 giorni e possono contenere password hardcoded, ad esempio 1234. Per informazioni su come ottenere certificati adatti per l'uso nell'ambiente di produzione, vedere Come ottenere un certificato CA X.509 nella documentazione di hub IoT di Azure.
Eseguire i passaggi descritti in questa sezione nel prompt di Git Bash.
Nel prompt di Git Bash passare a una directory in cui si vogliono creare i certificati.
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
. Per le registrazioni basate su X.509, l'ID registrazione è impostato sul nome comune. 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 ('-'
). Il nome comune deve essere conforme a questo formato. DPS supporta ID di registrazione fino a 128 caratteri; Tuttavia, la lunghezza massima del nome comune del soggetto in un certificato X.509 è di 64 caratteri. L'ID registrazione, pertanto, è limitato a 64 caratteri quando si usano certificati X.509.Il file di certificato è codificato in Base 64. Per visualizzare il nome comune del soggetto (CN) e altre proprietà del file di certificato, immettere il comando seguente:
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
Il codice di esempio richiede una chiave privata non crittografata. Eseguire il comando seguente per creare una chiave privata non crittografata:
Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza,
1234
.
Mantenere aperto il prompt di Git Bash. Sarà necessario più avanti in questo argomento di avvio rapido.
Il codice di esempio C# è configurato per l'uso di certificati X.509 archiviati in un file in formato PKCS#12 protetto da password (certificate.pfx
). È ancora necessario il file di certificato con chiave pubblica formattata PEM (device-cert.pem
) appena creato per creare una singola voce di registrazione più avanti in questa guida introduttiva.
Per generare il file formattato PKCS12 previsto dall'esempio, immettere il comando seguente:
Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza,
1234
.Quando viene chiesto di immettere Export Password:, usare la password
1234
.Quando viene richiesto Verifica: immettere Export Password:, usare di nuovo la password
1234
.Un file di certificato formattato PKCS12 (certificate.pfx) dovrebbe ora essere generato nella directory in cui è stato eseguito il
openssl
comando.Copiare il file di certificato formattato PKCS12 nella directory del progetto per l'esempio di provisioning di dispositivi X.509. Il percorso specificato è relativo al percorso in cui è stato scaricato il repository di esempio.
cp certificate.pfx ./azure-iot-sdk-csharp/provisioning/device/samples/"Getting Started"/X509Sample
Non è necessario il prompt di Git Bash per il resto di questa guida introduttiva. Tuttavia, è possibile mantenerlo aperto per controllare il certificato in caso di problemi nei passaggi successivi.
Il codice di esempio richiede una chiave privata non crittografata. Eseguire il comando seguente per creare una chiave privata non crittografata:
Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza,
1234
.Copiare il certificato del dispositivo e la chiave privata non crittografata nella directory del progetto per l'esempio di provisioning dei dispositivi X.509. Il percorso specificato è relativo al percorso in cui è stato scaricato l'SDK.
cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples cp unencrypted-device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
Non è necessario il prompt di Git Bash per il resto di questa guida introduttiva. Tuttavia, è possibile mantenerlo aperto per controllare il certificato in caso di problemi nei passaggi successivi.
Copiare il certificato del dispositivo e la chiave privata nella directory del progetto per l'esempio di provisioning di dispositivi X.509. Il percorso specificato è relativo al percorso in cui è stato scaricato l'SDK.
cp device-cert.pem ./azure-iot-sdk-python/samples/async-hub-scenarios cp device-key.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
Non è necessario il prompt di Git Bash per il resto di questa guida introduttiva. Tuttavia, è possibile mantenerlo aperto per controllare il certificato in caso di problemi nei passaggi successivi.
Il codice di esempio Java richiede una chiave privata non crittografata. Eseguire il comando seguente per creare una chiave privata non crittografata:
Quando viene chiesto di immettere la pass phrase per device-key.pem:, usare la stessa pass phrase eseguita in precedenza,
1234
.
Mantenere aperto il prompt di Git Bash. Sarà necessario più avanti in questo argomento di avvio rapido.
Creare una registrazione dei dispositivi
Il servizio Device Provisioning in Azure IoT supporta due tipi di registrazione:
- Gruppi di registrazioni: usato per registrare più dispositivi correlati.
- Registrazioni singole: Usato per registrare un singolo dispositivo.
Questo articolo illustra una registrazione singola per un singolo dispositivo di cui eseguire il provisioning con un hub IoT.
Accedere al portale di Azure e aprire l'istanza del servizio Device Provisioning.
Selezionare Gestisci registrazioni nella sezione Impostazioni del menu di spostamento.
Selezionare la scheda Registrazioni singole, quindi selezionare Aggiungi registrazione singola.
Nella pagina Registrazione e provisioning della pagina Aggiungi registrazione specificare le informazioni seguenti per configurare i dettagli della registrazione:
Campo Descrizione Attestazione Selezionare Certificati client X.509 come meccanismo di attestazione. Impostazioni certificato X.509 Caricare uno o due certificati che verranno usati per verificare il dispositivo per questa registrazione. Stato del provisioning Selezionare la casella Abilita questa registrazione se si vuole che la registrazione sia disponibile per effettuare il provisioning del dispositivo. Deselezionare questa casella se si vuole disabilitare la registrazione. Non è possibile modificare questa impostazione in un secondo momento. Criteri di reprovisioning Scegliere un criterio di reprovisioning che rifletta il modo in cui si vuole che il servizio Device Provisioning gestisca i dispositivi che richiedono il provisioning. Per altre informazioni, vedere Criteri di reprovisioning. Selezionare Avanti: Hub IoT.
Nella scheda Hub IoT della pagina Aggiungi registrazione specificare le informazioni seguenti per determinare gli hub IoT a cui la registrazione può effettuare il provisioning dei dispositivi:
Campo Descrizione Hub IoT di destinazione Selezionare uno o più hub IoT collegati oppure aggiungere un nuovo collegamento a un hub IoT. Per altre informazioni sul collegamento degli hub IoT all'istanza del servizio Device Provisioning, vedere Come collegare e gestire hub IoT. Criteri di allocazione Se sono stati selezionati più hub IoT collegati, selezionare la modalità di assegnazione dei dispositivi ai diversi hub. Per altre informazioni sui criteri di allocazione, vedere Come usare i criteri di allocazione.
Se è stato selezionato un solo hub IoT collegato, è consigliabile usare i criteri di distribuzione ponderati in modo uniforme.Selezionare Avanti: Impostazioni dispositivo
Nella scheda Impostazioni dispositivo della pagina Aggiungi registrazione specificare le informazioni seguenti per definire la modalità di configurazione dei dispositivi di cui è stato appena effettuato il provisioning:
Campo Descrizione ID dispositivo Specificare un ID dispositivo che verrà assegnato al dispositivo di cui è stato effettuato il provisioning in hub IoT. Se non si specifica un ID dispositivo, verrà usato l'ID di registrazione. IoT Edge Selezionare Abilita IoT Edge nei dispositivi di cui è stato effettuato il provisioning se il dispositivo di cui è stato effettuato il provisioning eseguirà Azure IoT Edge. Deselezionare questa casella se questa registrazione è per un dispositivo non abilitato per IoT Edge. Tag del dispositivo Usare questa casella di testo per specificare i tag da applicare al dispositivo gemello del dispositivo di cui è stato effettuato il provisioning. Proprietà desiderate Usare questa casella di testo per specificare le proprietà desiderate che si desidera applicare al dispositivo gemello del dispositivo di cui è stato effettuato il provisioning. Per altre informazioni, vedere Comprendere e usare dispositivi gemelli nell'hub IoT.
Selezionare Avanti: Rivedi e crea.
Nella scheda Rivedi e crea, verificare tutti i valori e quindi selezionare Crea.
Preparare ed eseguire il codice di provisioning del dispositivo
In questa sezione si aggiorna il codice di esempio per inviare la sequenza di avvio del dispositivo all'istanza del servizio Device Provisioning. Questa sequenza di avvio fa sì che il dispositivo venga riconosciuto e assegnato a un hub IoT collegato all'istanza del servizio Device Provisioning.
In questa sezione si usa il prompt di Git Bash e l'IDE di Visual Studio.
Configurare il codice del dispositivo di provisioning
In questa sezione si aggiorna il codice di esempio con le informazioni sull'istanza del servizio Device Provisioning.
Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.
Copiare il valore ambito ID.
Avviare Visual Studio e aprire il nuovo file di soluzione che è stato creato nella directory
cmake
creata nella radice del repository Git azure-iot-sdk-c. Il nome del file di soluzione èazure_iot_sdks.sln
.In Esplora soluzioni per Visual Studio passare a Provision_Samples prov_dev_client_sample > > File di origine e aprire prov_dev_client_sample.c.
Trovare la
id_scope
costante e sostituire il valore con il valore di ambito ID copiato nel passaggio 2.static const char* id_scope = "0ne00000A0A";
Trovare la definizione per la funzione
main()
nello stesso file. Assicurarsi che lahsm_type
variabile sia impostata suSECURE_DEVICE_TYPE_X509
.SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; hsm_type = SECURE_DEVICE_TYPE_X509; //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Salva le modifiche.
Fare clic con il pulsante destro del mouse sul progetto prov_dev_client_sample e scegliere Imposta come progetto di avvio.
Configurare il codice stub del modulo di protezione hardware personalizzato
Le specifiche di interazione con uno spazio di archiviazione sicuro reale basato su hardware variano a seconda dell'hardware. Di conseguenza, il certificato e la chiave privata usati dal dispositivo simulato in questa guida introduttiva sono hardcoded nel codice stub del modulo di protezione hardware personalizzato.
Per aggiornare il codice stub del modulo di protezione hardware personalizzato per simulare l'identità del dispositivo con ID my-x509-device
:
In Esplora soluzioni per Visual Studio passare a Provision_Samples file di origine custom_hsm_example > > e aprire custom_hsm_example.c.
Aggiornare il valore stringa della
COMMON_NAME
costante stringa usando il nome comune usato durante la generazione del certificato del dispositivo,my-x509-device
.static const char* const COMMON_NAME = "my-x509-device";
Aggiornare il valore stringa della
CERTIFICATE
stringa costante usando il certificato del dispositivo, device-cert.pem, generato in precedenza.La sintassi del testo del certificato nell'esempio deve seguire il modello seguente senza spazi aggiuntivi o analisi eseguiti da Visual Studio.
static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il
CERTIFICATE
valore costante stringa e la scrive nell'output.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
Copiare e incollare il testo del certificato di output per il valore costante.
Aggiornare il valore stringa della
PRIVATE_KEY
costante con la chiave privata non crittografata per il certificato del dispositivo, unencrypted-device-key.pem.La sintassi del testo della chiave privata deve seguire il modello seguente senza spazi aggiuntivi o analisi eseguiti da Visual Studio.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il
PRIVATE_KEY
valore costante stringa e la scrive nell'output.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
Copiare e incollare il testo della chiave privata di output per il valore costante.
Salva le modifiche.
Fare clic con il pulsante destro del mouse sul progetto custom_hsm_-_example e scegliere Compila.
Importante
È necessario compilare il progetto custom_hsm_example prima di compilare il resto della soluzione nella sezione successiva.
Eseguire l'esempio
Nel menu di Visual Studio selezionare Debug>Avvia senza eseguire debug per eseguire la soluzione. Se viene richiesto di ricompilare il progetto, selezionare Sì per ricompilare il progetto prima dell'esecuzione.
L'output seguente è un esempio dell'avvio corretto del dispositivo
my-x509-device
simulato e della connessione al servizio di provisioning. Il dispositivo viene assegnato a un hub IoT e registrato:Provisioning API Version: 1.8.0 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-iot-hub-2.azure-devices.net, deviceId: my-x509-device Press enter key to exit:
In questa sezione si usa il prompt dei comandi di Windows.
Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.
Copiare il valore ambito ID.
Nel prompt dei comandi di Windows passare alla directory X509Sample. Questa directory si trova nella directory .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample dalla directory in cui sono stati clonati gli esempi nel computer.
Immettere il comando seguente per compilare ed eseguire l'esempio di provisioning dei dispositivi X.509 (sostituire il
<IDScope>
valore con l'ambito ID copiato nella sezione precedente. Per impostazione predefinita, il file di certificato è ./certificate.pfx e richiede la password pfx.dotnet run -- -s <IDScope>
Se si vuole passare il certificato e la password come parametro, è possibile usare il formato seguente.
Nota
È possibile passare parametri aggiuntivi durante l'esecuzione dell'applicazione per modificare TransportType (-t) e GlobalDeviceEndpoint (-g).
dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
Il dispositivo si connette al servizio Device Provisioning e viene assegnato a un hub IoT. Il dispositivo invia quindi un messaggio di telemetria all'hub IoT.
Loading the certificate... Enter the PFX password for certificate.pfx: **** Found certificate: A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device; PrivateKey: True Using certificate A33DB11B8883DEE5B1690ACFEAAB69E8E928080B CN=my-x509-device Initializing the device provisioning client... Initialized for registration Id my-x509-device. Registering with the device provisioning service... Registration status: Assigned. Device my-x509-device registered to MyExampleHub.azure-devices.net. Creating X509 authentication for IoT Hub... Testing the provisioned device with IoT Hub... Sending a telemetry message... Finished.
In questa sezione si usa il prompt dei comandi di Windows.
Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.
Copiare il valore ambito ID.
Nel prompt dei comandi di Windows passare alla directory di esempio e installare i pacchetti necessari per l'esempio. Il percorso visualizzato è relativo alla posizione in cui è stato clonato l'SDK.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
L'esempio usa cinque variabili di ambiente per autenticare ed effettuare il provisioning di un dispositivo IoT tramite DPS. Queste variabili di ambiente da modificare sono:
Nome variabile Descrizione PROVISIONING_HOST
Endpoint da usare per la connessione all'istanza del servizio Device Provisioning. Per questa guida introduttiva, usare l'endpoint globale , global.azure-devices-provisioning.net
.PROVISIONING_IDSCOPE
Ambito ID per l'istanza del servizio Device Provisioning. PROVISIONING_REGISTRATION_ID
ID di registrazione per il dispositivo. Deve corrispondere al nome comune del soggetto nel certificato del dispositivo. CERTIFICATE_FILE
Percorso del file del certificato del dispositivo. KEY_FILE
Percorso del file di chiave privata del dispositivo. Aggiungere variabili di ambiente per l'endpoint del dispositivo globale e l'ambito ID. Sostituire
<id-scope>
con il valore copiato nel passaggio 2.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Impostare la variabile di ambiente per l'ID registrazione del dispositivo. L'ID di registrazione per il dispositivo IoT deve corrispondere al nome comune del soggetto nel certificato del dispositivo. Se sono stati eseguiti i passaggi descritti in questa guida introduttiva per generare un certificato di test autofirmato,
my-x509-device
il nome del soggetto e l'ID di registrazione per il dispositivo.set PROVISIONING_REGISTRATION_ID=my-x509-device
Impostare le variabili di ambiente per i file di chiave privata del dispositivo e (non crittografati).
set CERTIFICATE_FILE=.\device-cert.pem set KEY_FILE=.\unencrypted-device-key.pem
Eseguire l'esempio e verificare che il provisioning del dispositivo sia stato eseguito correttamente.
node register_x509.js
L'output dovrebbe essere simile all'esempio seguente:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=my-x509-device Client connected send status: MessageEnqueued
In questa sezione si usa il prompt dei comandi di Windows.
Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.
Copiare i valori dell'ambito ID e dell'endpoint del dispositivo globale.
Nel prompt dei comandi di Windows passare alla directory dell'esempio di provision_x509.py . Il percorso visualizzato è relativo alla posizione in cui è stato clonato l'SDK.
cd ./azure-iot-sdk-python/samples/async-hub-scenarios
Questo esempio usa sei variabili di ambiente per autenticare ed effettuare il provisioning di un dispositivo IoT tramite DPS. Queste variabili di ambiente da modificare sono:
Nome variabile Descrizione PROVISIONING_HOST
Endpoint globale usato per la connessione all'istanza del servizio Device Provisioning. PROVISIONING_IDSCOPE
Ambito ID per l'istanza del servizio Device Provisioning. DPS_X509_REGISTRATION_ID
ID di registrazione per il dispositivo. Deve corrispondere anche al nome del soggetto nel certificato del dispositivo. X509_CERT_FILE
Percorso del file del certificato del dispositivo. X509_KEY_FILE
Percorso del file di chiave privata del certificato del dispositivo. PASS_PHRASE
La pass phrase usata per crittografare il certificato e il file di chiave privata ( 1234
).Aggiungere le variabili di ambiente per l'endpoint del dispositivo globale e l'ambito ID.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Impostare la variabile di ambiente per l'ID registrazione. L'ID di registrazione per il dispositivo IoT deve corrispondere al nome del soggetto nel certificato del dispositivo. Se sono stati eseguiti i passaggi descritti in questa guida introduttiva per generare un certificato di test autofirmato,
my-x509-device
il nome del soggetto e l'ID di registrazione per il dispositivo.set DPS_X509_REGISTRATION_ID=my-x509-device
Impostare le variabili di ambiente per il file di certificato, il file di chiave privata e la pass phrase.
set X509_CERT_FILE=./device-cert.pem set X509_KEY_FILE=./device-key.pem set PASS_PHRASE=1234
Esaminare il codice per provision_x509.py. Se non si usa Python versione 3.7 o successiva, apportare la modifica del codice indicata qui per sostituire
asyncio.run(main())
e salvare le modifiche.Eseguire l'esempio. L'esempio si connette al servizio Device Provisioning, che effettua il provisioning del dispositivo a un hub IoT. Dopo il provisioning del dispositivo, l'esempio invia alcuni messaggi di test all'hub IoT.
$ python azure-iot-sdk-python/samples/async-hub-scenarios/provision_x509.py RegistrationStage(RequestAndResponseOperation): Op will transition into polling after interval 2. Setting timer. The complete registration result is my-x509-device TestHub12345.azure-devices.net initialAssignment null Will send telemetry from the provisioned device sending message #4 sending message #7 sending message #2 sending message #8 sending message #5 sending message #9 sending message #1 sending message #6 sending message #10 sending message #3 done sending message #4 done sending message #7 done sending message #2 done sending message #8 done sending message #5 done sending message #9 done sending message #1 done sending message #6 done sending message #10 done sending message #3
In questa sezione si usano sia il prompt dei comandi di Windows che il prompt di Git Bash.
Nella portale di Azure selezionare la scheda Panoramica per il servizio Device Provisioning.
Copiare i valori dell'ambito ID e dell'endpoint del dispositivo globale.
Nel prompt dei comandi di Windows passare alla cartella del progetto di esempio. Il percorso visualizzato è relativo alla posizione in cui è stato clonato l'SDK
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Immettere le informazioni sull'identità del servizio di provisioning e X.509 nel codice di esempio. Queste informazioni vengono usate durante il provisioning, per l'attestazione del dispositivo simulato, prima della registrazione del dispositivo.
Aprire il file
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
nell'editor preferito.Aggiornare i valori seguenti con l'ambito ID e l'endpoint globale del servizio di provisioning copiati in precedenza.
private static final String idScope = "[Your ID scope here]"; private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]"; private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
Aggiornare il valore della
leafPublicPem
stringa costante con il valore del certificato device-cert.pem.La sintassi del testo del certificato deve seguire il modello seguente senza spazi o caratteri aggiuntivi.
private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" + "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" + ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" + "-----END CERTIFICATE-----";
L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il
leafPublicPem
valore costante stringa e la scrive nell'output.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
Copiare e incollare il testo del certificato di output per il valore costante.
Aggiornare il valore stringa della
leafPrivateKey
costante con la chiave privata non crittografata per il certificato del dispositivo, unencrypted-device-key.pem.La sintassi del testo della chiave privata deve seguire il modello seguente senza spazi o caratteri aggiuntivi.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
L'aggiornamento manuale di questo valore stringa può essere soggetto a errori. Per generare la sintassi corretta, è possibile copiare e incollare il comando seguente nel prompt di Git Bash e premere INVIO. Questo comando genera la sintassi per il
leafPrivateKey
valore costante stringa e la scrive nell'output.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
Copiare e incollare il testo della chiave privata di output per il valore costante.
Salva le modifiche.
Compilare l'esempio e quindi passare alla
target
cartella .mvn clean install cd target
La compilazione restituisce .jar file nella
target
cartella con il formato di file seguente:provisioning-x509-sample-{version}-with-deps.jar
; ad esempio:provisioning-x509-sample-1.8.1-with-deps.jar
. Eseguire il file .jar. Potrebbe essere necessario sostituire la versione nel comando seguente.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
L'esempio si connette al servizio Device Provisioning, che effettua il provisioning del dispositivo a un hub IoT. Dopo il provisioning del dispositivo, l'esempio invia alcuni messaggi di test all'hub IoT.
Starting... Beginning setup. WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance. 2022-05-11 09:42:05,025 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Initialized a ProvisioningDeviceClient instance using SDK version 2.0.0 2022-05-11 09:42:05,027 DEBUG (main) [com.microsoft.azure.sdk.iot.provisioning.device.ProvisioningDeviceClient] - Starting provisioning thread... Waiting for Provisioning Service to register 2022-05-11 09:42:05,030 INFO (global.azure-devices-provisioning.net-6255a8ba-CxnPendingConnectionId-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Opening the connection to device provisioning service... 2022-05-11 09:42:05,252 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Connection to device provisioning service opened successfully, sending initial device registration message 2022-05-11 09:42:05,286 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-RegisterTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.RegisterTask] - Authenticating with device provisioning service using x509 certificates 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Waiting for device provisioning service to provision this device... 2022-05-11 09:42:06,083 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Current provisioning status: ASSIGNING Waiting for Provisioning Service to register 2022-05-11 09:42:15,685 INFO (global.azure-devices-provisioning.net-6255a8ba-Cxn6255a8ba-azure-iot-sdk-ProvisioningTask) [com.microsoft.azure.sdk.iot.provisioning.device.internal.task.ProvisioningTask] - Device provisioning service assigned the device successfully IotHUb Uri : MyExampleHub.azure-devices.net Device ID : java-device-01 2022-05-11 09:42:25,057 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,080 INFO (main) [com.microsoft.azure.sdk.iot.device.transport.ExponentialBackoffWithJitter] - NOTE: A new instance of ExponentialBackoffWithJitter has been created with the following properties. Retry Count: 2147483647, Min Backoff Interval: 100, Max Backoff Interval: 10000, Max Time Between Retries: 100, Fast Retry Enabled: true 2022-05-11 09:42:25,087 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Initialized a DeviceClient instance using SDK version 2.0.3 2022-05-11 09:42:25,129 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - Opening MQTT connection... 2022-05-11 09:42:25,150 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT CONNECT packet... 2022-05-11 09:42:25,982 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT CONNECT packet was acknowledged 2022-05-11 09:42:25,983 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sending MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.Mqtt] - Sent MQTT SUBSCRIBE packet for topic devices/java-device-01/messages/devicebound/# was acknowledged 2022-05-11 09:42:26,068 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.mqtt.MqttIotHubConnection] - MQTT connection opened successfully 2022-05-11 09:42:26,070 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - The connection to the IoT Hub has been established 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Updating transport status to new status CONNECTED with reason CONNECTION_OK 2022-05-11 09:42:26,071 DEBUG (main) [com.microsoft.azure.sdk.iot.device.DeviceIO] - Starting worker threads 2022-05-11 09:42:26,073 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking connection status callbacks with new status details 2022-05-11 09:42:26,074 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Client connection opened successfully 2022-05-11 09:42:26,075 INFO (main) [com.microsoft.azure.sdk.iot.device.DeviceClient] - Device client opened successfully Sending message from device to IoT Hub... 2022-05-11 09:42:26,077 DEBUG (main) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Message was queued to be sent later ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) Press any key to exit... 2022-05-11 09:42:26,079 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Sending message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,422 DEBUG (MQTT Call: java-device-01) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - IotHub message was acknowledged. Checking if there is record of sending this message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) 2022-05-11 09:42:26,425 DEBUG (MyExampleHub.azure-devices.net-java-device-01-ee6c362d-Cxn7a1fb819-e46d-4658-9b03-ca50c88c0440-azure-iot-sdk-IotHubSendTask) [com.microsoft.azure.sdk.iot.device.transport.IotHubTransport] - Invoking the callback function for sent message, IoT Hub responded to message ( Message details: Correlation Id [aaaa0000-bb11-2222-33cc-444444dddddd] Message Id [aaaa0000-bb11-2222-33cc-444444dddddd] ) with status OK Message sent!
Confermare la registrazione del provisioning dei dispositivi
Per visualizzare l'hub IoT a cui è stato effettuato il provisioning del dispositivo, esaminare i dettagli di registrazione della registrazione singola creata in precedenza:
In portale di Azure passare al servizio Device Provisioning.
Nel menu Impostazioni selezionare Gestisci registrazioni.
Selezionare Registrazioni singole. La voce di registrazione X.509 creata in precedenza, my-x509-device, dovrebbe essere visualizzata nell'elenco.
Selezionare la voce di registrazione. L'hub IoT a cui è stato assegnato il dispositivo e il relativo ID dispositivo viene visualizzato in Stato registrazione.
Per verificare il dispositivo nell'hub IoT:
In portale di Azure passare all'hub IoT a cui è stato assegnato il dispositivo.
Nel menu Gestione dei dispositivi selezionare Dispositivi.
Se il provisioning del dispositivo è stato eseguito correttamente, il relativo ID dispositivo, my-x509-device, dovrebbe essere visualizzato nell'elenco, con Stato impostato come abilitato. Se il dispositivo non è visualizzato, selezionare Aggiorna.
Importante
Se si è modificato lo stato iniziale del dispositivo gemello rispetto al valore predefinito della voce di registrazione del dispositivo, è possibile eseguire il pull dello stato del dispositivo desiderato dall'hub e agire di conseguenza. Per altre informazioni, vedere Comprendere e usare dispositivi gemelli nell'hub IoT
Pulire le risorse
Se si prevede di continuare a lavorare ed esplorare l'esempio client del dispositivo, non pulire le risorse create in questa guida introduttiva. Se non si prevede di continuare, seguire questa procedura per eliminare tutte le risorse create da questa guida introduttiva.
Eliminare la registrazione del dispositivo
Chiudere la finestra di output di esempio di client del dispositivo sul computer.
Nel menu a sinistra nel portale di Azure, selezionare Tutte le risorse.
Selezionare il servizio Device Provisioning.
Nel menu Impostazioni selezionare Gestisci registrazioni.
Selezionare la scheda Registrazioni singole.
Selezionare la casella di controllo accanto all'ID di registrazione del dispositivo registrato in questa guida introduttiva.
Nella parte superiore della pagina selezionare Elimina.
Eliminare la registrazione del dispositivo da hub IoT
Nel menu a sinistra nel portale di Azure, selezionare Tutte le risorse.
Selezionare l'hub IoT.
Nel menu Explorer selezionare Dispositivi IoT.
Selezionare la casella di controllo accanto all'ID dispositivo del dispositivo registrato in questa guida introduttiva.
Nella parte superiore della pagina selezionare Elimina.
Passaggi successivi
In questa guida introduttiva è stato effettuato il provisioning di un singolo dispositivo nell'hub IoT usando una registrazione singola. Successivamente, informazioni su come effettuare il provisioning di più dispositivi tra più hub.