Azure IoT Hub での X.509 セキュリティの設定Set up X.509 security in your Azure IoT hub

このチュートリアルでは、"X.509 証明書認証" を使用して Azure IoT Hub をセキュリティで保護するために必要な手順を示します。This tutorial shows the steps you need to secure your Azure IoT hub using the X.509 Certificate Authentication. わかりやすくするために、オープン ソース ツールの OpenSSL を使用して Windows マシン上でローカルに証明書を作成します。For the purpose of illustration, we use the open-source tool OpenSSL to create certificates locally on your Windows machine. このチュートリアルはテスト目的でのみ使用することをお勧めします。We recommend that you use this tutorial for test purposes only. 運用環境では、"ルート証明機関 (CA) " から証明書を購入する必要があります。For production environment, you should purchase the certificates from a root certificate authority (CA).

前提条件Prerequisites

このチュートリアルでは、次のリソースを用意しておく必要があります。This tutorial requires that you have the following resources ready:

X.509 CA 証明書を入手するGet X.509 CA certificates

IoT Hub の X.509 証明書ベースのセキュリティでは、X.509 証明書チェーンから始める必要があります。これには、ルート証明書に加えて、リーフ証明書までのすべての中間証明書が含まれます。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.

証明書を取得するために、次のいずれかの方法を選択できます。You may choose any of the following ways to get your certificates:

  • "ルート証明機関 (CA) " から X.509 証明書を購入する。Purchase X.509 certificates from a root certificate authority (CA). この方法は運用環境に推奨されます。This method is recommended for production environments.

  • OpenSSL などのサードパーティ製ツールを使用して、独自の X.509 証明書を作成する。Create your own X.509 certificates using a third-party tool such as OpenSSL. この手法は、テストや開発の目的に適しています。This technique is fine for test and development purposes. PowerShell または Bash を使用したテスト用 CA 証明書の生成については、「Managing test CA certificates for samples and tutorials」(サンプルおよびチュートリアルのためのテスト用 CA 証明書の管理) を参照してください。See Managing test CA certificates for samples and tutorials for information about generating test CA certificates using PowerShell or Bash. このチュートリアルの残りの部分では、「Managing test CA certificates for samples and tutorials」(サンプルおよびチュートリアルのためのテスト用 CA 証明書の管理) の手順に従って生成したテスト用 CA 証明書を使用します。The rest of this tutorial uses test CA certificates generated by following the instructions in Managing test CA certificates for samples and tutorials.

  • 既存のルート CA 証明書によって署名された X.509 中間 CA 証明書を生成して、ハブにアップロードします。Generate an X.509 intermediate CA certificate signed by an existing root CA certificate and upload it to the hub. 中間証明書がアップロードされて検証されると、以下に説明されているように、前述のルート CA 証明書の代わりに使用できます。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. OpenSSL などのツール (openssl reqopenssl ca) は、中間 CA 証明書の生成と署名に使用することができます。Tools like OpenSSL (openssl req and openssl ca) can be used to generate and sign an intermediate CA certificate.

注意

サード パーティのルートがユーザー固有でない場合は、サード パーティの他の顧客が各自のデバイスをこの IoT Hub に接続できるようになるため、そのルートをアップロードしないでください。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.

IoT ハブに X.509 CA 証明書を登録するRegister X.509 CA certificates to your IoT hub

次の手順では、ポータルを使用して IoT ハブに新しい証明機関を追加する方法を示します。These steps show you how to add a new Certificate Authority to your IoT hub through the portal.

  1. Azure portal で、対象の IoT ハブに移動し、ハブのために [設定] > [証明書] の順に選択します。In the Azure portal, navigate to your IoT hub and select Settings > Certificates for the hub.

  2. [追加] を選択して新しい証明書を追加します。Select Add to add a new certificate.

  3. [証明書の名前] に表示名を入力し、前のセクションで作成した証明書ファイルをコンピューターから選択します。In Certificate Name, enter a friendly display name, and select the certificate file you created in the previous section from your computer.

  4. 証明書が正常にアップロードされたことを示す通知が表示されたら、 [保存] を選択します。Once you get a notification that your certificate is successfully uploaded, select Save.

    証明書のアップロード

    証明書は、 [未確認] の状態で証明書の一覧に表示されます。Your certificate appears in the certificates list with status of Unverified.

  5. 追加した証明書を選択して [証明書の詳細] を表示し、 [確認コードを生成します] を選択します。Select the certificate that you just added to display Certificate Details, and then select Generate Verification Code.

    証明書の確認

  6. 確認コードをクリップボードにコピーします。Copy the Verification Code to the clipboard. これは、証明書の所有権を確認するために使用します。You use it to validate the certificate ownership.

  7. サンプルおよびチュートリアルのためのテスト用 CA 証明書の管理」の手順 3. に従います。Follow Step 3 in Managing test CA certificates for samples and tutorials. この手順により、X.509 CA 証明書に関連付けられている秘密キーを使用して、確認コードが署名されます。これで、署名が生成されます。This process signs your verification code with the private key associate with your X.509 CA certificate, which generates a signature. この署名プロセスを実行するには、OpenSSL などのツールを使用できます。There are tools available to perform this signing process, for example, OpenSSL. このプロセスは、所有証明として知られています。This process is known as the Proof of possession.

  8. [証明書の詳細][.pem または .cer の検証証明書ファイル] の下で、署名ファイルを探し、開きます。In Certificate Details, under Verification Certificate .pem or .cer file, find and open the signature file. 次に、 [確認] を選択します。Then select Verify.

    証明書の状態が [確認済み] に変わります。The status of your certificate changes to Verified. 証明書が自動的に更新されない場合は、 [最新の状態に更新] を選択します。Select Refresh if the certificate does not update automatically.

IoT ハブの X.509 デバイスを作成するCreate an X.509 device for your IoT hub

  1. Azure portal で IoT ハブに移動し、 [エクスプローラー] > [IoT デバイス] の順に選択します。In the Azure portal, navigate to your IoT hub, and then select Explorers > IoT devices.

  2. [新規作成] を選択して新しいデバイスを追加します。Select New to add a new device.

  3. [デバイス ID] にわかりやすい表示名を入力します。In Device ID, enter a friendly display name. [認証の種類][X.509 CA 署名済み] を選択し、 [保存] を選択します。For Authentication type, choose X.509 CA Signed, and then select Save.

    ポータルでの X.509 デバイスの作成

X.509 証明書を使用して X.509 デバイスを認証するAuthenticate your X.509 device with the X.509 certificates

X.509 デバイスを認証するには、最初に CA 証明書を使用してデバイスに署名する必要があります。To authenticate your X.509 device, you need to first sign the device with the CA certificate. 通常、リーフ デバイスの署名は、製造ツールが適宜有効になっている製造工場で行われます。Signing of leaf devices is normally done at the manufacturing plant, where manufacturing tools have been enabled accordingly. デバイスがある製造会社から別の製造会社に移動される際に、各製造会社における署名アクションがチェーン内の中間証明書としてキャプチャされます。As the device goes from one manufacturer to another, each manufacturer's signing action is captured as an intermediate certificate within the chain. 結果は、CA 証明書からデバイスのリーフ証明書までの証明書チェーンとなります。The result is a certificate chain from the CA certificate to the device's leaf certificate. Managing test CA certificates for samples and tutorials」(サンプルおよびチュートリアルのためのテスト用 CA 証明書の管理) の手順 4 ではデバイス証明書を生成します。Step 4 in Managing test CA certificates for samples and tutorials generates a device certificate.

次に、IoT ハブに登録された X.509 デバイスをシミュレートする C# アプリケーションを作成する方法を示します。Next, we will show you how to create a C# application to simulate the X.509 device registered for your IoT hub. ここでは、シミュレートされたデバイスからハブに温度と湿度の値を送信します。We will send temperature and humidity values from the simulated device to your hub. このチュートリアルではデバイス アプリケーションのみを作成します。In this tutorial, we will create only the device application. このシミュレートされたデバイスから送信されたイベントに応答を送信する IoT Hub サービス アプリケーションを作成する作業は、読者のための演習として残されています。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. この C# アプリケーションでは、「Managing test CA certificates for samples and tutorials」(サンプルおよびチュートリアルのためのテスト用 CA 証明書の管理) の手順に従っていることを前提としています。The C# application assumes that you have followed the steps in Managing test CA certificates for samples and tutorials.

  1. Visual Studio を開き、 [新しいプロジェクトの作成] を選択して、 [コンソール アプリ (.NET Framework)] プロジェクト テンプレートを選択します。Open Visual Studio, select Create a new project, and then choose the Console App (.NET Framework) project template. [次へ] を選択します。Select Next.

  2. [新しいプロジェクトの構成] で、プロジェクトに SimulateX509Device という名前を付け、 [作成] を選択します。In Configure your new project, name the project SimulateX509Device, and then select Create.

    Visual Studio で X.509 デバイス プロジェクトを作成する

  3. ソリューション エクスプローラーで SimulateX509Device プロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。In Solution Explorer, right-click the SimulateX509Device project, and then select Manage NuGet Packages.

  4. [NuGet パッケージ マネージャー][参照] を選択し、Microsoft.Azure.Devices.Client を検索して選択します。In the NuGet Package Manager, select Browse and search for and choose Microsoft.Azure.Devices.Client. [インストール] を選択します。Select Install.

    Visual Studio でデバイス SDK NuGet パッケージを追加する

    この手順により、Azure IoT device SDK NuGet パッケージのダウンロードとインストールが実行され、それとその依存関係への参照が追加されます。This step downloads, installs, and adds a reference to the Azure IoT device SDK NuGet package and its dependencies.

  5. Program.cs ファイルの先頭に次の using ステートメントを追加します。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. 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();
    

    <your_device_id> の場所には、前のセクションで使用したわかりやすいデバイス名を使用します。Use the friendly device name you used in the preceding section in place of <your_device_id>.

  7. 次の関数を使用して、温度と湿度のランダムな数値を生成してそれらの値をハブに送信します。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. 最後に、Main 関数に次のコード行を追加します。このとき、device-idyour-iot-hub-nameabsolute-path-to-your-device-pfx-file の各プレースホルダーを、設定に必要な値に置き換えます。Finally, 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);
    }
    

    このコードは、X.509 デバイスの接続文字列を作成して、IoT ハブに接続します。This code connects to your IoT hub by creating the connection string for your X.509 device. 正常に接続すると、温度と湿度のイベントをハブに送信し、その応答を待ちます。Once successfully connected, it then sends temperature and humidity events to the hub, and waits for its response.

  9. アプリケーションを実行します。Run the app. このアプリケーションは .pfx ファイルにアクセスするため、このアプリを管理者として実行しなければならない場合があります。Because this application accesses a .pfx file, you may need to run this app as an administrator.

    1. Visual Studio ソリューションをビルドします。Build the Visual Studio solution.

    2. [管理者として実行] を使用して、新しいコマンド プロンプト ウィンドウを開きます。Open a new Command Prompt window by using Run as administrator.

    3. ソリューションが含まれているフォルダーに移動し、ソリューション フォルダー内の bin/Debug パスに移動します。Navigate to the folder that contains your solution, then navigate to the bin/Debug path within the solution folder.

    4. コマンド プロンプトからアプリケーション SimulateX509Device.exe を実行します。Run the application SimulateX509Device.exe from the command prompt.

    デバイスが正常にハブに接続し、イベントを送信していることがわかります。You should see your device successfully connecting to the hub and sending the events.

    デバイス アプリを実行する

次のステップNext steps

IoT ソリューションのセキュリティ保護の詳細については、次のリンク先をご覧ください。To learn more about securing your IoT solution, see:

IoT Hub の機能を詳しく調べるには、次のリンクを使用してください。To further explore the capabilities of IoT Hub, see: