Självstudie: Konfigurera registrering över säker transportserver för Azure IoT Edge

Gäller för: Bockmarkering för IoT Edge 1.5 IoT Edge 1.5 Bockmarkering för IoT Edge 1.4 IoT Edge 1.4

Viktigt!

IoT Edge 1.5 LTS och IoT Edge 1.4 LTS stöds. IoT Edge 1.4 LTS upphör den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

Med Azure IoT Edge kan du konfigurera dina enheter så att de använder en EST-server (Enrollment over Secure Transport) för att hantera x509-certifikat.

Den här självstudien beskriver hur du är värd för en EST-testserver och konfigurerar en IoT Edge-enhet för registrering och förnyelse av x509-certifikat. I den här självstudien lär du dig att:

  • Skapa och vara värd för en EST-testserver
  • Konfigurera DPS-gruppregistrering
  • Konfigurera enhet

Diagram som visar översikt på hög nivå över de tre steg som krävs för att slutföra den här självstudien.

Förutsättningar

Vad är registrering över säker transport?

Registrering över säker transport (EST) är ett kryptografiskt protokoll som automatiserar utfärdandet av x.509-certifikat. Det används för PKI-klienter (Public Key Infrastructure), till exempel IoT Edge som behöver klientcertifikat som är kopplade till en certifikatutfärdare (CA). EST ersätter behovet av manuell certifikathantering, vilket kan vara riskabelt och felbenäget.

EST-server

För utfärdande och förnyelse av certifikat behöver du en EST-server som är tillgänglig för dina enheter.

Viktigt!

För lösningar i företagsklass bör du tänka på: GlobalSign IoT Edge Enroll eller DigiCert IoT Enhetshanteraren.

För testning och utveckling kan du använda en TEST EST-server. I den här självstudien skapar vi en EST-testserver.

Kör EST-server på enheten

För att snabbt komma igång visar den här självstudien stegen för att distribuera en enkel EST-server i en container lokalt på IoT Edge-enheten. Den här metoden är den enklaste metoden för att testa den.

Dockerfile använder Ubuntu 18.04, ett Cisco-bibliotek med namnet libestoch exempelserverkod. Den har konfigurerats med följande inställning som du kan ändra:

  • Rotcertifikatutfärdarcertifikatutfärdarna är giltiga i 20 år
  • EST-servercertifikatet är giltigt i 10 år
  • Ange standarddagar för certifikatet till 1 för att testa EST-förnyelse
  • EST-servern körs lokalt på IoT Edge-enheten i en container

Varning

Använd inte den här Dockerfile i produktion.

  1. Anslut till enheten, till exempel med hjälp av SSH, där du har installerat IoT Edge.

  2. Skapa en fil med namnet Dockerfile (skiftlägeskänslig) och lägg till exempelinnehållet med din favorittextredigerare.

    Dricks

    Om du vill vara värd för DIN EST-server i Azure Container Instance ändrar myestserver.westus.azurecontainer.io du till EST-serverns DNS-namn. När du väljer ett DNS-namn bör du vara medveten om att DNS-etiketten för en Azure Container-instans måste vara minst fem tecken lång.

    # DO NOT USE IN PRODUCTION - Use only for testing #
    
    FROM ubuntu:18.04
    
    RUN apt update && apt install -y apache2-utils git openssl libssl-dev build-essential && \
        git clone https://github.com/cisco/libest.git && cd libest && \
        ./configure --disable-safec && make install && \
        rm -rf /src && apt remove --quiet -y libssl-dev build-essential && \
        apt autoremove -y && apt clean -y && apt autoclean -y && \
        rm -rf /var/lib/apt /tmp/* /var/tmp/*
    
    WORKDIR /libest/example/server/
    
    # Setting the root CA expiration to 20 years
    RUN sed -i "s|-days 365|-days 7300 |g" ./createCA.sh
    
    ## If you want to host your EST server remotely (for example, an Azure Container Instance),
    ## change myestserver.westus.azurecontainer.io to the fully qualified DNS name of your EST server
    ## OR, change the IP address
    ## and uncomment the corresponding line.
    # RUN sed -i "s|DNS.2 = ip6-localhost|DNS.2 = myestserver.westus.azurecontainer.io|g" ./ext.cnf
    # RUN sed -i "s|IP.2 = ::1|IP.2 = <YOUR EST SERVER IP ADDRESS>|g" ./ext.cnf
    
    # Set EST server certificate to be valid for 10 years
    RUN sed -i "s|-keyout \$EST_SERVER_PRIVKEY -subj|-keyout \$EST_SERVER_PRIVKEY -days 7300 -subj |g" ./createCA.sh
    
    # Create the CA
    RUN echo 1 | ./createCA.sh
    
    # Set cert default-days to 1 to show EST renewal
    RUN sed -i "s|default_days   = 365|default_days   = 1 |g" ./estExampleCA.cnf
    
    # The EST server listens on port 8085 by default
    # Uncomment to change the port to 443 or something else. If changed, EXPOSE that port instead of 8085. 
    # RUN sed -i "s|estserver -c|estserver -p 443 -c |g" ./runserver.sh
    EXPOSE 8085
    CMD ./runserver.sh
    
  3. I katalogen som innehåller din Dockerfileskapar du avbildningen från Dockerfile-exemplet.

    sudo docker build . --tag est
    
  4. Starta containern och exponera containerns port 8085 för port 8085 på värden.

    sudo docker run -d -p 8085:8085 est
    
  5. Nu körs EST-servern och kan nås via localhost port 8085. Kontrollera att det är tillgängligt genom att köra ett kommando för att se dess servercertifikat.

    openssl s_client -showcerts -connect localhost:8085
    
  6. Du bör se -----BEGIN CERTIFICATE----- halvvägs genom utdata. När du hämtar certifikatet verifieras att servern kan nås och kan visa sitt certifikat.

Dricks

Om du vill köra den här containern i molnet skapar du avbildningen och push-överför avbildningen till Azure Container Registry. Följ sedan snabbstarten för att distribuera till Azure Container Instance.

Ladda ned CA-certifikat

Varje enhet kräver certifikatutfärdarcertifikatet (CA) som är associerat med ett enhetsidentitetscertifikat.

  1. På IoT Edge-enheten skapar du katalogen om den /var/aziot/certs inte finns och ändrar sedan katalogen till den.

    # If the certificate directory doen't exist, create, set ownership, and set permissions
    sudo mkdir -p /var/aziot/certs
    sudo chown aziotcs:aziotcs /var/aziot/certs
    sudo chmod 755 /var/aziot/certs
    
    # Change directory to /var/aziot/certs
    cd /var/aziot/certs
    
  2. Hämta CA-certifikatet från EST-servern till /var/aziot/certs katalogen och ge det cacert.crt.pemnamnet .

    openssl s_client -showcerts -verify 5 -connect localhost:8085 < /dev/null | sudo awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}' && sudo cp cert2.pem cacert.crt.pem
    
  3. Certifikat ska ägas av nyckeltjänstanvändaren aziotcs. Ange ägarskapet till aziotcs för alla certifikatfiler och ange behörigheter. Mer information om certifikatägarskap och behörigheter finns i Behörighetskrav.

    # Give aziotcs ownership to certificates
    sudo chown -R aziotcs:aziotcs /var/aziot/certs
    # Read and write for aziotcs, read-only for others
    sudo find /var/aziot/certs -type f -name "*.*" -exec chmod 644 {} \;
    

Etablera IoT Edge-enhet med DPS

Med enhetsetableringstjänsten kan du automatiskt utfärda och förnya certifikat från en EST-server i IoT Edge. När du använder självstudiekursen för EST-servern upphör identitetscertifikaten att upphöra att gälla om en dag, vilket gör manuell etablering med IoT Hub opraktisk eftersom tumavtrycket måste uppdateras manuellt i IoT Hub varje gång certifikatet upphör att gälla. MED DPS CA-autentisering med registreringsgruppen kan enhetsidentitetscertifikaten förnyas utan några manuella steg.

Ladda upp CA-certifikat till DPS

  1. Om du inte har en enhetsetableringstjänst länkad till IoT Hub kan du läsa Snabbstart: Konfigurera IoT Hub Device Provisioning Service med Azure Portal.

  2. cacert.crt.pem Överför filen från enheten till en dator med åtkomst till Azure Portal till exempel utvecklingsdatorn. Ett enkelt sätt att överföra certifikatet är att fjärransluta till enheten, visa certifikatet med kommandot cat /var/aziot/certs/cacert.crt.pem, kopiera hela utdata och klistra in innehållet i en ny fil på utvecklingsdatorn.

  3. I Azure Portal navigerar du till din instans av IoT Hub Device Provisioning Service.

  4. Under Inställningar väljer du Certifikat och sedan +Lägg till.

    En skärmbild som lägger till CA-certifikat i Device Provisioning Service med hjälp av Azure Portal.

    Inställning Värde
    Certifikatnamn Ange ett eget namn för CA-certifikatet
    Certifikatets .pem- eller .cer-fil Bläddra till cacert.crt.pem från EST-servern
    Ange certifikatstatus till verifierad vid uppladdning Markera kryssrutan
  5. Välj Spara.

Skapa registreringsgrupp

  1. I Azure Portal navigerar du till din instans av IoT Hub Device Provisioning Service.

  2. Under Inställningar väljer du Hantera registreringar.

  3. Välj Lägg till registreringsgrupp och slutför sedan följande steg för att konfigurera registreringen.

  4. På fliken Registrering + etablering väljer du följande inställningar:

    En skärmbild som lägger till DPS-registreringsgrupp med hjälp av Azure Portal.

    Inställning Värde
    Attesteringsmekanism Välj X.509-certifikat som laddats upp till den här enhetsetableringstjänstens instans
    Primärt certifikat Välj ditt certifikat i listrutan
    Group name Ange ett eget namn för den här gruppregistreringen
    Etableringsstatus Markera kryssrutan Aktivera den här registreringen
  5. På fliken IoT-hubbar väljer du din IoT Hub i listan.

  6. På fliken Enhetsinställningar markerar du kryssrutan Aktivera IoT Edge på etablerade enheter .

    De andra inställningarna är inte relevanta för självstudien. Du kan acceptera standardinställningarna.

  7. Välj Granska + skapa.

Nu när det finns en registrering för enheten kan IoT Edge-körningen automatiskt hantera enhetscertifikat för den länkade IoT Hub.

Konfigurera IoT Edge-enhet

På IoT Edge-enheten uppdaterar du IoT Edge-konfigurationsfilen för att använda enhetscertifikat från EST-servern.

  1. Öppna IoT Edge-konfigurationsfilen med hjälp av ett redigeringsprogram. Använd till exempel redigeraren nano för att öppna /etc/aziot/config.toml filen.

    sudo nano /etc/aziot/config.toml
    
  2. Lägg till eller ersätt följande avsnitt i konfigurationsfilen. De här konfigurationsinställningarna använder användarnamn och lösenordsautentisering från början för att hämta enhetscertifikatet från EST-servern. Enhetscertifikatet används för att autentisera till EST-servern för framtida certifikatförnyelser.

    Ersätt följande platshållartext: <DPS-ID-SCOPE> med ID-omfånget för DPS som är länkat till IoT Hub som innehåller den registrerade enheten och myiotedgedevice med enhets-ID:t som är registrerat i Azure IoT Hub. Du hittar värdet för ID-omfånget på sidan Översikt över DPS.

    # DPS provisioning with X.509 certificate
    # Replace with ID Scope from your DPS
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "<DPS-ID-SCOPE>"
    
    [provisioning.attestation]
    method = "x509"
    registration_id = "myiotedgedevice"
    
    [provisioning.attestation.identity_cert]
    method = "est"
    common_name = "myiotedgedevice"
    
    # Auto renewal settings for the identity cert
    # Available only from IoT Edge 1.3 and above
    [provisioning.attestation.identity_cert.auto_renew]
    rotate_key = false
    threshold = "80%"
    retry = "4%"
    
    # Trusted root CA certificate in the global EST options
    # Optional if the EST server's TLS certificate is already trusted by the system's CA certificates.
    [cert_issuance.est]
        trusted_certs = [
            "file:///var/aziot/certs/cacert.crt.pem",
        ]
    
    # The default username and password for libest
    # Used for initial authentication to EST server
    #
    # Not recommended for production
    [cert_issuance.est.auth]
    username = "estuser"
    password = "estpwd"
    
    [cert_issuance.est.urls]
    default = "https://localhost:8085/.well-known/est"
    

    Kommentar

    I det här exemplet använder IoT Edge användarnamn och lösenord för att autentisera till EST-servern varje gång det behöver hämta ett certifikat. Den här metoden rekommenderas inte i produktion eftersom 1) den kräver att en hemlighet lagras i klartext och 2) IoT Edge bör använda ett identitetscertifikat för att autentisera till EST-servern också. Så här ändrar du för produktion:

    1. Överväg att använda långvariga bootstrap-certifikat som kan lagras på enheten under tillverkningen på liknande sätt som den rekommenderade metoden för DPS. Information om hur du konfigurerar bootstrap-certifikat för EST-servern finns i Autentisera en enhet med certifikat som utfärdas dynamiskt via EST.
    2. Konfigurera [cert_issuance.est.identity_auto_renew] med samma syntax som konfigurationen för automatisk förnyelse av etableringscertifikat ovan.

    På så sätt använder IoT Edge-certifikattjänsten bootstrap-certifikatet för inledande autentisering med EST-servern och begär ett identitetscertifikat för framtida EST-begäranden till samma server. Om EST-identitetscertifikatet av någon anledning upphör att gälla före förnyelsen återgår IoT Edge till att använda bootstrap-certifikatet.

  3. Kör sudo iotedge config apply för att tillämpa de nya inställningarna.

  4. Kör sudo iotedge check för att verifiera IoT Edge-enhetskonfigurationen. Alla konfigurationskontroller ska lyckas. I den här självstudien kan du ignorera produktionsberedskapsfel och varningar, DNS-servervarningar och anslutningskontroller.

  5. Gå till enheten i IoT Hub. Tumavtryck för certifikat har lagts till på enheten automatiskt med DPS och EST-servern.

    En skärmbild av enhetsinställningarna för IoT Hub i Azure Portal. Fält för tumavtryck för certifikat visar värden.

    Kommentar

    När du skapar en ny IoT Edge-enhet visas statuskoden 417 -- The device's deployment configuration is not set in the Azure portal. Den här statusen är normal och innebär att enheten är redo att ta emot en moduldistribution.

Testa certifikatförnyelse

Du kan omedelbart återutge enhetsidentitetscertifikaten genom att ta bort de befintliga certifikaten och nycklarna från enheten och sedan tillämpa IoT Edge-konfigurationen. IoT Edge identifierar saknade filer och begär nya certifikat.

  1. Stoppa IoT Edge-körningen på IoT Edge-enheten.

    sudo iotedge system stop
    
  2. Ta bort befintliga certifikat och nycklar.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. Använd IoT Edge-konfigurationen för att förnya certifikat.

    sudo iotedge config apply
    

    Du kan behöva vänta några minuter tills körningen startar.

  4. Gå till enheten i IoT Hub. Certifikatets tumavtryck har uppdaterats.

    En skärmbild av enhetsinställningarna för IoT Hub i Azure Portal. Fält för tumavtryck för certifikat visar nya värden.

  5. Visa en lista över certifikatfilerna med kommandot sudo ls -l /var/lib/aziot/certd/certs. Du bör se de senaste skapandedatumen för enhetscertifikatfilerna.

  6. openssl Använd kommandot för att kontrollera det nya certifikatinnehållet. Till exempel:

    sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
    

    Ersätt namnet på enhetscertifikatfilen (.cer) med enhetens certifikatfil.

    Observera att certifikatets giltighetsdatumintervall har ändrats.

Följande är valfria andra sätt att testa certifikatförnyelse. Dessa kontroller visar hur IoT Edge förnyar certifikat från EST-servern när de upphör att gälla eller saknas. Efter varje test kan du verifiera nya tumavtryck i Azure Portal och använda openssl kommandot för att verifiera det nya certifikatet.

  1. Försök att vänta en dag på att certifikatet ska upphöra att gälla. EST-testservern är konfigurerad för att skapa certifikat som upphör att gälla efter en dag. IoT Edge förnyar automatiskt certifikatet.
  2. Prova att justera procentandelen i threshold för automatisk förnyelse som angetts i config.toml (för närvarande inställd på 80 % i exempelkonfigurationen). Ställ till exempel in den på 10% och observera certifikatförnyelsen var ~2:e timme.
  3. Prova att threshold justera till ett heltal följt av m (minuter). Ange den till 60m exempel och observera certifikatförnyelse 1 timme innan den upphör att gälla.

Rensa resurser

Du kan behålla de resurser och konfigurationer som du skapade i den här självstudien och återanvända dem. Annars kan du ta bort de lokala konfigurationer och Azure-resurser som du använde i den här artikeln för att undvika avgifter.

Ta bort Azure-resurser

Det går inte att ångra borttagningen av Azure-resurser och resursgrupper. Var noga så att du inte tar bort fel resursgrupp eller resurser av misstag. Om du har skapat IoT-hubben i en befintlig resursgrupp som har resurser som du vill behålla tar du bara bort själva IoT Hub-resursen, inte resursgruppen.

Ta bort resurser:

  1. Logga in på Azure-portalen och välj Resursgrupper.

  2. Välj namnet på resursgruppen som innehåller dina IoT Edge-testresurser.

  3. Granska listan över resurser som resursgruppen innehåller. Om du vill ta bort alla kan du välja Ta bort resursgrupp. Om du bara vill ta bort några av dem kan du välja varje resurs för att ta bort dem individuellt.

Nästa steg