Zelfstudie: Inschrijving configureren via Secure Transport Server voor Azure IoT Edge

Van toepassing op:IoT Edge 1.5-vinkje IoT Edge 1.5 Vinkje voor IoT Edge 1.4 IoT Edge 1.4

Belangrijk

IoT Edge 1.5 LTS en IoT Edge 1.4 LTS worden ondersteund releases. IoT Edge 1.4 LTS eindigt op 12 november 2024. Raadpleeg IoT Edge bijwerken als u een eerdere versie hebt.

Met Azure IoT Edge kunt u uw apparaten configureren voor het gebruik van een INSCHRIJVING via EEN EST-server (Secure Transport) voor het beheren van x509-certificaten.

Deze zelfstudie begeleidt u bij het hosten van een EST-testserver en het configureren van een IoT Edge-apparaat voor de inschrijving en verlenging van x509-certificaten. In deze zelfstudie leert u het volgende:

  • Een EST-testserver maken en hosten
  • DPS-groepsinschrijving configureren
  • Apparaat configureren

Diagram met een overzicht op hoog niveau van de drie stappen die nodig zijn om deze zelfstudie te voltooien.

Vereisten

Wat is inschrijving via Secure Transport?

Inschrijving via SECURE Transport (EST) is een cryptografisch protocol waarmee de uitgifte van x.509-certificaten wordt geautomatiseerd. Het wordt gebruikt voor PKI-clients (Public Key Infrastructure), zoals IoT Edge die clientcertificaten nodig hebben die zijn gekoppeld aan een certificeringsinstantie (CA). EST vervangt de noodzaak van handmatig certificaatbeheer, wat riskant en foutgevoelig kan zijn.

EST-server

Voor certificaatuitgifte en verlenging hebt u een EST-server nodig die toegankelijk is voor uw apparaten.

Belangrijk

Voor hoogwaardige oplossingen kunt u het volgende overwegen: GlobalSign IoT Edge-inschrijving of DigiCert IoT-Apparaatbeheer.

Voor testen en ontwikkelen kunt u een EST-testserver gebruiken. In deze zelfstudie maken we een EST-testserver.

EST-server uitvoeren op apparaat

Om snel aan de slag te gaan, ziet u in deze zelfstudie de stappen voor het lokaal implementeren van een eenvoudige EST-server in een container op het IoT Edge-apparaat. Deze methode is de eenvoudigste methode om het uit te proberen.

Dockerfile maakt gebruik van Ubuntu 18.04, een Cisco-bibliotheek met de naam libesten voorbeeldservercode. Deze is geconfigureerd met de volgende instelling die u kunt wijzigen:

  • Basis-CA geldig voor 20 jaar
  • EST-servercertificaat geldig voor 10 jaar
  • Stel het certificaat standaarddagen in op 1 om EST-verlenging te testen
  • EST-server wordt lokaal uitgevoerd op het IoT Edge-apparaat in een container

Let op

Gebruik dit Dockerfile niet in productie.

  1. Verbinding maken op het apparaat, bijvoorbeeld met behulp van SSH, waar u IoT Edge hebt geïnstalleerd.

  2. Maak een bestand met de naam Dockerfile (hoofdlettergevoelig) en voeg de voorbeeldinhoud toe met behulp van uw favoriete teksteditor.

    Tip

    Als u uw EST-server in Azure Container Instance wilt hosten, wijzigt myestserver.westus.azurecontainer.io u de DNS-naam van uw EST-server. Houd er bij het kiezen van een DNS-naam rekening mee dat het DNS-label voor een Azure Container Instance minimaal vijf tekens lang moet zijn.

    # 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. Maak in de map met uw Dockerfileinstallatiekopie de installatiekopie uit het Dockerfile-voorbeeldbestand.

    sudo docker build . --tag est
    
  4. Start de container en stel de poort 8085 van de container beschikbaar op poort 8085 op de host.

    sudo docker run -d -p 8085:8085 est
    
  5. Uw EST-server wordt nu uitgevoerd en kan worden bereikt via localhost poort 8085. Controleer of deze beschikbaar is door een opdracht uit te voeren om het servercertificaat te zien.

    openssl s_client -showcerts -connect localhost:8085
    
  6. U ziet -----BEGIN CERTIFICATE----- halverwege de uitvoer. Bij het ophalen van het certificaat wordt gecontroleerd of de server bereikbaar is en of het certificaat kan worden weergegeven.

Tip

Als u deze container in de cloud wilt uitvoeren, bouwt u de installatiekopieën en pusht u de installatiekopieën naar Azure Container Registry. Volg vervolgens de quickstart om te implementeren in Azure Container Instance.

CA-certificaat downloaden

Voor elk apparaat is het CA-certificaat (Certificate Authority) vereist dat is gekoppeld aan een apparaat-id-certificaat.

  1. Maak op het IoT Edge-apparaat de /var/aziot/certs map als deze niet bestaat, wijzig de map in het apparaat.

    # 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. Haal het CA-certificaat van de EST-server op in de /var/aziot/certs map en geef het cacert.crt.pemeen naam.

    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. Certificaten moeten eigendom zijn van de sleutelservicegebruiker aziotcs. Stel het eigendom in op aziotcs voor alle certificaatbestanden en stel machtigingen in. Zie Machtigingsvereisten voor meer informatie over certificaateigendom en machtigingen.

    # 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 {} \;
    

IoT Edge-apparaat inrichten met DPS

Met Device Provisioning Service kunt u automatisch certificaten uitgeven en vernieuwen vanaf een EST-server in IoT Edge. Wanneer u de EST-zelfstudieserver gebruikt, verlopen de identiteitscertificaten in één dag, waardoor handmatige inrichting met IoT Hub onpraktisch is, omdat telkens wanneer het certificaat verloopt, de vingerafdruk handmatig moet worden bijgewerkt in IoT Hub. Met DPS CA-verificatie met inschrijvingsgroep kunnen de apparaat-id-certificaten zonder handmatige stappen worden vernieuwd.

CA-certificaat uploaden naar DPS

  1. Als u geen Device Provisioning Service hebt gekoppeld aan IoT Hub, raadpleegt u quickstart: De IoT Hub Device Provisioning Service instellen met Azure Portal.

  2. Breng het cacert.crt.pem bestand van uw apparaat over naar een computer met toegang tot Azure Portal, zoals uw ontwikkelcomputer. Een eenvoudige manier om het certificaat over te dragen, is om extern verbinding te maken met uw apparaat, het certificaat weer te geven met behulp van de opdracht cat /var/aziot/certs/cacert.crt.pem, de volledige uitvoer te kopiëren en de inhoud te plakken in een nieuw bestand op uw ontwikkelcomputer.

  3. Navigeer in Azure Portal naar uw exemplaar van IoT Hub Device Provisioning Service.

  4. Selecteer onder Instellingen Certificaten en vervolgens +Toevoegen.

    Een schermopname van het toevoegen van een CA-certificaat aan Device Provisioning Service met behulp van Azure Portal.

    Instelling Weergegeven als
    Certificaatnaam Geef een beschrijvende naam op voor het CA-certificaat
    PEM- of .cer-bestand van het certificaat Blader naar de cacert.crt.pem est-server
    Certificaatstatus instellen op geverifieerd bij uploaden Het selectievakje inschakelen
  5. Selecteer Opslaan.

Inschrijvingsgroep maken

  1. Navigeer in Azure Portal naar uw exemplaar van IoT Hub Device Provisioning Service.

  2. Selecteer inschrijvingen beheren onder Instellingen.

  3. Selecteer Inschrijvingsgroep toevoegen en voer vervolgens de volgende stappen uit om de inschrijving te configureren.

  4. Kies op het tabblad Registratie en inrichting de volgende instellingen:

    Een schermopname die DPS-inschrijvingsgroep toevoegt met behulp van Azure Portal.

    Instelling Weergegeven als
    Attestation-mechanisme X.509-certificaten selecteren die zijn geüpload naar dit Device Provisioning Service-exemplaar
    Primair certificaat Kies uw certificaat in de vervolgkeuzelijst
    Groepsnaam Geef een beschrijvende naam op voor deze groepsinschrijving
    Inrichtingsstatus Schakel het selectievakje Deze inschrijving inschakelen in
  5. Kies uw IoT Hub in de lijst op het tabblad IoT Hubs .

  6. Schakel op het tabblad Apparaatinstellingen het selectievakje IoT Edge inschakelen op ingerichte apparaten in.

    De andere instellingen zijn niet relevant voor de zelfstudie. U kunt de standaardinstellingen accepteren.

  7. Selecteer Controleren + maken.

Nu er een inschrijving voor het apparaat bestaat, kan de IoT Edge-runtime automatisch apparaatcertificaten voor de gekoppelde IoT Hub beheren.

IoT Edge-apparaat configureren

Werk op het IoT Edge-apparaat het IoT Edge-configuratiebestand bij om apparaatcertificaten van de EST-server te gebruiken.

  1. Open het IoT Edge-configuratiebestand met behulp van een editor. Gebruik bijvoorbeeld de nano editor om het /etc/aziot/config.toml bestand te openen.

    sudo nano /etc/aziot/config.toml
    
  2. Voeg de volgende secties in het configuratiebestand toe of vervang deze. Deze configuratie-instellingen gebruiken in eerste instantie gebruikersnaam- en wachtwoordverificatie om het apparaatcertificaat van de EST-server op te halen. Het apparaatcertificaat wordt gebruikt voor verificatie bij de EST-server voor toekomstige certificaatvernieuwingen.

    Vervang de volgende tekst voor tijdelijke aanduidingen: <DPS-ID-SCOPE> door het id-bereik van de DPS die is gekoppeld aan de IoT Hub die het geregistreerde apparaat bevat en myiotedgedevice door de apparaat-id die is geregistreerd in Azure IoT Hub. U vindt de waarde van het id-bereik op de dps-overzichtspagina.

    # 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"
    

    Notitie

    In dit voorbeeld gebruikt IoT Edge een gebruikersnaam en wachtwoord voor verificatie bij de EST-server telkens wanneer er een certificaat moet worden verkregen. Deze methode wordt niet aanbevolen in productie omdat 1) voor het opslaan van een geheim in tekst zonder opmaak en 2) IoT Edge ook een identiteitscertificaat moet gebruiken om te verifiëren bij de EST-server. Wijzigen voor productie:

    1. Overweeg het gebruik van langlevende bootstrapcertificaten die tijdens de productie op het apparaat kunnen worden opgeslagen, vergelijkbaar met de aanbevolen methode voor DPS. Zie Een apparaat verifiëren met behulp van certificaten die dynamisch via EST zijn uitgegeven om te zien hoe u bootstrap-certificaat voor EST-server configureert.
    2. Configureer [cert_issuance.est.identity_auto_renew] met dezelfde syntaxis als de configuratie voor automatisch vernieuwen van het inrichtingscertificaat hierboven.

    Op deze manier gebruikt de IoT Edge-certificaatservice het bootstrap-certificaat voor initiële verificatie met EST-server en vraagt een identiteitscertificaat aan voor toekomstige EST-aanvragen naar dezelfde server. Als het EST-identiteitscertificaat om een of andere reden verloopt voordat het wordt vernieuwd, valt IoT Edge terug op het gebruik van het bootstrap-certificaat.

  3. Voer sudo iotedge config apply uit om de nieuwe instellingen toe te passen.

  4. Voer deze opdracht uit sudo iotedge check om de configuratie van uw IoT Edge-apparaat te controleren. Alle configuratiecontroles moeten lukken. Voor deze zelfstudie kunt u fouten en waarschuwingen voor productiegereedheid en waarschuwingen, DNS-serverwaarschuwingen en connectiviteitscontroles negeren.

  5. Navigeer naar uw apparaat in IoT Hub. Certificaatvingerafdrukken zijn automatisch toegevoegd aan het apparaat met behulp van DPS en de EST-server.

    Een schermopname van ioT Hub-apparaatinstellingen in Azure Portal. Velden met vingerafdruk van certificaat geven waarden weer.

    Notitie

    Wanneer u een nieuw IoT Edge-apparaat maakt, wordt de statuscode 417 -- The device's deployment configuration is not set in the Azure portal. weergegeven. Deze status is normaal en betekent dat het apparaat gereed is voor het ontvangen van een module-implementatie.

Certificaatvernieuwing testen

U kunt de apparaat-id-certificaten onmiddellijk opnieuw uitgeven door de bestaande certificaten en sleutels van het apparaat te verwijderen en vervolgens de IoT Edge-configuratie toe te passen. IoT Edge detecteert de ontbrekende bestanden en vraagt nieuwe certificaten aan.

  1. Stop de IoT Edge-runtime op het IoT Edge-apparaat.

    sudo iotedge system stop
    
  2. Verwijder de bestaande certificaten en sleutels.

    sudo sh -c "rm /var/lib/aziot/certd/certs/*"
    sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
    
  3. Pas de IoT Edge-configuratie toe om certificaten te vernieuwen.

    sudo iotedge config apply
    

    Mogelijk moet u enkele minuten wachten totdat de runtime is gestart.

  4. Navigeer naar uw apparaat in IoT Hub. De vingerafdruk van het certificaat is bijgewerkt.

    Een schermopname van ioT Hub-apparaatinstellingen in Azure Portal. In velden met vingerafdruk van certificaat worden nieuwe waarden weergegeven.

  5. Geef de certificaatbestanden weer met behulp van de opdracht sudo ls -l /var/lib/aziot/certd/certs. U ziet nu datums voor het maken van de certificaatbestanden van het apparaat.

  6. Gebruik de openssl opdracht om de inhoud van het nieuwe certificaat te controleren. Voorbeeld:

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

    Vervang de bestandsnaam van het apparaatcertificaat (.cer) door het certificaatbestand van uw apparaat.

    U ziet dat het geldigheidsdatumbereik van het certificaat is gewijzigd.

Hieronder vindt u optionele andere manieren waarop u certificaatvernieuwing kunt testen. Deze controles laten zien hoe IoT Edge certificaten van de EST-server vernieuwt wanneer ze verlopen of ontbreken. Na elke test kunt u nieuwe vingerafdrukken controleren in Azure Portal en de opdracht gebruiken openssl om het nieuwe certificaat te verifiëren.

  1. Wacht een dag totdat het certificaat is verlopen. De EST-testserver is geconfigureerd voor het maken van certificaten die na één dag verlopen. Het certificaat wordt automatisch vernieuwd door IoT Edge.
  2. Probeer het percentage threshold voor automatische verlenging config.toml in te stellen (momenteel ingesteld op 80% in de voorbeeldconfiguratie). Stel 10% deze bijvoorbeeld elke ~2 uur in en bekijk de verlenging van het certificaat.
  3. Pas het threshold getal aan op een geheel getal gevolgd door m (minuten). Stel deze bijvoorbeeld in op 60m en bekijk de verlenging van het certificaat 1 uur voordat deze verloopt.

Resources opschonen

U kunt de resources en configuraties die u in deze zelfstudie hebt gemaakt behouden en opnieuw gebruiken. Anders kunt u de lokale configuraties en Azure-resources die u in dit artikel hebt gemaakt, verwijderen om kosten te voorkomen.

Azure-resources verwijderen

Het verwijderen van de Azure-resources en resourcegroepen kan niet ongedaan worden gemaakt. Zorg ervoor dat u niet per ongeluk de verkeerde resourcegroep of resources verwijdert. Als u de IoT-hub in een bestaande resourcegroep hebt gemaakt met de resources die u wilt behouden, moet u alleen de IoT-hub zelf verwijderen en niet de resourcegroep.

Om de resources te verwijderen:

  1. Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.

  2. Selecteer de naam van de resourcegroep die uw IoT Edge-testresources bevat.

  3. Bekijk de lijst met resources die zich in de resourcegroep bevinden. Als u alle mappen wilt verwijderen, kunt u Resourcegroep verwijderen selecteren. Als u slechts een deel ervan wilt verwijderen, kunt u in elke resource afzonderlijk klikken om ze te verwijderen.

Volgende stappen