Zelfstudie: Inschrijving configureren via Secure Transport Server voor Azure IoT Edge
Van toepassing op: IoT Edge 1.5 IoT Edge 1.4
Belangrijk
IoT Edge 1.5 LTS is de ondersteunde release. IoT Edge 1.4 LTS is het einde van de levensduur vanaf 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
Vereisten
- Een bestaand IoT Edge-apparaat waarop de nieuwste Azure IoT Edge-runtime is geïnstalleerd. Als u een testapparaat wilt maken, voltooit u de quickstart : Uw eerste IoT Edge-module implementeren op een virtueel Linux-apparaat.
- Uw IoT Edge-apparaat vereist Azure IoT Edge Runtime 1.2 of hoger voor EST-ondersteuning. Azure IoT Edge Runtime 1.3 of hoger vereist voor het vernieuwen van EST-certificaten.
- IoT Hub Device Provisioning Service (DPS) gekoppeld aan IoT Hub. Zie de quickstart: IoT Hub Device Provisioning Service instellen met Azure Portal voor meer informatie over het configureren van DPS.
Notitie
Als u EST en IoT Edge wilt gebruiken voor het automatisch uitgeven en vernieuwen van apparaatidentiteitencertificaten, wat wordt aanbevolen voor productie, moet IoT Edge worden ingericht als onderdeel van een op DPS CA gebaseerde inschrijvingsgroep. Andere inrichtingsmethoden, waaronder handmatige X.509-inrichting met IoT Hub en DPS met afzonderlijke inschrijving, bieden geen ondersteuning voor het automatisch vernieuwen van apparaatidentiteitscertificaten.
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 libest
en 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.
Maak verbinding met het apparaat, bijvoorbeeld met behulp van SSH, waar u IoT Edge hebt geïnstalleerd.
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
Maak in de map met uw
Dockerfile
installatiekopie de installatiekopie uit het Dockerfile-voorbeeldbestand.sudo docker build . --tag est
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
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
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.
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 doesn'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
Haal het CA-certificaat van de EST-server op in de
/var/aziot/certs
map en geef hetcacert.crt.pem
een 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
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
Als u geen Device Provisioning Service hebt gekoppeld aan IoT Hub, raadpleegt u quickstart: De IoT Hub Device Provisioning Service instellen met Azure Portal.
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 opdrachtcat /var/aziot/certs/cacert.crt.pem
, de volledige uitvoer te kopiëren en de inhoud te plakken in een nieuw bestand op uw ontwikkelcomputer.Navigeer in Azure Portal naar uw exemplaar van IoT Hub Device Provisioning Service.
Selecteer onder Instellingen certificaten en vervolgens +Toevoegen.
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-serverCertificaatstatus instellen op geverifieerd bij uploaden Het selectievakje inschakelen Selecteer Opslaan.
Inschrijvingsgroep maken
Navigeer in Azure Portal naar uw exemplaar van IoT Hub Device Provisioning Service.
Selecteer Onder Instellingen de optie Inschrijvingen beheren.
Selecteer Inschrijvingsgroep toevoegen en voer vervolgens de volgende stappen uit om de inschrijving te configureren.
Kies op het tabblad Registratie en inrichting de volgende instellingen:
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 Kies uw IoT Hub in de lijst op het tabblad IoT Hubs .
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.
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.
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
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 enmyiotedgedevice
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 om elke keer dat deze een certificaat moet verkrijgen, te verifiëren bij de EST-server. 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:
- 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.
- 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.
Voer
sudo iotedge config apply
uit om de nieuwe instellingen toe te passen.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.Navigeer naar uw apparaat in IoT Hub. Certificaatvingerafdrukken zijn automatisch toegevoegd aan het apparaat met behulp van DPS en de EST-server.
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.
Stop de IoT Edge-runtime op het IoT Edge-apparaat.
sudo iotedge system stop
Verwijder de bestaande certificaten en sleutels.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
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.
Navigeer naar uw apparaat in IoT Hub. De vingerafdruk van het certificaat is bijgewerkt.
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.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.
- 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.
- Probeer het percentage
threshold
voor automatische verlengingconfig.toml
in te stellen (momenteel ingesteld op 80% in de voorbeeldconfiguratie). Stel10%
deze bijvoorbeeld elke ~2 uur in en bekijk de verlenging van het certificaat. - Pas het
threshold
getal aan op een geheel getal gevolgd doorm
(minuten). Stel deze bijvoorbeeld in op60m
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:
Meld u aan bij Azure Portal en selecteer vervolgens Resourcegroepen.
Selecteer de naam van de resourcegroep die uw IoT Edge-testresources bevat.
Bekijk de lijst met resources die uw resourcegroep bevat. Als u alle mappen wilt verwijderen, kunt u Resourcegroep verwijderen selecteren. Als u slechts enkele resources wilt verwijderen, kunt u elke resource selecteren om ze afzonderlijk te verwijderen.
Volgende stappen
- Zie de voorbeeldconfiguratie als u de EST-server wilt gebruiken om Edge CA-certificaten uit te geven.
- Het gebruik van gebruikersnaam en wachtwoord voor het opstarten van verificatie bij EST-server wordt niet aanbevolen voor productie. In plaats daarvan kunt u overwegen om langlevende bootstrapcertificaten te gebruiken die tijdens de productie op het apparaat kunnen worden opgeslagen, vergelijkbaar met de aanbevolen benadering 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.
- EST-server kan ook worden gebruikt om certificaten uit te geven voor alle apparaten in een hiërarchie. Afhankelijk van of u over ISA-95-vereisten beschikt, kan het nodig zijn om een keten van EST-servers uit te voeren met één op elke laag of de API-proxymodule te gebruiken om de aanvragen door te sturen. Zie kevin's blog voor meer informatie.
- Voor oplossingen op bedrijfsniveau kunt u overwegen: GlobalSign IoT Edge-inschrijving, DigiCert IoT-Apparaatbeheer en Keytos EZCA.
- Zie Begrijpen hoe Azure IoT Edge certificaten gebruikt voor meer informatie over certificaten.