Esercitazione: configurare la registrazione sul server di trasporto sicuro per Azure IoT Edge
Si applica a: IoT Edge 1.5 IoT Edge 1.4
Importante
IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS raggiungerà il fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.
Con Azure IoT Edge è possibile configurare i dispositivi per l'uso di un server con registrazione di trasporto sicuro (EST) per gestire i certificati x509.
Questa esercitazione illustra come ospitare un server EST di test e configurare un dispositivo IoT Edge per la registrazione e il rinnovo dei certificati x509. In questa esercitazione apprenderai a:
- Creare e ospitare un server EST di test
- Configurare una registrazione di gruppo nel servizio Device Provisioning
- Configurare il dispositivo
Prerequisiti
- Un dispositivo IoT Edge esistente con il runtime di Azure IoT Edge più recente installato. Se è necessario creare un dispositivo di test, completare Avvio rapido: distribuire il primo modulo IoT Edge in un dispositivo Linux virtuale.
- Il dispositivo IoT Edge richiede il runtime di Azure IoT Edge 1.2 o versione successiva per il supporto EST. Il runtime di Azure IoT Edge 1.3 o versione successiva è necessario per il rinnovo del certificato EST.
- Servizio Device Provisioning in hub IoT (DPS) collegato ad Hub IoT. Per informazioni sulla configurazione del servizio Device Provisioning, vedere Avvio rapido: configurare il servizio Device Provisioning in hub IoT con il portale di Azure.
Che cos'è la registrazione di trasporto sicuro?
La registrazione di trasporto sicuro (EST) è un protocollo di crittografia che automatizza il rilascio di certificati x.509. Viene usato per i client con infrastruttura a chiave pubblica (PKI), ad esempio IoT Edge, che necessitano di certificati client associati a un'autorità di certificazione (CA). EST sostituisce la necessità di gestione manuale dei certificati, che può essere rischiosa e soggetta a errori.
Server EST
Per il rilascio e il rinnovo dei certificati, è necessario un server EST accessibile ai dispositivi.
Importante
Per le soluzioni di livello aziendale, prendere in considerazione: GlobalSign IoT Edge Enroll o DigiCert IoT Device Manager.
Per il test e lo sviluppo, è possibile usare un server EST di test. In questa esercitazione verrà creato un server EST di test.
Eseguire il server EST nel dispositivo
Per iniziare rapidamente, questa esercitazione illustra i passaggi per distribuire un semplice server EST in un contenitore in locale nel dispositivo IoT Edge. Questo metodo è l'approccio più semplice da provare.
Il Dockerfile usa Ubuntu 18.04, una libreria Cisco denominata libest
, e il codice del server di esempio. È configurato con l'impostazione seguente che è possibile modificare:
- CA radice valido per 20 anni
- Certificato server EST valido per 10 anni
- Impostare i giorni predefiniti del certificato su 1 per testare il rinnovo EST
- Il server EST viene eseguito localmente nel dispositivo IoT Edge in un contenitore
Attenzione
Non usare questo Dockerfile nell'ambiente di produzione.
Connettersi al dispositivo, ad esempio usando SSH, in cui è stato installato IoT Edge.
Creare un file denominato
Dockerfile
(con distinzione tra maiuscole e minuscole) e aggiungere il contenuto di esempio usando l'editor di testo preferito.Suggerimento
Se si vuole ospitare il server EST nell'istanza di Azure Container, passare
myestserver.westus.azurecontainer.io
al nome DNS del server EST. Quando si sceglie un nome DNS, tenere presente che l'etichetta DNS per un'istanza di Azure Container deve contenere almeno cinque caratteri.# 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
Nella directory contenente l'immagine
Dockerfile
, compilare l'immagine dal Dockerfile di esempio.sudo docker build . --tag est
Avviare il contenitore ed esporre la porta del contenitore 8085 alla porta 8085 nell'host.
sudo docker run -d -p 8085:8085 est
A questo punto, il server EST è in esecuzione e può essere raggiunto usando
localhost
sulla porta 8085. Verificare che sia disponibile eseguendo un comando per visualizzare il relativo certificato del server.openssl s_client -showcerts -connect localhost:8085
Verrà visualizzato
-----BEGIN CERTIFICATE-----
a metà dell'output. Il recupero del certificato verifica che il server sia raggiungibile e possa presentare il certificato.
Suggerimento
Per eseguire questo contenitore nel cloud, compilare l'immagine ed eseguire il push dell'immagine in Registro Azure Container. Seguire quindi la guida introduttiva per la distribuzione in Istanza di Azure Container.
Scaricare il certificato della CA
Ogni dispositivo richiede il certificato dell'autorità di certificazione (CA) associato a un certificato di identità del dispositivo.
Nel dispositivo IoT Edge, creare la directory
/var/aziot/certs
, se non esiste, quindi modificarla.# 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
Recuperare il certificato della CA dal server EST nella directory
/var/aziot/certs
e denominarlocacert.crt.pem
.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
I certificati devono essere di proprietà dell'utente del servizio chiavi aziotcs. Impostare la proprietà su aziotcs per tutti i file di certificato e impostare le autorizzazioni. Per altre informazioni sulla proprietà e sulle autorizzazioni del certificato, vedere Requisiti di autorizzazione.
# 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 {} \;
Effettuare il provisioning del dispositivo IoT Edge tramite il servizio Device Provisioning
L'uso del servizio Device Provisioning consente di rilasciare e rinnovare automaticamente i certificati da un server EST in IoT Edge. Quando si usa il server EST dell'esercitazione, i certificati di identità scadono in un giorno, pertanto il provisioning manuale con l'hub IoT risulta poco pratico in quanto, ogni volta che il certificato scade, l'identificazione personale deve essere aggiornata manualmente nell'hub IoT. L'autenticazione della CA del servizio Device Provisioning con il gruppo di registrazione consente di rinnovare i certificati di identità del dispositivo senza alcuna procedura manuale.
Caricare il certificato della CA nel servizio Device Provisioning
Se non si ha un servizio Device Provisioning collegato all'hub IoT, vedere Avvio rapido: configurare il servizio Device Provisioning in hub IoT con il portale di Azure.
Trasferire il file
cacert.crt.pem
dal dispositivo a un computer con accesso al portale di Azure, ad esempio il computer di sviluppo. Un modo semplice per trasferire il certificato consiste nel connettersi in remoto al dispositivo, visualizzare il certificato usando il comandocat /var/aziot/certs/cacert.crt.pem
, copiare l'intero output e incollare il contenuto in un nuovo file nel computer di sviluppo.Nel portale di Azure passare all'istanza del servizio Device Provisioning in hub IoT.
In Impostazioni, selezionare Certificati, quindi +Aggiungi.
Impostazione Valore Nome certificato Specificare un nome descrittivo per il certificato della CA File di certificato con estensione PEM o CER Passare al cacert.crt.pem
dal server ESTImpostare lo stato del certificato in Verificato al momento del caricamento Selezionare la casella di controllo Seleziona Salva.
Creare un gruppo di registrazioni
Nel portale di Azure passare all'istanza del servizio Device Provisioning in hub IoT.
In le impostazioni selezionare Gestisci registrazioni.
Selezionare Aggiungi gruppo di registrazioni, quindi completare la procedura seguente per configurare la registrazione.
Nella scheda Registrazione e provisioning scegliere le impostazioni seguenti:
Impostazione Valore Meccanismo di attestazione Selezionare i certificati X.509 caricati in questa istanza del servizio Device Provisioning Certificato primario Scegliere il certificato dall'elenco a discesa Nome del gruppo Specificare un nome descrittivo per la registrazione di gruppo Stato del provisioning Selezionare la casella di controllo Abilita questa registrazione Nella scheda Hub IoT, scegliere l'hub IoT dall'elenco.
Nella scheda Impostazioni dispositivo selezionare la casella di controllo Abilita IoT Edge nei dispositivi con provisioning.
Le altre impostazioni non sono rilevanti per l'esercitazione. È possibile accettare le impostazioni predefinite.
Selezionare Rivedi e crea.
Ora che esiste una registrazione per il dispositivo, il runtime IoT Edge può gestire automaticamente i certificati del dispositivo per l’hub IoT collegato.
Configurare il dispositivo IoT Edge
Nel dispositivo IoT Edge aggiornare il file di configurazione di IoT Edge per usare i certificati del dispositivo dal server EST.
Aprire il file di configurazione IoT Edge usando un editor. Usare, ad esempio, l'editor
nano
per aprire il file/etc/aziot/config.toml
.sudo nano /etc/aziot/config.toml
Aggiungere o sostituire le sezioni seguenti nel file di configurazione. Queste impostazioni di configurazione usano inizialmente l'autenticazione con nome utente e password per ottenere il certificato del dispositivo dal server EST. Il certificato del dispositivo viene usato per eseguire l'autenticazione al server EST per i rinnovi futuri dei certificati.
Sostituire il testo segnaposto seguente:
<DPS-ID-SCOPE>
con l'ambito ID del servizio Device Provisioning collegato all'hub IoT contenente il dispositivo registrato, emyiotedgedevice
con l'ID dispositivo registrato nell'hub IoT di Azure. È possibile trovare il valore dell’ambito ID nella pagina Panoramica del servizio Device Provisioning.# 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"
Nota
In questo esempio IoT Edge usa nome utente e password per eseguire l'autenticazione al server EST ogni volta che deve ottenere un certificato. Questo metodo non è consigliato nell'ambiente di produzione perché 1) richiede l'archiviazione di un segreto in testo non crittografato e 2) IoT Edge deve usare anche un certificato di identità per l'autenticazione al server EST. Per modificare per la produzione:
- Prendere in considerazione l'uso di certificati bootstrap di lunga durata che possono essere archiviati nel dispositivo durante la produzione in modo simile all'approccio consigliato per il servizio Device Provisioning. Per informazioni su come configurare il certificato bootstrap per il server EST, vedere Autenticare un dispositivo usando certificati emessi dinamicamente tramite EST.
- Configurare
[cert_issuance.est.identity_auto_renew]
usando la stessa sintassi della configurazione di rinnovo automatico del certificato di provisioning precedente.
In questo modo, il servizio certificati IoT Edge usa il certificato bootstrap per l'autenticazione iniziale con il server EST e richiede un certificato di identità per le richieste EST future allo stesso server. Se, per qualche motivo, il certificato di identità EST scade prima del rinnovo, IoT Edge esegue il fallback all'uso del certificato bootstrap.
Eseguire
sudo iotedge config apply
per applicare le nuove impostazioni.Eseguire
sudo iotedge check
per verificare la configurazione del dispositivo IoT Edge. Tutti i controlli di configurazione devono avere esito positivo. Per questa esercitazione, è possibile ignorare gli errori e gli avvisi di idoneità per la produzione, gli avvisi del server DNS e i controlli di connettività.Passare al dispositivo nell'hub IoT. Le identificazioni personali dei certificati sono state aggiunte automaticamente al dispositivo tramite DPS e il server EST.
Nota
Quando si crea un nuovo dispositivo IoT Edge, viene visualizzato il codice di stato
417 -- The device's deployment configuration is not set in the Azure portal.
Questo stato è normale e significa che il dispositivo è pronto per ricevere una distribuzione del modulo.
Testare il rinnovo dei certificati
È possibile riemettere immediatamente i certificati di identità del dispositivo rimuovendo i certificati e le chiavi esistenti dal dispositivo e quindi applicando la configurazione di IoT Edge. IoT Edge rileva i file mancanti e richiede nuovi certificati.
Nel dispositivo IoT Edge, arrestare il runtime di IoT Edge.
sudo iotedge system stop
Eliminare i certificati e le chiavi esistenti.
sudo sh -c "rm /var/lib/aziot/certd/certs/*" sudo sh -c "rm /var/lib/aziot/keyd/keys/*"
Applicare la configurazione di IoT Edge per rinnovare i certificati.
sudo iotedge config apply
Potrebbe essere necessario attendere alcuni minuti per l'avvio del runtime.
Passare al dispositivo nell'hub IoT. Le identificazioni personali dei certificati sono state aggiornate.
Elencare i file di certificato usando il comando
sudo ls -l /var/lib/aziot/certd/certs
. Verranno visualizzate le date di creazione recenti per i file di certificato del dispositivo.Usare il comando
openssl
per controllare il nuovo contenuto del certificato. Ad esempio:sudo openssl x509 -in /var/lib/aziot/certd/certs/deviceid-bd732105ef89cf8edd2606a5309c8a26b7b5599a4e124a0fe6199b6b2f60e655.cer -text -noout
Sostituire il nome file del certificato del dispositivo (.cer) con il file di certificato del dispositivo.
Si noti che l'intervallo di date di Validità del certificato è stato modificato.
Di seguito sono riportati altri modi facoltativi per testare il rinnovo del certificato. Questi controlli illustrano come IoT Edge rinnova i certificati dal server EST quando scadono o mancano. Dopo ogni test, è possibile verificare le nuove identificazioni personali dei certificati nel portale di Azure e usare il comando openssl
per verificare il nuovo certificato.
- Provare ad attendere un giorno per la scadenza del certificato. Il server EST di test è configurato per creare certificati che scadono dopo un giorno. IoT Edge rinnova automaticamente il certificato.
- Provare a modificare la percentuale in
threshold
per il rinnovo automatico impostato inconfig.toml
(attualmente impostato sull'80% nella configurazione di esempio). Ad esempio, impostarlo su10%
e osservare il rinnovo del certificato ogni 2 ore circa. - Provare a regolare l'oggetto
threshold
in un numero intero seguito dam
(minuti). Ad esempio, impostarlo60m
su e osservare il rinnovo del certificato 1 ora prima della scadenza.
Pulire le risorse
È possibile mantenere le risorse e le configurazioni create in questa esercitazione e riutilizzarle. In caso contrario, è possibile eliminare le configurazioni locali e le risorse di Azure usate in questo articolo per evitare addebiti.
Eliminare le risorse di Azure
L'eliminazione delle risorse e dei gruppi di risorse di Azure è irreversibile. Assicurarsi di non eliminare accidentalmente il gruppo di risorse sbagliato o le risorse errate. Se l'hub IoT è stato creato all'interno di un gruppo di risorse esistente che contiene risorse che si vogliono conservare, eliminare solo la risorsa hub IoT stessa, invece dell'intero gruppo.
Per eliminare le risorse:
Accedere al portale di Azure e selezionare Gruppi di risorse.
Selezionare il nome del gruppo di risorse contenente le risorse di test di IoT Edge.
Esaminare l'elenco delle risorse contenute nel gruppo di risorse. Per eliminarle tutte, è possibile selezionare Elimina gruppo di risorse. Se se ne vogliono eliminare solo alcune, è possibile selezionare ogni risorsa per eliminarle singolarmente.
Passaggi successivi
- Per usare il server EST per rilasciare certificati della CA Edge, vedere la configurazione di esempio.
- L'uso di nome utente e password per l'autenticazione bootstrap nel server EST non è consigliato per la produzione. Prendere invece in considerazione l'uso di certificati bootstrap di lunga durata che possono essere archiviati nel dispositivo durante la produzione in modo simile all'approccio consigliato per il servizio Device Provisioning. Per informazioni su come configurare il certificato bootstrap per il server EST, vedere Autenticare un dispositivo usando certificati emessi dinamicamente tramite EST.
- Il server EST può essere usato anche per rilasciare certificati per tutti i dispositivi in una gerarchia. A seconda dei requisiti ISA-95, potrebbe essere necessario eseguire una catena di server EST con uno per ogni livello o usare il modulo proxy API per inoltrare le richieste. Per altre informazioni, vedere il blog di Kevin.
- Per le soluzioni di livello aziendale, prendere in considerazione: GlobalSign IoT Edge Enroll o DigiCert IoT Device Manager
- Per altre informazioni sui certificati, vedere Informazioni sulla modalità di utilizzo dei certificati da parte di Azure IoT Edge.