Autentisera en underordnad enhet på Azure IoT Hub

Gäller för:  Ja-ikonen IoT Edge 1,1  Ja-ikonen IoT Edge 1,2

I ett scenario med transparent gateway behöver nedströmsenheter (ibland kallade lövenheter eller underordnade enheter) identiteter i IoT Hub som andra enheter. Den här artikeln går igenom alternativen för att autentisera en nedströmsenhet till IoT Hub och visar sedan hur du deklarerar gatewayanslutningen.

Det finns tre allmänna steg för att konfigurera en lyckad transparent gatewayanslutning. Den här artikeln beskriver det andra steget:

  1. Konfigurera gatewayenheten som en server så att nedströmsenheter kan ansluta till den på ett säkert sätt. Konfigurera gatewayen för att ta emot meddelanden från nedströmsenheter och dirigera dem till rätt mål. Dessa steg finns i Konfigurera en IoT Edge att fungera som en transparent gateway.
  2. Skapa en enhetsidentitet för nedströmsenheten så att den kan autentisera med IoT Hub. Konfigurera nedströmsenheten så att den skickar meddelanden via gatewayenheten.
  3. Anslut nedströmsenheten till gatewayenheten och börja skicka meddelanden. Dessa steg finns i Anslut nedströmsenhet till en Azure IoT Edge gateway.

Nedströmsenheter kan autentisera med IoT Hub med någon av tre metoder: symmetriska nycklar (kallas ibland för delade åtkomstnycklar), X.509-själv signerade certifikat eller X.509-certifikatutfärdare (CA) signerade certifikat. Autentiseringsstegen liknar de steg som används för att konfigurera en icke-IoT-Edge-enhet med IoT Hub, med små skillnader för att deklarera gateway-relationen.

Automatisk etablering av underordnade enheter med Azure IoT Hub Device Provisioning Service (DPS) stöds inte.

Förutsättningar

Slutför stegen i Konfigurera en IoT Edge som ska fungera som en transparent gateway.

Om du använder X.509-autentisering genererar du certifikat för den underordnade enheten. Ha samma rotcertifikatutfärdarcertifikat och det skript för certifikatgenerering som du använde för artikeln transparent gateway som är tillgänglig för användning igen.

Den här artikeln refererar till gatewayens värdnamn på flera punkter. Gatewayens värdnamn deklareras i parametern hostname i konfigurationsfilen på den IoT Edge gatewayenheten. Det refereras till i anslutningssträngen för den underordnade enheten. Gatewayens värdnamn måste kunna matchas till en IP-adress, antingen med hjälp av DNS eller en värdfilpost på den underordnade enheten.

Registrera en enhet med IoT Hub

Välj hur du vill att nedströmsenheten ska autentisera med IoT Hub:

  • Autentisering med symmetrisk nyckel:IoT Hub skapar en nyckel som du lägger på den underordnade enheten. När enheten autentiseras kontrollerar IoT Hub att de två nycklarna matchar. Du behöver inte skapa ytterligare certifikat för att använda autentisering med symmetrisk nyckel.

    Den här metoden är snabbare att komma igång om du testar gatewayer i ett utvecklings- eller testscenario.

  • X.509-självsignerad autentisering: Kallas ibland för tumavtrycksautentisering eftersom du delar tumavtrycket från enhetens X.509-certifikat med IoT Hub.

    Certifikatautentisering rekommenderas för enheter i produktionsscenarier.

  • X.509 CA-signerad autentisering:Upload certifikatutfärdaren för att IoT Hub. När enheter presenterar sina X.509-certifikat för autentisering IoT Hub kontrollerar att det tillhör en förtroendekedja som signerats av samma rotcertifikatutfärdarcertifikat.

    Certifikatautentisering rekommenderas för enheter i produktionsscenarier.

Autentisering med symmetrisk nyckel

Autentisering med symmetrisk nyckel eller autentisering med delad åtkomstnyckel är det enklaste sättet att autentisera med IoT Hub. Med symmetrisk nyckelautentisering associeras en base64-nyckel med ditt IoT-enhets-ID i IoT Hub. Du inkluderar nyckeln i dina IoT-program så att enheten kan presentera den när den ansluter till IoT Hub.

Lägg till en ny IoT-enhet i din IoT-hubb med antingen Azure Portal, Azure CLI eller IoT-tillägget för Visual Studio Code. Kom ihåg att nedströmsenheter måste identifieras i IoT Hub vanliga IoT-enheter, inte IoT Edge enheter.

När du skapar den nya enhetsidentiteten anger du följande information:

  • Skapa ett ID för din enhet.

  • Välj Symmetrisk nyckel som autentiseringstyp.

  • Välj Ange en överordnad enhet och välj den IoT Edge gatewayenhet som den här underordnade enheten ska ansluta via. Du kan alltid ändra den överordnade senare.

    Skapa enhets-ID med symmetrisk nyckelauth i portalen

    Anteckning

    Att ange den överordnade enheten brukade vara ett valfritt steg för nedströmsenheter som använder symmetrisk nyckelautentisering. Men från och med IoT Edge version 1.1.0 måste varje underordnad enhet tilldelas till en överordnad enhet.

    Du kan konfigurera IoT Edge för att gå tillbaka till det tidigare beteendet genom att ange miljövariabeln AuthenticationMode till värdet CloudAndScope.

Du kan också använda IoT-tillägget för Azure CLI för att slutföra samma åtgärd. I följande exempel används kommandot az iot hub device-identity för att skapa en ny IoT-enhet med symmetrisk nyckelautentisering och tilldela en överordnad enhet:

az iot hub device-identity create -n {iothub name} -d {new device ID} --pd {existing gateway device ID}

Hämta och ändra sedan anslutningssträngen så att enheten kan ansluta via sin gateway.

X.509-själv signerad autentisering

För X.509-själv signerad autentisering, som ibland kallas tumavtrycksautentisering, måste du skapa certifikat som ska placera på nedströmsenheten. De här certifikaten har ett tumavtryck som du delar med IoT Hub för autentisering.

  1. Skapa två enhetscertifikat (primär och sekundär) för den underordnade enheten med certifikatutfärdaren.

    Om du inte har en certifikatutfärdare för att skapa X.509-certifikat kan du använda IoT Edge för att skapa underordnade enhetscertifikat. Följ stegen för att skapa själv signerade certifikat. Använd samma rotcertifikatutfärdarcertifikat som genererade certifikaten för din gatewayenhet.

    Om du skapar egna certifikat kontrollerar du att enhetscertifikatet ämnesnamn är inställt på det enhets-ID som du använder när du registrerar IoT-enheten i Azure IoT Hub. Den här inställningen krävs för autentisering.

  2. Hämta SHA1-fingeravtrycket (kallas tumavtryck i IoT Hub gränssnittet) från varje certifikat, som är en sträng med 40 hexadecimala tecken. Använd följande openssl-kommando för att visa certifikatet och hitta fingeravtrycket:

    • Windows:

      openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprint
      
    • Linux:

      openssl x509 -in <path to primary device certificate>.cert.pem -text -fingerprint | sed 's/[:]//g'
      

    Kör det här kommandot två gånger, en gång för det primära certifikatet och en gång för det sekundära certifikatet. Du anger fingeravtryck för båda certifikaten när du registrerar en ny IoT-enhet med själv signerade X.509-certifikat.

  3. Gå till din IoT-hubb i Azure Portal och skapa en ny IoT-enhetsidentitet med följande värden:

    • Ange det enhets-ID som matchar ämnesnamnet för dina enhetscertifikat.
    • Välj X.509 Self-Signed som autentiseringstyp.
    • Klistra in de hexadecimala strängar som du kopierade från enhetens primära och sekundära certifikat.
    • Välj Ange en överordnad enhet och välj den IoT Edge gatewayenhet som den här underordnade enheten ska ansluta via. Du kan alltid ändra den överordnade senare.

    Skapa enhets-ID med själv signerad X.509-autentisering i portalen

  4. Kopiera både de primära och sekundära enhetscertifikaten och deras nycklar till valfri plats på den underordnade enheten. Flytta också en kopia av det delade rotcertifikatutfärdarcertifikatet som genererade både gatewayenhetscertifikatet och underordnade enhetscertifikat.

    Du refererar till dessa certifikatfiler i alla program på nedströmsenheten som ansluter till IoT Hub. Du kan använda en tjänst som Azure Key Vault eller en funktion som Secure Copy Protocol för att flytta certifikatfilerna.

  5. Beroende på vilket språk du föredrar kan du granska exempel på hur X.509-certifikat kan refereras till i IoT-program:

Du kan också använda IoT-tillägget för Azure CLI för att slutföra samma enhetsskapandeåtgärd. I följande exempel används kommandot az iot hub device-identity för att skapa en ny IoT-enhet med själv signerad X.509-autentisering och tilldelar en överordnad enhet:

az iot hub device-identity create -n {iothub name} -d {device ID} --pd {gateway device ID} --am x509_thumbprint --ptp {primary thumbprint} --stp {secondary thumbprint}

Hämta och ändra sedan anslutningssträngen så att enheten kan ansluta via sin gateway.

X.509 CA-signerad autentisering

För X.509-certifikatutfärdares (CA) signerad autentisering behöver du ett rotcertifikatutfärdarcertifikat registrerat i IoT Hub som du använder för att signera certifikat för din underordnade enhet. Alla enheter som använder ett certifikat som har problem med rotcertifikatutfärdaren eller något av dess mellanliggande certifikat kommer att tillåtas att autentisera.

Det här avsnittet baseras på den IoT Hub självstudieserien om X.509-certifikat. Introduktion till den här serien finns i Understanding Public Key Cryptography and X.509 Public Key Infrastructure (Förstå kryptering av offentliga nycklar och infrastruktur för offentliga nycklar i X.509).

  1. Skapa två enhetscertifikat (primär och sekundär) för den underordnade enheten med certifikatutfärdaren.

    Om du inte har en certifikatutfärdare för att skapa X.509-certifikat kan du använda IoT Edge för att skapa underordnade enhetscertifikat. Följ stegen för att skapa CA-signerade certifikat. Använd samma rotcertifikatutfärdarcertifikat som genererade certifikaten för din gatewayenhet.

  2. Följ instruktionerna i avsnittet Visa innehavarbevis i Konfigurera X.509-säkerhet i din Azure IoT Hub. I det avsnittet utför du följande steg:

    1. Upload ett rotcertifikatutfärdarcertifikat. Om du använder democertifikaten är rotcertifikatutfärdaren <path> /certs/azure-iot-test-only.root.ca.cert.pem.

    2. Kontrollera att du äger rotcertifikatutfärdaren.

  3. Följ instruktionerna i avsnittet Skapa en enhet IoT Hub konfigurera X.509-säkerhet i Azure IoT Hub. I det avsnittet utför du följande steg:

    1. Lägg till en ny enhet. Ange ett gemener för enhets-ID och välj autentiseringstypen X.509 CA-signerad.

    2. Ange en överordnad enhet. Välj Ange en överordnad enhet och välj IoT Edge gateway-enhet som ska tillhandahålla anslutningen till IoT Hub.

  4. Skapa en certifikatkedja för din nedströmsenhet. Använd samma rotcertifikatutfärdarcertifikat som du laddade upp till IoT Hub för att skapa den här kedjan. Använd samma enhets-ID i gemener som du gav till enhetsidentiteten i portalen.

  5. Kopiera enhetscertifikatet och nycklarna till valfri plats på den underordnade enheten. Flytta också en kopia av det delade rotcertifikatutfärdarcertifikatet som genererade både gatewayenhetscertifikatet och nedströmsenhetscertifikaten.

    Du refererar till dessa filer i alla program på den nedströmsenhet som ansluter till IoT Hub. Du kan använda en tjänst som Azure Key Vault eller en funktion som Secure copy protocol för att flytta certifikatfilerna.

  6. Beroende på vilket språk du föredrar kan du granska exempel på hur X.509-certifikat kan refereras till i IoT-program:

Du kan också använda IoT-tillägget för Azure CLI för att slutföra samma enhetsgenereringsåtgärd. I följande exempel används kommandot az iot hub device-identity för att skapa en ny IoT-enhet med X.509 CA-signerad autentisering och tilldelar en överordnad enhet:

az iot hub device-identity create -n {iothub name} -d {device ID} --pd {gateway device ID} --am x509_ca

Hämta och ändra sedan anslutningssträngen så att enheten kan ansluta via sin gateway.

Hämta och ändra anslutningssträngen

När du har skapat en IoT-enhetsidentitet i portalen kan du hämta dess primära eller sekundära nycklar. En av dessa nycklar måste ingå i anslutningssträngen som program använder för att kommunicera med IoT Hub. För autentisering med symmetrisk nyckel IoT Hub den fullständigt formatade anslutningssträngen i enhetsinformation för att underlätta för dig. Du måste lägga till extra information om gatewayenheten i anslutningssträngen.

Anslutningssträngar för nedströmsenheter behöver följande komponenter:

  • IoT-hubben som enheten ansluter till: Hostname={iothub name}.azure-devices.net
  • Enhets-ID:t som registrerats med hubben: DeviceID={device ID}
  • Autentiseringsmetoden, oavsett om det är symmetrisk nyckel eller X.509-certifikat
    • Om du använder autentisering med symmetrisk nyckel anger du antingen den primära eller sekundära nyckeln: SharedAccessKey={key}
    • Om du använder X.509-certifikatautentisering anger du en flagga: x509=true
  • Den gatewayenhet som enheten ansluter via. Ange värdet för värddatornamn från IoT Edge-gatewayenhetens konfigurationsfil: GatewayHostName={gateway hostname}

Tillsammans ser en fullständig anslutningssträng ut så här:

HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz;GatewayHostName=myGatewayDevice

Eller:

HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;x509=true;GatewayHostName=myGatewayDevice

Tack vare den överordnade/underordnade relationen kan du förenkla anslutningssträngen genom att anropa gatewayen direkt som anslutningsvärd. Exempel:

HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz

Du använder den här ändrade anslutningssträngen i nästa artikel i serien med transparent gateway.

Nästa steg

Nu har du en enhet IoT Edge din IoT-hubb och konfigurerad som en transparent gateway. Du har också en underordnad enhet registrerad hos din IoT-hubb och pekar på dess gatewayenhet.

Därefter måste du konfigurera nedströmsenheten så att den litar på gatewayenheten och ansluter till den på ett säkert sätt. Fortsätt till nästa artikel i serien med transparent gateway, skapa Anslut nedströmsenhet till en Azure IoT Edge gateway.