Configurare la sicurezza X.509 nell'hub IoT di AzureSet up X.509 security in your Azure IoT hub

Questa esercitazione illustra i passaggi necessari per proteggere l'hub Azure Internet con l' autenticazione del certificato X. 509 .This tutorial shows the steps you need to secure your Azure IoT hub using the X.509 Certificate Authentication . A scopo illustrativo, viene usato lo strumento open source OpenSSL per creare certificati localmente nel computer Windows.For the purpose of illustration, we use the open-source tool OpenSSL to create certificates locally on your Windows machine. È consigliabile usare questa esercitazione solo a scopo di test.We recommend that you use this tutorial for test purposes only. Per un ambiente di produzione, è necessario acquistare i certificati da un' autorità di certificazione (CA) radice .For a production environment, you should purchase the certificates from a root certificate authority (CA) . Inoltre, nell'ambiente di produzione, assicurarsi di disporre di una strategia per gestire il rollover del certificato quando un certificato del dispositivo o un certificato della CA scade.Also, in production, make sure you have a strategy in place to handle certificate rollover when a device certificate or a CA certificate expires.

Importante

Le funzionalità seguenti per i dispositivi che usano l'autenticazione dell'autorità di certificazione (CA) X. 509 non sono ancora disponibili a livello generale e la modalità di anteprima deve essere abilitata:The following functionality for devices that use X.509 certificate authority (CA) authentication is not yet generally available, and preview mode must be enabled:

  • HTTPS, MQTT su WebSocket e AMQP su protocolli WebSocket.HTTPS, MQTT over WebSockets, and AMQP over WebSockets protocols.
  • Caricamenti di file (tutti i protocolli).File uploads (all protocols).

È disponibile a livello generale nei dispositivi che usano l'autenticazione con identificazione personale X. 509.It is generally available on devices that use X.509 thumbprint authentication. Per altre informazioni sull'autenticazione X. 509 con l'hub Internet, vedere certificati x. 509 supportati.To learn more about X.509 authentication with IoT Hub, see Supported X.509 certificates.

PrerequisitiPrerequisites

Per questa esercitazione è necessario disporre delle risorse seguenti pronte:This tutorial requires that you have the following resources ready:

Ottenere certificati della CA X.509Get X.509 CA certificates

La sicurezza basata su certificati X.509 nell'hub IoT richiede prima di tutto una catena di certificati X.509, che include il certificato radice e i certificati intermedi fino al certificato foglia.The X.509 certificate-based security in the IoT Hub requires you to start with an X.509 certificate chain, which includes the root certificate as well as any intermediate certificates up until the leaf certificate.

Per ottenere i certificati, è possibile scegliere uno dei modi seguenti:You may choose any of the following ways to get your certificates:

  • Acquistare i certificati X.509 da un' autorità di certificazione (CA) radice .Purchase X.509 certificates from a root certificate authority (CA) . Questo metodo è consigliato per gli ambienti di produzione.This method is recommended for production environments.

  • Creare certificati X. 509 personalizzati usando uno strumento di terze parti, ad esempio openssl.Create your own X.509 certificates using a third-party tool such as OpenSSL. Questa tecnica è ottimale a scopo di test e sviluppo.This technique is fine for test and development purposes. Vedere Gestione dei certificati CA di prova per esempi e certificazioni per informazioni sulla generazione di certificati CA di prova tramite PowerShell o Bash.See Managing test CA certificates for samples and tutorials for information about generating test CA certificates using PowerShell or Bash. Nella parte restante di questa esercitazione vengono usati i certificati CA di prova generati seguendo le istruzioni riportate in Gestione dei certificati CA di prova per esempi e certificazioni.The rest of this tutorial uses test CA certificates generated by following the instructions in Managing test CA certificates for samples and tutorials.

  • Generare un certificato della CA intermedia X. 509 firmato da un certificato CA radice esistente e caricarlo nell'hub.Generate an X.509 intermediate CA certificate signed by an existing root CA certificate and upload it to the hub. Una volta caricato e verificato il certificato intermedio, come indicato di seguito, è possibile usarlo al posto di un certificato CA radice indicato di seguito.Once the intermediate certificate is uploaded and verified, as instructed below, it can be used in the place of a root CA certificate mentioned below. È possibile usare strumenti come OpenSSL (openssl req e openssl ca) per generare e firmare un certificato CA intermedio.Tools like OpenSSL (openssl req and openssl ca) can be used to generate and sign an intermediate CA certificate.

Nota

Non caricare la radice di terze parti, se non è univoca per l'utente, perché ciò consentirebbe ad altri clienti della terza parte di connettere i propri dispositivi all'hub Internet.Do not upload the 3rd party root if it is not unique to you because that would enable other customers of the 3rd party to connect their devices to your IoT Hub.

Registrare i certificati della CA X.509 nell'hub IoTRegister X.509 CA certificates to your IoT hub

Questi passaggi illustrano come aggiungere una nuova autorità di certificazione all'hub IoT tramite il portale.These steps show you how to add a new Certificate Authority to your IoT hub through the portal. Quando si usa l'autenticazione della CA del certificato X. 509, assicurarsi di registrare il nuovo certificato prima della scadenza di quella esistente come parte della strategia di rollover del certificato.When you use X.509 certificate CA authentication, make sure you register your new certificate before the existing one expires as part of your certificate rollover strategy.

Nota

Il numero massimo di certificati della CA X. 509 che è possibile registrare per un hub Internet è 25.The maximum number of X.509 CA certificates that can be registered to an IoT hub is 25. Per altre informazioni, vedere quote e limitazioni dell'hub Azure.For more information, see Azure IoT Hub quotas and throttling.

  1. Nella portale di Azure passare all'hub Internet e selezionare Impostazioni > certificati per l'hub.In the Azure portal, navigate to your IoT hub and select Settings > Certificates for the hub.

  2. Selezionare Aggiungi per aggiungere un nuovo certificato.Select Add to add a new certificate.

  3. In nome certificato immettere un nome visualizzato descrittivo e selezionare il file del certificato creato nella sezione precedente del computer.In Certificate Name , enter a friendly display name, and select the certificate file you created in the previous section from your computer.

  4. Quando si riceve una notifica che indica che il certificato è stato caricato correttamente, selezionare Salva .Once you get a notification that your certificate is successfully uploaded, select Save .

    Caricamento del certificato

    Il certificato viene visualizzato nell'elenco dei certificati con lo stato non verificato .Your certificate appears in the certificates list with status of Unverified .

  5. Selezionare il certificato appena aggiunto per visualizzare i dettagli del certificato e quindi selezionare genera codice di verifica .Select the certificate that you just added to display Certificate Details , and then select Generate Verification Code .

    Verifica il certificato

  6. Copiare il codice di verifica negli Appunti.Copy the Verification Code to the clipboard. Viene usato per convalidare la proprietà del certificato.You use it to validate the certificate ownership.

  7. Seguire il passaggio 3 nella sezione relativa alla gestione dei certificati della CA di test per esempi ed esercitazioni.Follow Step 3 in Managing test CA certificates for samples and tutorials. Questo processo firma il codice di verifica con la chiave privata associata al certificato della CA X. 509, che genera una firma.This process signs your verification code with the private key associate with your X.509 CA certificate, which generates a signature. Sono disponibili vari strumenti per eseguire questo processo di firma, ad esempio OpenSSL.There are tools available to perform this signing process, for example, OpenSSL. Questo processo è noto come prova di possesso.This process is known as the Proof of possession.

  8. In Dettagli certificato , in file di certificato di verifica con estensione PEM o CER , trovare e aprire il file della firma.In Certificate Details , under Verification Certificate .pem or .cer file , find and open the signature file. Quindi selezionare Verifica .Then select Verify .

    Lo stato del certificato diventa verificato .The status of your certificate changes to Verified . Selezionare Aggiorna se il certificato non viene aggiornato automaticamente.Select Refresh if the certificate does not update automatically.

Creare un dispositivo X.509 per l'hub IoTCreate an X.509 device for your IoT hub

  1. Nella portale di Azure passare all'hub Internet e quindi selezionare esploratori > dispositivi .In the Azure portal, navigate to your IoT hub, and then select Explorers > IoT devices .

  2. Selezionare nuovo per aggiungere un nuovo dispositivo.Select New to add a new device.

  3. In ID dispositivo immettere un nome visualizzato descrittivo.In Device ID , enter a friendly display name. Per tipo di autenticazione scegliere CA X. 509 firmata e quindi selezionare Salva .For Authentication type , choose X.509 CA Signed , and then select Save .

    Creare il dispositivo X.509 nel portale

Autenticare il dispositivo X.509 con i certificati X.509Authenticate your X.509 device with the X.509 certificates

Per autenticare il dispositivo X.509, è prima di tutto necessario firmare il dispositivo con il certificato della CA.To authenticate your X.509 device, you need to first sign the device with the CA certificate. La firma dei dispositivi foglia viene in genere eseguita nell'impianto di produzione, con strumenti di produzione abilitati di conseguenza.Signing of leaf devices is normally done at the manufacturing plant, where manufacturing tools have been enabled accordingly. Quando il dispositivo passa da un produttore a un altro, l'azione di firma di ogni produttore viene acquisita come un certificato intermedio nella catena.As the device goes from one manufacturer to another, each manufacturer's signing action is captured as an intermediate certificate within the chain. Il risultato è una catena di certificati del certificato della CA per il certificato foglia del dispositivo.The result is a certificate chain from the CA certificate to the device's leaf certificate. Passaggio 4 Gestione dei certificati CA di prova per esempi e certificazioni genera un certificato del dispositivo.Step 4 in Managing test CA certificates for samples and tutorials generates a device certificate.

In seguito verrà illustrato come creare un'applicazione C# per simulare il dispositivo X.509 registrato per l'hub IoT.Next, we will show you how to create a C# application to simulate the X.509 device registered for your IoT hub. Verranno inviati valori di temperatura e umidità dal dispositivo simulato all'hub.We will send temperature and humidity values from the simulated device to your hub. In questa esercitazione verrà creata solo l'applicazione del dispositivo.In this tutorial, we will create only the device application. Rimarrà come esercizio per i lettori la creazione dell'applicazione di servizio dell'hub IoT per inviare risposta agli eventi inviati da questo dispositivo simulato.It is left as an exercise to the readers to create the IoT Hub service application that will send response to the events sent by this simulated device. L'applicazione C# presuppone che siano stati seguiti i passaggi descritti in Gestione dei certificati CA di prova per esempi e certificazioni.The C# application assumes that you have followed the steps in Managing test CA certificates for samples and tutorials.

  1. Aprire Visual Studio, selezionare Crea nuovo progetto , quindi scegliere il modello di progetto App Console (.NET Framework) .Open Visual Studio, select Create a new project , and then choose the Console App (.NET Framework) project template. Selezionare Avanti .Select Next .

  2. In Configura il nuovo progetto assegnare al progetto il nome SimulateX509Device e quindi selezionare Crea .In Configure your new project , name the project SimulateX509Device , and then select Create .

    Creare il progetto di dispositivo X.509 in Visual Studio

  3. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto SimulateX509Device e quindi scegliere Gestisci pacchetti NuGet .In Solution Explorer, right-click the SimulateX509Device project, and then select Manage NuGet Packages .

  4. In Gestione pacchetti NuGet selezionare Sfoglia e cercare e scegliere Microsoft. Azure. Devices. client .In the NuGet Package Manager , select Browse and search for and choose Microsoft.Azure.Devices.Client . Selezionare Installa .Select Install .

    Aggiungere il pacchetto NuGet SDK per dispositivi in Visual Studio

    Questo passaggio scarica, installa e aggiunge un riferimento al pacchetto NuGet Azure IoT SDK per dispositivi e alle relative dipendenze.This step downloads, installs, and adds a reference to the Azure IoT device SDK NuGet package and its dependencies.

  5. Aggiungere le istruzione using seguenti all'inizio del file Program.cs :Add the following using statements at the top of the Program.cs file:

        using Microsoft.Azure.Devices.Client;
        using Microsoft.Azure.Devices.Shared;
        using System.Security.Cryptography.X509Certificates;
    
  6. Aggiungere i campi seguenti alla classe Program :Add the following fields to the Program class:

        private static int MESSAGE_COUNT = 5;
        private const int TEMPERATURE_THRESHOLD = 30;
        private static String deviceId = "<your-device-id>";
        private static float temperature;
        private static float humidity;
        private static Random rnd = new Random();
    

    Usare il nome descrittivo del dispositivo usato nella sezione precedente al posto di <your_device_id> .Use the friendly device name you used in the preceding section in place of <your_device_id> .

  7. Aggiungere la funzione seguente per creare numeri casuali per temperatura e umidità e inviare tali valori all'hub:Add the following function to create random numbers for temperature and humidity and send these values to the hub:

    static async Task SendEvent(DeviceClient deviceClient)
    {
        string dataBuffer;
        Console.WriteLine("Device sending {0} messages to IoTHub...\n", MESSAGE_COUNT);
    
        for (int count = 0; count < MESSAGE_COUNT; count++)
        {
            temperature = rnd.Next(20, 35);
            humidity = rnd.Next(60, 80);
            dataBuffer = string.Format("{{\"deviceId\":\"{0}\",\"messageId\":{1},\"temperature\":{2},\"humidity\":{3}}}", deviceId, count, temperature, humidity);
            Message eventMessage = new Message(Encoding.UTF8.GetBytes(dataBuffer));
            eventMessage.Properties.Add("temperatureAlert", (temperature > TEMPERATURE_THRESHOLD) ? "true" : "false");
            Console.WriteLine("\t{0}> Sending message: {1}, Data: [{2}]", DateTime.Now.ToLocalTime(), count, dataBuffer);
    
            await deviceClient.SendEventAsync(eventMessage);
        }
    }
    
  8. Aggiungere infine le righe di codice seguenti alla funzione Main , sostituendo i segnaposto Device-ID , il nome--- ----------------------------------------- absolute-path-to-your-device-pfx-fileFinally, add the following lines of code to the Main function, replacing the placeholders device-id , your-iot-hub-name , and absolute-path-to-your-device-pfx-file as required by your setup.

    try
    {
        var cert = new X509Certificate2(@"<absolute-path-to-your-device-pfx-file>", "1234");
        var auth = new DeviceAuthenticationWithX509Certificate("<device-id>", cert);
        var deviceClient = DeviceClient.Create("<your-iot-hub-name>.azure-devices.net", auth, TransportType.Amqp_Tcp_Only);
    
        if (deviceClient == null)
        {
            Console.WriteLine("Failed to create DeviceClient!");
        }
        else
        {
            Console.WriteLine("Successfully created DeviceClient!");
            SendEvent(deviceClient).Wait();
        }
    
        Console.WriteLine("Exiting...\n");
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error in sample: {0}", ex.Message);
    }
    

    Questo codice si connette all'hub IoT creando la stringa di connessione per il dispositivo X.509.This code connects to your IoT hub by creating the connection string for your X.509 device. Una volta stabilita la connessione, il codice invia quindi gli eventi di temperatura e umidità all'hub e attende la risposta.Once successfully connected, it then sends temperature and humidity events to the hub, and waits for its response.

  9. Eseguire l'app.Run the app. Poiché questa applicazione accede a un file con estensione pfx , potrebbe essere necessario eseguire questa app come amministratore.Because this application accesses a .pfx file, you may need to run this app as an administrator.

    1. Compilare la soluzione di Visual Studio.Build the Visual Studio solution.

    2. Aprire una nuova finestra del prompt dei comandi usando Esegui come amministratore .Open a new Command Prompt window by using Run as administrator .

    3. Passare alla cartella che contiene la soluzione, quindi passare al percorso bin/debug nella cartella della soluzione.Navigate to the folder that contains your solution, then navigate to the bin/Debug path within the solution folder.

    4. Eseguire l'applicazione SimulateX509Device.exe dal prompt dei comandi.Run the application SimulateX509Device.exe from the command prompt.

    Il dispositivo dovrebbe connettersi correttamente all'hub e inviare eventi.You should see your device successfully connecting to the hub and sending the events.

    Eseguire l'app per dispositivi

Passaggi successiviNext steps

Per altre informazioni sulla protezione della soluzione IoT, vedere:To learn more about securing your IoT solution, see:

Per altre informazioni sulle funzionalità dell'hub IoT, vedere:To further explore the capabilities of IoT Hub, see: