Condividi tramite


Esercitazione: configurare la registrazione sul server di trasporto sicuro per Azure IoT Edge

Si applica a: Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 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

Diagramma che mostra una panoramica generale dei tre passaggi necessari per completare questa esercitazione.

Prerequisiti

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.

  1. Connettersi al dispositivo, ad esempio usando SSH, in cui è stato installato IoT Edge.

  2. 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
    
  3. Nella directory contenente l'immagine Dockerfile, compilare l'immagine dal Dockerfile di esempio.

    sudo docker build . --tag est
    
  4. Avviare il contenitore ed esporre la porta del contenitore 8085 alla porta 8085 nell'host.

    sudo docker run -d -p 8085:8085 est
    
  5. 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
    
  6. 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.

  1. 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
    
  2. Recuperare il certificato della CA dal server EST nella directory /var/aziot/certs e denominarlo cacert.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
    
  3. 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

  1. 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.

  2. 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 comando cat /var/aziot/certs/cacert.crt.pem, copiare l'intero output e incollare il contenuto in un nuovo file nel computer di sviluppo.

  3. Nel portale di Azure passare all'istanza del servizio Device Provisioning in hub IoT.

  4. In Impostazioni, selezionare Certificati, quindi +Aggiungi.

    Screenshot che aggiunge un certificato CA al servizio Device Provisioning usando il portale di Azure.

    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 EST
    Impostare lo stato del certificato in Verificato al momento del caricamento Selezionare la casella di controllo
  5. Seleziona Salva.

Creare un gruppo di registrazioni

  1. Nel portale di Azure passare all'istanza del servizio Device Provisioning in hub IoT.

  2. In le impostazioni selezionare Gestisci registrazioni.

  3. Selezionare Aggiungi gruppo di registrazioni, quindi completare la procedura seguente per configurare la registrazione.

  4. Nella scheda Registrazione e provisioning scegliere le impostazioni seguenti:

    Screenshot che aggiunge un gruppo di registrazione del servizio Device Provisioning usando il portale di Azure.

    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
  5. Nella scheda Hub IoT, scegliere l'hub IoT dall'elenco.

  6. 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.

  7. 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.

  1. 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
    
  2. 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, e myiotedgedevice 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:

    1. 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.
    2. 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.

  3. Eseguire sudo iotedge config apply per applicare le nuove impostazioni.

  4. 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à.

  5. Passare al dispositivo nell'hub IoT. Le identificazioni personali dei certificati sono state aggiunte automaticamente al dispositivo tramite DPS e il server EST.

    Screenshot delle impostazioni dei dispositivi dell'hub IoT nel portale di Azure. I campi delle identificazioni personali dei certificati mostrano i valori.

    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.

  1. Nel dispositivo IoT Edge, arrestare il runtime di IoT Edge.

    sudo iotedge system stop
    
  2. 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/*"
    
  3. 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.

  4. Passare al dispositivo nell'hub IoT. Le identificazioni personali dei certificati sono state aggiornate.

    Screenshot delle impostazioni dei dispositivi dell'hub IoT nel portale di Azure. I campi delle identificazioni personali dei certificati mostrano valori nuovi.

  5. 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.

  6. 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.

  1. 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.
  2. Provare a modificare la percentuale in threshold per il rinnovo automatico impostato in config.toml (attualmente impostato sull'80% nella configurazione di esempio). Ad esempio, impostarlo su 10% e osservare il rinnovo del certificato ogni 2 ore circa.
  3. Provare a regolare l'oggetto threshold in un numero intero seguito da m (minuti). Ad esempio, impostarlo 60m 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:

  1. Accedere al portale di Azure e selezionare Gruppi di risorse.

  2. Selezionare il nome del gruppo di risorse contenente le risorse di test di IoT Edge.

  3. 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