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

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.

Följande krav gäller för en Windows-utvecklingsmiljö.

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 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.

  1. Öppna en webbläsare och gå till versionssidan för Azure IoT C SDK.

  2. Välj fliken Taggar överst på sidan.

  3. Kopiera taggnamnet för den senaste versionen av Azure IoT C SDK.

  4. 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.

  5. När åtgärden är klar kör du följande kommandon från azure-iot-sdk-c katalogen:

    mkdir cmake
    cd cmake
    
  6. 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 katalogen cmake 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.

    cmake -Duse_prov_client:BOOL=ON -Dhsm_custom_lib=c:/azure-iot-sdk-c/cmake/provisioning_client/samples/custom_hsm_example/Debug/custom_hsm_example.lib ..
    

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.

  1. 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.

  1. 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
    
  2. 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.

  1. I Git Bash-prompten navigerar du till en katalog där du vill skapa dina certifikat.

  2. 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.

  3. När du uppmanas att ange PEM-passfras:, använder du frasen 1234pass .

  4. 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.

  5. Certifikatfilen är Base 64-kodad. Om du vill visa ämnesnamnet (CN) och andra egenskaper för certifikatfilen anger du följande kommando:

    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
    
  1. Exempelkoden kräver en privat nyckel som inte är krypterad. Kör följande kommando för att skapa en okrypterad privat nyckel:

    winpty openssl rsa -in device-key.pem -out unencrypted-device-key.pem
    
  2. 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.

  1. Om du vill generera den PKCS12-formaterade fil som förväntas av exemplet anger du följande kommando:

    winpty openssl pkcs12 -inkey device-key.pem -in device-cert.pem -export -out certificate.pfx
    
  2. När du uppmanas att ange lösenfras för device-key.pem:, använder du samma passfras som du gjorde tidigare, 1234.

  3. När du uppmanas att ange exportera lösenord: använder du lösenordet 1234.

  4. 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.

  5. 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.

  1. Exempelkoden kräver en privat nyckel som inte är krypterad. Kör följande kommando för att skapa en okrypterad privat nyckel:

    winpty openssl rsa -in device-key.pem -out unencrypted-device-key.pem
    
  2. När du uppmanas att ange lösenfras för device-key.pem:, använder du samma passfras som du gjorde tidigare, 1234.

  3. 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.

  1. 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.

  1. Java-exempelkoden kräver en privat nyckel som inte är krypterad. Kör följande kommando för att skapa en okrypterad privat nyckel:

    winpty openssl pkey -in device-key.pem -out unencrypted-device-key.pem
    
  2. 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:

Den här artikeln visar en enskild registrering för en enskild enhet som ska etableras med en IoT-hubb.

  1. Logga in på Azure-portalen och gå till instansen av enhetsetableringstjänsten.

  2. Välj Hantera registreringar i avsnittet Inställningar i navigeringsmenyn.

  3. Välj fliken Enskilda registreringar och välj sedan Lägg till enskild registrering.

    Skärmbild som visar alternativet lägg till individuell registrering.

  4. På sidan Registrering + etablering av sidan Lägg till registrering anger du följande information för att konfigurera registreringsinformationen:

    Fält beskrivning
    Intyg 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.
  5. Välj Nästa: IoT-hubbar.

  6. På fliken IoT-hubbarsidan 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 .
  7. Välj Nästa: Enhetsinställningar

  8. På fliken Enhetsinställningarsidan 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).

  9. Välj Nästa: Granska + skapa.

  10. 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.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera ID-omfångsvärdet.

    Skärmbild av ID-omfånget på Azure-portalen.

  3. 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 heter azure_iot_sdks.sln.

  4. 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.

  5. 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";
    
  6. Hitta definitionen för funktionen main() i samma fil. Kontrollera att variabeln hsm_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;
    
  7. Spara dina ändringar.

  8. 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:

  1. I Solution Explorer för Visual Studio navigerar du till Provision_Samples > custom_hsm_example > Källfiler och öppnar custom_hsm_example.c.

  2. 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";
    
  3. 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.

  4. 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.

  5. Spara dina ändringar.

  6. 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

  1. 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.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera ID-omfångsvärdet.

    Skärmbild av ID-omfånget på Azure-portalen.

  3. 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.

  4. 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
    
  5. 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.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera ID-omfångsvärdet.

    Skärmbild av ID-omfånget på Azure-portalen.

  3. 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.
  4. 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>
    
  5. 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
    
  6. 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
    
  7. 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.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera värdena för ID-omfånget och den globala enhetens slutpunkt .

    Skärmbild av ID-omfånget och den globala enhetsslutpunkten på Azure-portalen.

  3. 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).
  4. 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>
    
  5. 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
    
  6. 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
    
  7. 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.

  8. 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.

  1. I Azure-portalen väljer du fliken Översikt för enhetsetableringstjänsten.

  2. Kopiera värdena för ID-omfånget och den globala enhetens slutpunkt .

    Skärmbild av ID-omfånget och den globala enhetsslutpunkten på Azure-portalen.

  3. 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
    
  4. 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.

    1. Öppna filen .\src\main\java\samples\com\microsoft\azure\sdk\iot\ProvisioningX509Sample.java i din favoritredigerare.

    2. 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;
      
      
    3. 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.

    4. 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.

    5. Spara dina ändringar.

  5. Skapa exemplet och gå sedan till target mappen.

    mvn clean install
    cd target
    
  6. 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 [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    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 [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    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 [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] )
    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 [54d9c6b5-3da9-49fe-9343-caa6864f9a02] Message Id [28069a3d-f6be-4274-a48b-1ee539524eeb] ) 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:

  1. Gå till enhetsetableringstjänsten i Azure-portalen.

  2. På menyn Inställningar väljer du Hantera registreringar.

  3. Välj Enskilda registreringar. X.509-registreringsposten som du skapade tidigare, my-x509-device, bör visas i listan.

  4. 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:

  1. I Azure-portalen går du till den IoT-hubb som enheten har tilldelats till.

  2. I menyn Enhetshantering väljer du Enheter.

  3. 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.

    Skärmbild som visar att enheten är registrerad med IoT-hubben i Azure-portalen.

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

  1. Stäng utdatafönstret för enhetsklientexemplet på datorn.

  2. På den vänstra menyn i Azure-portalen väljer du Alla resurser.

  3. Välj enhetsetableringstjänsten.

  4. På menyn Inställningar väljer du Hantera registreringar.

  5. Välj fliken Enskilda registreringar .

  6. Markera kryssrutan bredvid registrerings-ID:t för den enhet som du registrerade i den här snabbstarten.

  7. Välj Ta bort längst upp på sidan.

Ta bort enhetsregistreringen från IoT Hub

  1. På den vänstra menyn i Azure-portalen väljer du Alla resurser.

  2. Välj din IoT-hubb.

  3. I menyn Utforskareväljer du IoT-enheter.

  4. Markera kryssrutan bredvid enhets-ID:t för den enhet som du registrerade i den här snabbstarten.

  5. 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.