Självstudie: Konfigurera registrering över säker transportserver för Azure IoT Edge
Gäller för: IoT Edge 1.5 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
Förutsättningar
- En befintlig IoT Edge-enhet med den senaste Azure IoT Edge-körningen installerad. Om du behöver skapa en testenhet slutför du Snabbstart: Distribuera din första IoT Edge-modul till en virtuell Linux-enhet.
- Din IoT Edge-enhet kräver Azure IoT Edge-körning 1.2 eller senare för EST-stöd. Azure IoT Edge-körning 1.3 eller senare krävs för förnyelse av EST-certifikat.
- IoT Hub Device Provisioning Service (DPS) som är länkad till IoT Hub. Information om hur du konfigurerar DPS finns i Snabbstart: Konfigurera IoT Hub Device Provisioning Service med Azure Portal.
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 libest
och 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.
Anslut till enheten, till exempel med hjälp av SSH, där du har installerat IoT Edge.
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
I katalogen som innehåller din
Dockerfile
skapar du avbildningen från Dockerfile-exemplet.sudo docker build . --tag est
Starta containern och exponera containerns port 8085 för port 8085 på värden.
sudo docker run -d -p 8085:8085 est
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
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.
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
Hämta CA-certifikatet från EST-servern till
/var/aziot/certs
katalogen och ge detcacert.crt.pem
namnet .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
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
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.
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 kommandotcat /var/aziot/certs/cacert.crt.pem
, kopiera hela utdata och klistra in innehållet i en ny fil på utvecklingsdatorn.I Azure Portal navigerar du till din instans av IoT Hub Device Provisioning Service.
Under Inställningar väljer du Certifikat och sedan +Lägg till.
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-servernAnge certifikatstatus till verifierad vid uppladdning Markera kryssrutan Välj Spara.
Skapa registreringsgrupp
I Azure Portal navigerar du till din instans av IoT Hub Device Provisioning Service.
Under Inställningar väljer du Hantera registreringar.
Välj Lägg till registreringsgrupp och slutför sedan följande steg för att konfigurera registreringen.
På fliken Registrering + etablering väljer du följande inställningar:
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 På fliken IoT-hubbar väljer du din IoT Hub i listan.
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.
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.
Ö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
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 ochmyiotedgedevice
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:
- Ö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.
- 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.
Kör
sudo iotedge config apply
för att tillämpa de nya inställningarna.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.Gå till enheten i IoT Hub. Tumavtryck för certifikat har lagts till på enheten automatiskt med DPS och EST-servern.
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.
Stoppa IoT Edge-körningen på IoT Edge-enheten.
sudo iotedge system stop
Ta bort befintliga certifikat och nycklar.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
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.
Gå till enheten i IoT Hub. Certifikatets tumavtryck har uppdaterats.
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.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.
- 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.
- Prova att justera procentandelen i
threshold
för automatisk förnyelse som angetts iconfig.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. - Prova att
threshold
justera till ett heltal följt avm
(minuter). Ange den till60m
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:
Logga in på Azure-portalen och välj Resursgrupper.
Välj namnet på resursgruppen som innehåller dina IoT Edge-testresurser.
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
- Information om hur du använder EST-servern för att utfärda Edge CA-certifikat finns i exempelkonfigurationen.
- Användning av användarnamn och lösenord för bootstrap-autentisering till EST-servern rekommenderas inte för produktion. Överväg i stället 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.
- EST-servern kan även användas för att utfärda certifikat för alla enheter i en hierarki. Beroende på om du har ISA-95-krav kan det vara nödvändigt att köra en kedja med EST-servrar med en i varje lager eller använda API-proxymodulen för att vidarebefordra begäranden. Mer information finns i Kevins blogg.
- För lösningar i företagsklass bör du tänka på: GlobalSign IoT Edge Enroll eller DigiCert IoT Enhetshanteraren
- Mer information om certifikat finns i Förstå hur Azure IoT Edge använder certifikat.