Snabbstart: Etablera en simulerad X.509-certifikatenhet
I den här snabbstarten skapar du en simulerad enhet på din Windows-dator. Den simulerade enheten är konfigurerad för att använda X.509-certifikatattestering för autentisering. När du har konfigurerat enheten etablerar du den sedan till din IoT-hubb med hjälp av Azure IoT Hub Device Provisioning Service.
Om du inte känner till etableringsprocessen kan du läsa etableringsöversikten. Se också till att slutföra stegen i Set up IoT Hub Device Provisioning Service with the Azure portal (Konfigurera IoT Hub Device Provisioning-tjänsten med Azure-portalen) innan du fortsätter.
Den här snabbstarten visar en lösning för en Windows-baserad arbetsstation. Du kan dock även utföra procedurerna i Linux. Ett Linux-exempel finns i Självstudie: Etablera för geo-svarstid.
Förutsättningar
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Slutför stegen i Konfigurera IoT Hub Device Provisioning Service med Azure Portal.
Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.
Installera Visual Studio 2022 med arbetsbelastningen "Skrivbordsutveckling med C++" aktiverad. Visual Studio 2015, Visual Studio 2017 och Visual Studio 19 stöds också. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.
Installera det senaste CMake-byggsystemet. Kontrollera att du kontrollerar alternativet som lägger till den körbara CMake-filen i sökvägen.
Viktigt!
Kontrollera att Visual Studio-kraven (Visual Studio och arbetsbelastningen Skrivbordsutveckling med C++) är installerade på datorn innan du
CMake
startar installationen. När förutsättningarna är uppfyllda och nedladdningen har verifierats installerar du CMake-byggesystemet. Tänk också på att äldre versioner av CMake-byggsystemet inte kan generera lösningsfilen som används i den här artikeln. Se till att använda den senaste versionen av CMake.
Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.
Installera .NET SDK 6.0 eller senare på din Windows-baserade dator. Du kan använda följande kommando för att kontrollera din version.
dotnet --info
Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.
- Installera Node.js v4.0 eller senare på datorn.
Följande krav gäller för en Windows-utvecklingsmiljö.
- Python 3.6 eller senare på datorn.
Följande krav gäller för en Windows-utvecklingsmiljö. För Linux eller macOS, se lämpligt avsnitt i Förbereda utvecklingsmiljön i SDK-dokumentationen.
Installera Java SE Development Kit 8 eller senare på datorn.
Ladda ned och installera Maven.
Installera den senaste versionen av Git. Kontrollera att Git har lagts till i de miljövariabler som är tillgängliga för kommandofönstret. Se Software Freedom Conservancys Git-klientverktyg för den senaste versionen av
git
verktyg som ska installeras, vilket inkluderar Git Bash, kommandoradsappen som du kan använda för att interagera med din lokala Git-lagringsplats.Kontrollera att OpenSSL är installerat på datorn. I Windows innehåller installationen av Git en installation av OpenSSL. Du kan komma åt OpenSSL från Git Bash-prompten. Om du vill kontrollera att OpenSSL är installerat öppnar du en Git Bash-prompt och anger
openssl version
.Kommentar
Om du inte är bekant med OpenSSL och redan har installerat det på din Windows-dator rekommenderar vi att du använder OpenSSL från Git Bash-prompten. Du kan också välja att ladda ned källkoden och skapa OpenSSL. Mer information finns på sidan OpenSSL-nedladdningar . Eller så kan du ladda ned OpenSSL som är färdigbyggt från en tredje part. Mer information finns i OpenSSL-wikin. Microsoft ger inga garantier om giltigheten för paket som laddats ned från tredje part. Om du väljer att skapa eller ladda ned OpenSSL kontrollerar du att OpenSSL-binärfilen är tillgänglig i sökvägen och att
OPENSSL_CNF
miljövariabeln är inställd på sökvägen till filen openssl.cnf .Öppna både en Windows-kommandotolk och en Git Bash-prompt.
Stegen i den här snabbstarten förutsätter att du använder en Windows-dator och OpenSSL-installationen som är installerad som en del av Git. Du använder Git Bash-prompten för att utfärda OpenSSL-kommandon och Windows-kommandotolken för allt annat. Om du använder Linux kan du utfärda alla kommandon från ett Bash-gränssnitt.
Förbereda utvecklingsmiljön
I det här avsnittet förbereder du en utvecklingsmiljö som används för att skapa Azure IoT C SDK. Exempelkoden försöker etablera enheten under enhetens startsekvens.
Öppna en webbläsare och gå till versionssidan för Azure IoT C SDK.
Välj fliken Taggar överst på sidan.
Kopiera taggnamnet för den senaste versionen av Azure IoT C SDK.
I windows-kommandotolken kör du följande kommandon för att klona den senaste versionen av Azure IoT Device SDK för C GitHub-lagringsplatsen. Ersätt
<release-tag>
med taggen som du kopierade i föregående steg, till exempel: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
Den här åtgärden kan ta flera minuter att slutföra.
När åtgärden är klar kör du följande kommandon från
azure-iot-sdk-c
katalogen:mkdir cmake cd cmake
I kodexemplet används ett X.509-certifikat för att tillhandahålla attestering via X.509-autentisering. Kör följande kommando för att skapa en version av SDK:n som är specifik för din utvecklingsplattform som innehåller enhetsetableringsklienten. En Visual Studio-lösning för den simulerade enheten genereras i
cmake
katalogen.När du anger sökvägen som används med
-Dhsm_custom_lib
i följande kommando ska du använda den absoluta sökvägen till biblioteket i katalogencmake
som du skapade tidigare. Den sökväg som visas förutsätter att du klonade C SDK:t i rotkatalogen på C-enheten. Om du använde en annan katalog justerar du sökvägen därefter.
Dricks
Om cmake
du inte hittar C++-kompilatorn kan du få byggfel när du kör kommandot ovan. Om det händer kan du prova att köra kommandot i Visual Studio-kommandotolken.
När bygget lyckas ser de sista utdataraderna ut ungefär som följande utdata:
-- 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
I windows-kommandotolken klonar du Azure IoT SDK för C# GitHub-lagringsplatsen med följande kommando:
git clone https://github.com/Azure/azure-iot-sdk-csharp.git
I windows-kommandotolken klonar du Azure IoT SDK för Node.js GitHub-lagringsplats med följande kommando:
git clone https://github.com/Azure/azure-iot-sdk-node.git
I din Windows-kommandotolk klonar du Azure IoT Device SDK för Python GitHub-lagringsplatsen med följande kommando:
git clone -b v2 https://github.com/Azure/azure-iot-sdk-python.git --recursive
Kommentar
Exemplen som används i den här självstudien finns i v2-grenen på azure-iot-sdk-python-lagringsplatsen. V3 av Python SDK är tillgängligt för användning i betaversion.
I din Windows-kommandotolk klonar du Azure IoT-exempel för Java GitHub-lagringsplatsen med följande kommando:
git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
Gå till rotkatalogen
azure-iot-sdk-java
och skapa projektet för att ladda ned alla paket som behövs.cd azure-iot-sdk-java mvn install -DskipTests=true
Skapa ett självsignerat X.509-enhetscertifikat
I det här avsnittet använder du OpenSSL för att skapa ett självsignerat X.509-certifikat och en privat nyckel. Det här certifikatet laddas upp till din etableringstjänstinstans och verifieras av tjänsten.
Varning
Använd certifikat som skapats med OpenSSL i den här snabbstarten endast för utvecklingstestning. Använd inte dessa certifikat i produktion. Dessa certifikat upphör att gälla efter 30 dagar och kan innehålla hårdkodade lösenord, till exempel 1234. Mer information om hur du hämtar certifikat som är lämpliga för användning i produktion finns i Hämta ett X.509 CA-certifikat i Azure IoT Hub-dokumentationen.
Utför stegen i det här avsnittet i Git Bash-prompten.
I Git Bash-prompten navigerar du till en katalog där du vill skapa dina certifikat.
Kör följande kommando:
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"
Viktigt!
Det extra snedstrecket som anges för ämnesnamnet (
//CN=my-x509-device
) krävs bara för att undkomma strängen med Git på Windows-plattformar.När du uppmanas att ange PEM-passfras:, använder du frasen
1234
pass .När du tillfrågas Verifiera – Ange PEM-passfras:, använd frasen
1234
pass igen.En certifikatfil för offentlig nyckel (device-cert.pem) och en privat nyckelfil (device-key.pem) ska nu genereras i katalogen där du körde
openssl
kommandot.Certifikatfilen har sitt ämnesnamn (CN) inställt på
my-x509-device
. För X.509-baserade registreringar anges registrerings-ID :t till det gemensamma namnet. Registrerings-ID:t är en skiftlägeskänslig sträng med alfanumeriska tecken plus specialtecken:'-'
,'.'
,'_'
,':'
. Det sista tecknet måste vara alfanumeriskt eller streck ('-'
). Det gemensamma namnet måste följa det här formatet. DPS stöder registrerings-ID:t på upp till 128 tecken. Den maximala längden på det gemensamma ämnesnamnet i ett X.509-certifikat är dock 64 tecken. Registrerings-ID:t är därför begränsat till 64 tecken när du använder X.509-certifikat.Certifikatfilen är Base 64-kodad. Om du vill visa ämnesnamnet (CN) och andra egenskaper för certifikatfilen anger du följande kommando:
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
Exempelkoden kräver en privat nyckel som inte är krypterad. Kör följande kommando för att skapa en okrypterad privat nyckel:
När du uppmanas att ange lösenfras för device-key.pem:, använder du samma passfras som du gjorde tidigare,
1234
.
Håll Git Bash-prompten öppen. Du behöver det senare i den här snabbstarten.
C#-exempelkoden har konfigurerats för att använda X.509-certifikat som lagras i en lösenordsskyddad PKCS#12-formaterad fil (certificate.pfx
). Du behöver fortfarande den PEM-formaterade certifikatfilen för offentlig nyckel (device-cert.pem
) som du precis skapade för att skapa en enskild registreringspost senare i den här snabbstarten.
Om du vill generera den PKCS12-formaterade fil som förväntas av exemplet anger du följande kommando:
När du uppmanas att ange lösenfras för device-key.pem:, använder du samma passfras som du gjorde tidigare,
1234
.När du uppmanas att ange exportera lösenord: använder du lösenordet
1234
.När du uppmanas att verifiera – Ange Exportera lösenord: använder du lösenordet
1234
igen.En PKCS12-formaterad certifikatfil (certificate.pfx) ska nu genereras i katalogen där du körde
openssl
kommandot.Kopiera den PKCS12-formaterade certifikatfilen till projektkatalogen för X.509-enhetsetableringsexemplet. Den angivna sökvägen är relativ till den plats där du laddade ned exempelrepo.
cp certificate.pfx ./azure-iot-sdk-csharp/provisioning/device/samples/"Getting Started"/X509Sample
Du behöver inte Git Bash-prompten för resten av den här snabbstarten. Men du kanske vill hålla det öppet för att kontrollera certifikatet om du har problem i senare steg.
Exempelkoden kräver en privat nyckel som inte är krypterad. Kör följande kommando för att skapa en okrypterad privat nyckel:
När du uppmanas att ange lösenfras för device-key.pem:, använder du samma passfras som du gjorde tidigare,
1234
.Kopiera enhetscertifikatet och den okrypterade privata nyckeln till projektkatalogen för X.509-enhetsetableringsexemplet. Den angivna sökvägen är relativ till den plats där du laddade ned SDK:et.
cp device-cert.pem ./azure-iot-sdk-node/provisioning/device/samples cp unencrypted-device-key.pem ./azure-iot-sdk-node/provisioning/device/samples
Du behöver inte Git Bash-prompten för resten av den här snabbstarten. Men du kanske vill hålla det öppet för att kontrollera certifikatet om du har problem i senare steg.
Kopiera enhetscertifikatet och den privata nyckeln till projektkatalogen för X.509-enhetsetableringsexemplet. Den angivna sökvägen är relativ till den plats där du laddade ned SDK:et.
cp device-cert.pem ./azure-iot-sdk-python/samples/async-hub-scenarios cp device-key.pem ./azure-iot-sdk-python/samples/async-hub-scenarios
Du behöver inte Git Bash-prompten för resten av den här snabbstarten. Men du kanske vill hålla det öppet för att kontrollera certifikatet om du har problem i senare steg.
Java-exempelkoden kräver en privat nyckel som inte är krypterad. Kör följande kommando för att skapa en okrypterad privat nyckel:
När du uppmanas att ange lösenfras för device-key.pem:, använder du samma passfras som du gjorde tidigare,
1234
.
Håll Git Bash-prompten öppen. Du behöver det senare i den här snabbstarten.
Skapa en enhetsregistrering
Azure IoT Device Provisioning Service stöder två typer av registreringar:
- Registreringsgrupper: används för att registrera flera relaterade enheter.
- Enskilda registreringar: Används för att registrera en enskild enhet.
Den här artikeln visar en enskild registrering för en enskild enhet som ska etableras med en IoT-hubb.
Logga in på Azure Portal och navigera till instansen av enhetsetableringstjänsten.
Välj Hantera registreringar i avsnittet Inställningar i navigeringsmenyn.
Välj fliken Enskilda registreringar och välj sedan Lägg till enskild registrering.
På sidan Registrering + etablering av sidan Lägg till registrering anger du följande information för att konfigurera registreringsinformationen:
Fält beskrivning Attest Välj X.509-klientcertifikat som attesteringsmekanism. X.509-certifikatinställningar Ladda upp ett eller två certifikat som ska användas för att verifiera enheten för den här registreringen. Etableringsstatus Markera kryssrutan Aktivera den här registreringen om du vill att den här registreringen ska vara tillgänglig för att etablera enheten. Avmarkera den här rutan om du vill att registreringen ska inaktiveras. Du kan ändra den här inställningen senare. Ometableringsprincip Välj en återetableringsprincip som visar hur du vill att DPS ska hantera enheter som begär ometablering. Mer information finns i Ometablera principer. Välj Nästa: IoT-hubbar.
På fliken IoT-hubbar på sidan Lägg till registrering anger du följande information för att avgöra vilka IoT-hubbar som registreringen kan etablera enheter till:
Fält beskrivning IoT-målhubbar Välj en eller flera av dina länkade IoT-hubbar eller lägg till en ny länk till en IoT-hubb. Mer information om hur du länkar IoT-hubbar till din DPS-instans finns i Länka och hantera IoT-hubbar. Allokeringsprincip Om du har valt fler än en länkad IoT-hubb väljer du hur du vill tilldela enheter till de olika hubbarna. Mer information om allokeringsprinciper finns i Använda allokeringsprinciper.
Om du bara valde en länkad IoT-hubb rekommenderar vi att du använder principen för jämnt viktad distribution .Välj Nästa: Enhetsinställningar
På fliken Enhetsinställningar på sidan Lägg till registrering anger du följande information för att definiera hur nyligen etablerade enheter ska konfigureras:
Fält beskrivning Enhets-ID Ange ett enhets-ID som ska tilldelas till den etablerade enheten i IoT Hub. Om du inte anger något enhets-ID används registrerings-ID:t. IoT Edge Kontrollera Aktivera IoT Edge på etablerade enheter om den etablerade enheten ska köra Azure IoT Edge. Avmarkera den här rutan om den här registreringen gäller för en enhet som inte är IoT Edge-aktiverad. Enhetstaggar Använd den här textrutan om du vill ange eventuella taggar som du vill använda för enhetstvillingen för den etablerade enheten. Önskade egenskaper Använd den här textrutan om du vill ange önskade egenskaper som du vill använda för enhetstvillingen för den etablerade enheten. Mer information finns i Understand and use device twins in IoT Hub (Förstå och använda enhetstvillingar i IoT Hub).
Välj Nästa: Granska + skapa.
På fliken Granska + skapa kontrollerar du alla dina värden och väljer sedan Skapa.
Förbereda och köra enhetsetableringskoden
I det här avsnittet uppdaterar du exempelkoden för att skicka enhetens startsekvens till enhetsetableringstjänstens instans. Den här startsekvensen gör att enheten identifieras och tilldelas till en IoT-hubb som är länkad till DPS-instansen.
I det här avsnittet använder du git bash-prompten och Visual Studio IDE.
Konfigurera enhetskoden för etablering
I det här avsnittet uppdaterar du exempelkoden med instansinformationen för enhetsetableringstjänsten.
I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten.
Kopiera ID-omfångsvärdet.
Starta Visual Studio och öppna den nya lösningsfilen som skapades i katalogen
cmake
som du skapade i roten på git-lagringsplatsen azure-iot-sdk-c. Lösningsfilen heterazure_iot_sdks.sln
.I Solution Explorer för Visual Studio navigerar du till Provision_Samples > prov_dev_client_sample > Källfiler och öppnar prov_dev_client_sample.c.
Hitta konstanten
id_scope
och ersätt värdet med ditt ID-omfångsvärde som du kopierade i steg 2.static const char* id_scope = "0ne00000A0A";
Hitta definitionen för funktionen
main()
i samma fil. Kontrollera att variabelnhsm_type
är inställd påSECURE_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;
Spara dina ändringar.
Högerklicka på projektet prov_dev_client_sample och välj Ange som startprojekt.
Konfigurera den anpassade HSM-stub-koden
Detaljerna för att interagera med faktisk säker maskinvarubaserad lagring varierar beroende på maskinvaran. Därför hårdkodas certifikatet och den privata nyckeln som används av den simulerade enheten i den här snabbstarten i den anpassade HSM-stub-koden (Hardware Security Module).
Så här uppdaterar du den anpassade HSM-stub-koden för att simulera enhetens identitet med ID my-x509-device
:
I Solution Explorer för Visual Studio navigerar du till Provision_Samples > custom_hsm_example > Källfiler och öppnar custom_hsm_example.c.
Uppdatera strängvärdet för strängkonstanten
COMMON_NAME
med det vanliga namnet du använde när du genererade enhetscertifikatet.my-x509-device
static const char* const COMMON_NAME = "my-x509-device";
Uppdatera strängvärdet för konstantsträngen
CERTIFICATE
med enhetscertifikatet device-cert.pem som du genererade tidigare.Syntaxen för certifikattexten i exemplet måste följa följande mönster utan extra blanksteg eller parsning som görs av Visual Studio.
static const char* const CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" "-----END CERTIFICATE-----";
Att uppdatera det här strängvärdet manuellt kan vara felbenäget. Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet
CERTIFICATE
och skriver det till utdata.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' device-cert.pem
Kopiera och klistra in utdatacertifikattexten för konstantvärdet.
Uppdatera strängvärdet för konstanten
PRIVATE_KEY
med den okrypterade privata nyckeln för enhetscertifikatet, unencrypted-device-key.pem.Syntaxen för den privata nyckeltexten måste följa följande mönster utan extra blanksteg eller parsning som görs av Visual Studio.
static const char* const PRIVATE_KEY = "-----BEGIN RSA PRIVATE KEY-----\n" "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" "-----END RSA PRIVATE KEY-----";
Att uppdatera det här strängvärdet manuellt kan vara felbenäget. Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet
PRIVATE_KEY
och skriver det till utdata.sed -e 's/^/"/;$ !s/$/""\\n"/;$ s/$/"/' unencrypted-device-key.pem
Kopiera och klistra in utdatatexten för den privata nyckeln för konstantvärdet.
Spara dina ändringar.
Högerklicka på projektet custom_hsm_-_example och välj Skapa.
Viktigt!
Du måste skapa custom_hsm_example projektet innan du skapar resten av lösningen i nästa avsnitt.
Kör exemplet
I Visual Studio-menyn väljer du Felsökning>Starta utan felsökning för att köra lösningen. Om du uppmanas att återskapa projektet väljer du Ja för att återskapa projektet innan du kör det.
Följande utdata är ett exempel på hur den simulerade enheten
my-x509-device
startar och ansluter till etableringstjänsten. Enheten tilldelas till en IoT-hubb och registreras: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:
I det här avsnittet använder du din Windows-kommandotolk.
I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten.
Kopiera ID-omfångsvärdet.
I windows-kommandotolken ändrar du till katalogen X509Sample. Den här katalogen finns i katalogen .\azure-iot-sdk-csharp\provisioning\device\samples\getting started\X509Sample utanför katalogen där du klonade exemplen på datorn.
Ange följande kommando för att skapa och köra X.509-enhetsetableringsexemplet (ersätt
<IDScope>
värdet med det ID-omfång som du kopierade i föregående avsnitt. Certifikatfilen är som standard ./certificate.pfx och frågar efter .pfx-lösenordet.dotnet run -- -s <IDScope>
Om du vill skicka certifikatet och lösenordet som en parameter kan du använda följande format.
Kommentar
Ytterligare parametrar kan skickas när programmet körs för att ändra TransportType (-t) och GlobalDeviceEndpoint (-g).
dotnet run -- -s 0ne00000A0A -c certificate.pfx -p 1234
Enheten ansluter till DPS och tilldelas till en IoT-hubb. Sedan skickar enheten ett telemetrimeddelande till IoT-hubben.
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.
I det här avsnittet använder du din Windows-kommandotolk.
I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten.
Kopiera ID-omfångsvärdet.
I windows-kommandotolken går du till exempelkatalogen och installerar de paket som behövs i exemplet. Sökvägen som visas är relativ till den plats där du klonade SDK:et.
cd .\azure-iot-sdk-node\provisioning\device\samples npm install
Exemplet använder fem miljövariabler för att autentisera och etablera en IoT-enhet med DPS. Dessa miljövariabler är:
Variabelnamn beskrivning PROVISIONING_HOST
Slutpunkten som ska användas för att ansluta till din DPS-instans. I den här snabbstarten använder du den globala slutpunkten, global.azure-devices-provisioning.net
.PROVISIONING_IDSCOPE
ID-omfånget för din DPS-instans. PROVISIONING_REGISTRATION_ID
Registrerings-ID för din enhet. Det måste matcha det vanliga ämnesnamnet i enhetscertifikatet. CERTIFICATE_FILE
Sökvägen till enhetscertifikatfilen. KEY_FILE
Sökvägen till enhetens privata nyckelfil. Lägg till miljövariabler för den globala enhetsslutpunkten och ID-omfånget. Ersätt
<id-scope>
med det värde som du kopierade i steg 2.set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<id-scope>
Ange miljövariabeln för enhetsregistrerings-ID:t. Registrerings-ID:t för IoT-enheten måste matcha ämnesnamnet på enhetscertifikatet. Om du har följt stegen i den här snabbstarten för att generera ett självsignerat testcertifikat är
my-x509-device
både ämnesnamnet och registrerings-ID:t för enheten.set PROVISIONING_REGISTRATION_ID=my-x509-device
Ange miljövariablerna för enhetscertifikatet och (okrypterade) privata nyckelfiler för enheter.
set CERTIFICATE_FILE=.\device-cert.pem set KEY_FILE=.\unencrypted-device-key.pem
Kör exemplet och kontrollera att enheten har etablerats.
node register_x509.js
Du bör se utdata som liknar följande exempel:
registration succeeded assigned hub=contoso-hub-2.azure-devices.net deviceId=my-x509-device Client connected send status: MessageEnqueued
I det här avsnittet använder du din Windows-kommandotolk.
I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten.
Kopiera värdena för ID-omfånget och den globala enhetens slutpunkt .
I windows-kommandotolken går du till katalogen för det provision_x509.py exemplet. Sökvägen som visas är relativ till den plats där du klonade SDK:et.
cd ./azure-iot-sdk-python/samples/async-hub-scenarios
Det här exemplet använder sex miljövariabler för att autentisera och etablera en IoT-enhet med DPS. Dessa miljövariabler är:
Variabelnamn beskrivning PROVISIONING_HOST
Den globala slutpunkt som används för att ansluta till din DPS-instans. PROVISIONING_IDSCOPE
ID-omfånget för din DPS-instans. DPS_X509_REGISTRATION_ID
Registrerings-ID för din enhet. Den måste också matcha ämnesnamnet på enhetscertifikatet. X509_CERT_FILE
Sökvägen till enhetscertifikatfilen. X509_KEY_FILE
Sökvägen till den privata nyckelfilen för enhetscertifikatet. PASS_PHRASE
Lösenfrasen som du använde för att kryptera certifikatet och filen med privata nycklar ( 1234
).Lägg till miljövariablerna för den globala enhetsslutpunkten och ID-omfånget.
set PROVISIONING_HOST=global.azure-devices-provisioning.net set PROVISIONING_IDSCOPE=<ID scope for your DPS resource>
Ange miljövariabeln för registrerings-ID:t. Registrerings-ID:t för IoT-enheten måste matcha ämnesnamnet på enhetscertifikatet. Om du har följt stegen i den här snabbstarten för att generera ett självsignerat testcertifikat är
my-x509-device
både ämnesnamnet och registrerings-ID:t för enheten.set DPS_X509_REGISTRATION_ID=my-x509-device
Ange miljövariablerna för certifikatfilen, den privata nyckelfilen och lösenfrasen.
set X509_CERT_FILE=./device-cert.pem set X509_KEY_FILE=./device-key.pem set PASS_PHRASE=1234
Granska koden för provision_x509.py. Om du inte använder Python version 3.7 eller senare gör du den kodändring som nämns här för att ersätta
asyncio.run(main())
och spara ändringarna.Kör exemplet. Exemplet ansluter till DPS, som etablerar enheten till en IoT-hubb. När enheten har etablerats skickar exemplet några testmeddelanden till IoT-hubben.
$ 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
I det här avsnittet använder du både windows-kommandotolken och Git Bash-prompten.
I Azure Portal väljer du fliken Översikt för enhetsetableringstjänsten.
Kopiera värdena för ID-omfånget och den globala enhetens slutpunkt .
I windows-kommandotolken navigerar du till exempelprojektmappen. Sökvägen som visas är relativ till den plats där du klonade SDK:et
cd .\azure-iot-sdk-java\provisioning\provisioning-device-client-samples\provisioning-X509-sample
Ange etableringstjänsten och X.509-identitetsinformationen i exempelkoden. Den här informationen används under etableringen för attestering av den simulerade enheten före enhetsregistrering.
Öppna filen
.\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java
i din favoritredigerare.Uppdatera följande värden med ID-omfånget och den globala slutpunkten för etableringstjänsten som du kopierade tidigare.
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;
Uppdatera värdet för konstantsträngen
leafPublicPem
med värdet för certifikatet device-cert.pem.Syntaxen för certifikattext måste följa följande mönster utan extra blanksteg eller tecken.
private static final String leafPublicPem = "-----BEGIN CERTIFICATE-----\n" + "MIIFOjCCAyKgAwIBAgIJAPzMa6s7mj7+MA0GCSqGSIb3DQEBCwUAMCoxKDAmBgNV\n" + ... "MDMwWhcNMjAxMTIyMjEzMDMwWjAqMSgwJgYDVQQDDB9BenVyZSBJb1QgSHViIENB\n" + "-----END CERTIFICATE-----";
Att uppdatera det här strängvärdet manuellt kan vara felbenäget. Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet
leafPublicPem
och skriver det till utdata.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' device-cert.pem
Kopiera och klistra in utdatacertifikattexten för konstantvärdet.
Uppdatera strängvärdet för konstanten
leafPrivateKey
med den okrypterade privata nyckeln för enhetscertifikatet, unencrypted-device-key.pem.Syntaxen för den privata nyckeltexten måste följa följande mönster utan extra blanksteg eller tecken.
private static final String leafPrivateKey = "-----BEGIN PRIVATE KEY-----\n" + "MIIJJwIBAAKCAgEAtjvKQjIhp0EE1PoADL1rfF/W6v4vlAzOSifKSQsaPeebqg8U\n" + ... "X7fi9OZ26QpnkS5QjjPTYI/wwn0J9YAwNfKSlNeXTJDfJ+KpjXBcvaLxeBQbQhij\n" + "-----END PRIVATE KEY-----";
Att uppdatera det här strängvärdet manuellt kan vara felbenäget. Om du vill generera rätt syntax kan du kopiera och klistra in följande kommando i Git Bash-prompten och trycka på RETUR. Det här kommandot genererar syntaxen för strängkonstantvärdet
leafPrivateKey
och skriver det till utdata.sed 's/^/"/;$ !s/$/\\n" +/;$ s/$/"/' unencrypted-device-key.pem
Kopiera och klistra in utdatatexten för den privata nyckeln för konstantvärdet.
Spara dina ändringar.
Skapa exemplet och gå sedan till
target
mappen.mvn clean install cd target
Versionen matar ut .jar fil i
target
mappen med följande filformat:provisioning-x509-sample-{version}-with-deps.jar
; till exempel:provisioning-x509-sample-1.8.1-with-deps.jar
. Kör .jar-filen. Du kan behöva ersätta versionen i följande kommando.java -jar ./provisioning-x509-sample-1.8.1-with-deps.jar
Exemplet ansluter till DPS, som etablerar enheten till en IoT-hubb. När enheten har etablerats skickar exemplet några testmeddelanden till IoT-hubben.
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!
Bekräfta registreringen av enhetsetablering
Om du vill se vilken IoT-hubb som enheten har etablerats till kan du granska registreringsinformationen för den enskilda registrering som du skapade tidigare:
I Azure Portal går du till enhetsetableringstjänsten.
I menyn Inställningar väljer du Hantera registreringar.
Välj Enskilda registreringar. X.509-registreringsposten som du skapade tidigare, my-x509-device, bör visas i listan.
Välj registreringsposten. Den IoT-hubb som enheten tilldelades till och dess enhets-ID visas under Registreringsstatus.
Så här verifierar du enheten i din IoT-hubb:
I Azure Portal går du till den IoT-hubb som enheten tilldelades till.
I menyn Enhetshantering väljer du Enheter.
Om enheten har etablerats bör dess enhets-ID, my-x509-device, visas i listan med Status inställt som aktiverat. Om du inte ser enheten väljer du Uppdatera.
Viktigt!
Om du ändrade din inledande enhetstvillingstatus från standardvärdet i registreringsposten för din enhet kan den hämta önskad tvillingstatus från hubben och agera utifrån det. Mer information finns i Understand and use device twins in IoT Hub (Förstå och använda enhetstvillingar i IoT Hub)
Rensa resurser
Om du planerar att fortsätta arbeta med och utforska enhetsklientexemplet ska du inte rensa resurserna som skapades i den här snabbstarten. Om du inte planerar att fortsätta använder du följande steg för att ta bort alla resurser som skapats av den här snabbstarten.
Ta bort enhetsregistreringen
Stäng utdatafönstret för enhetsklientexemplet på datorn.
På den vänstra menyn i Azure Portal väljer du Alla resurser.
Välj enhetsetableringstjänsten.
I menyn Inställningar väljer du Hantera registreringar.
Välj fliken Enskilda registreringar .
Markera kryssrutan bredvid registrerings-ID:t för den enhet som du registrerade i den här snabbstarten.
Välj Ta bort längst upp på sidan.
Ta bort enhetsregistreringen från IoT Hub
På den vänstra menyn i Azure Portal väljer du Alla resurser.
Välj din IoT-hubb.
I menyn Utforskare väljer du IoT-enheter.
Markera kryssrutan bredvid enhets-ID:t för den enhet som du registrerade i den här snabbstarten.
Välj Ta bort längst upp på sidan.
Nästa steg
I den här snabbstarten etablerade du en enda enhet till din IoT-hubb med hjälp av en enskild registrering. Lär dig sedan hur du etablerar flera enheter över flera hubbar.