IoT Edge デバイスの機能をテストするためのデモ用の証明書を作成する

適用対象:IoT Edge 1.4 checkmark IoT Edge 1.4

重要

IoT Edge 1.4 がサポートされているリリースです。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

ランタイム、モジュール、およびダウンストリーム デバイスとの間の通信をセキュリティで保護するため、IoT Edge デバイスには証明書が必要です。 必要な証明書を作成するための証明機関がない場合は、デモ用の証明書を使用し、テスト環境で IoT Edge の機能を試すことができます。 この記事では、IoT Edge でテスト用に提供されている証明書生成スクリプトの機能について説明します。

警告

これらの証明書の有効期限は 30 日です。運用環境のシナリオでは使用しないでください。

任意のマシンで証明書を作成して IoT Edge デバイスにコピーするか、IoT Edge デバイスで直接証明書を生成できます。

前提条件

Git がインストールされた開発用マシン。

テスト証明書スクリプトをダウンロードし、作業ディレクトリを設定する

GitHub の IoT Edge リポジトリには、デモ用の証明書を作成するのに使用できる証明書生成スクリプトが含まれています。 このセクションでは、Windows または Linux のいずれかのコンピューターで実行するスクリプトを準備する手順について説明します。

Windows デバイスでデモ用の証明書を作成するには、OpenSSL をインストールしてから生成スクリプトを複製し、ローカルで実行されるように PowerShell でスクリプトを設定する必要があります。

OpenSSL のインストール

証明書を生成するために使用するマシンに OpenSSL for Windows をインストールします。 ご使用の Windows デバイスに既に OpenSSL がインストールされている場合は、openssl.exe がご自分の PATH 環境変数で使用可能であることを確認してください。

OpenSSL のインストール方法はいくつかあり、以下のような選択肢があります。

  • 簡単:サードパーティの OpenSSL バイナリを (たとえば、SourceForge の OpenSSL から) ダウンロードしてインストールします。 openssl.exe への完全なパスを PATH 環境変数に追加します。

  • 推奨方法: OpenSSL ソース コードをダウンロードし、お使いのコンピューター上または vcpkg 経由でバイナリをビルドします。 以下に示す指示では、vcpkg を使用してソース コードのダウンロード、コンパイル、および Windows コンピューターへの OpenSSL のインストールを、簡単な手順で実行します。

    1. vcpkg をインストールするディレクトリに移動します。 指示に従って vcpkg インストーラーをダウンロードし、実行します。

    2. vcpkg がインストールされたら、PowerShell プロンプトから次のコマンドを実行して、Windows x64 用の OpenSSL パッケージをインストールします。 インストールが完了するまで、通常は約 5 分かかります。

      .\vcpkg install openssl:x64-windows
      
    3. ご自分の PATH 環境変数に <vcpkg path>\installed\x64-windows\tools\openssl を追加して、openssl.exe ファイルを呼び出せるようにします。

PowerShell でのスクリプトの準備

Azure IoT Edge の Git リポジトリには、テスト証明書の生成に使用できるスクリプトが含まれています。 このセクションでは、IoT Edge リポジトリを複製して、スクリプトを実行します。

  1. 管理者モードで PowerShell ウィンドウを開きます。

  2. デモ用の証明書を生成するスクリプトが含まれている IoT Edge git リポジトリを複製します。 git clone コマンドを使用するか、ZIP をダウンロードします

    git clone https://github.com/Azure/iotedge.git
    
  3. 作業するディレクトリを作成し、そこに証明書スクリプトをコピーします。 すべての証明書ファイルとキー ファイルがこのディレクトリに作成されます。

    mkdir wrkdir
    cd .\wrkdir\
    cp ..\iotedge\tools\CACertificates\*.cnf .
    cp ..\iotedge\tools\CACertificates\ca-certs.ps1 .
    

    ZIP ファイルとしてリポジトリをダウンロードした場合、フォルダー名は iotedge-master で、パスの残りの部分は同じです。

  4. PowerShell でスクリプトの実行を有効にします。

    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
    
  5. スクリプトで使用される関数を PowerShell のグローバル名前空間に取り込みます。

    . .\ca-certs.ps1
    

    このスクリプトによって生成された証明書はテスト目的専用であり、運用シナリオでは使用してはならないという警告が PowerShell ウィンドウに表示されます。

  6. OpenSSL が正しくインストールされていることを確認し、既存証明書と名前の競合がないことを確認します。 問題がある場合は、スクリプト出力に、システムで問題を修正する方法が記述されているはずです。

    Test-CACertsPrerequisites
    

ルート CA 証明書の作成

この記事の各手順で必要になるルート CA を生成するには、このスクリプトを実行します。

ルート CA 証明書は、IoT Edge シナリオをテストするための、その他すべてのデモ用証明書を作成するために使用されます。 同じルート CA 証明書を使用し続けて、複数の IoT Edge やダウンストリーム デバイスのためにデモ用の証明書を作成できます。

作業フォルダーにルート CA 証明書が既に 1 つある場合は、新しいものを作成しないでください。 新しいルート CA 証明書によって古い証明書が上書きされるので、古い証明書から作成されたダウンストリームの証明書がすべて機能しなくなります。 複数のルート CA 証明書が必要な場合は、それらを別個のフォルダーで管理してください。

  1. 証明書生成スクリプトを配置した作業ディレクトリ wrkdir に移動します。

  2. ルート CA 証明書を作成し、1 つの中間証明書に署名させます。 証明書はすべて作業ディレクトリに配置されます。

    New-CACertsCertChain rsa
    

    このスクリプト コマンドでは、証明書とキーのファイルが複数作成されますが、記事でルート CA 証明書が求められた場合は次のファイルを使用します。

    certs\azure-iot-test-only.root.ca.cert.pem

次のセクションで説明するように、IoT Edge デバイスとダウンストリーム デバイス用にさらに証明書を作成するには、事前にこの証明書が必要になります。

IoT Edge デバイスの ID 証明書を作成する

X.509 証明書認証を使用することを選択した場合、IoT Edge デバイス ID 証明書が IoT Edge デバイスのプロビジョニングに使用されます。 IoT Hub または DPS の認証に対称キーを使用する場合、これらの証明書は必要ありません。このセクションはスキップできます。

これらの証明書は、手動プロビジョニングを使用する場合でも、Azure IoT Hub Device Provisioning Service (DPS) による自動プロビジョニングを使用する場合でも機能します。

デバイス ID 証明書は、IoT Edge デバイス上の構成ファイルのプロビジョニング セクションにあります。

  1. 証明書生成スクリプトとルート CA 証明書がある作業ディレクトリ wrkdir に移動します。

  2. 次のコマンドを使用して、IoT Edge デバイス ID 証明書と秘密キーを作成します。

    New-CACertsEdgeDeviceIdentity "<device-id>"
    

    このコマンドに渡す名前が、IoT Hub の IoT Edge デバイス用のデバイス ID です。

  3. 新しいデバイス ID コマンドでは、証明書とキーのファイルがいくつか作成されます。

    Type ファイル 説明
    デバイス ID 証明書 certs\iot-edge-device-identity-<device-id>.cert.pem 先ほど生成した中間証明書で署名されます。 ID 証明書のみを含みます。 DPS 個別登録または IoT Hub プロビジョニング用の構成ファイルの中で指定します。
    完全なチェーン証明書 certs\iot-edge-device-identity-<device-id>-full-chain.cert.pem 中間証明書を含む完全な証明書チェーンが含まれます。 グループ登録プロビジョニング用に IoT Edge が DPS に提示する構成ファイルの中で指定します。
    秘密キー private\iot-edge-device-identity-<device-id>.key.pem デバイス ID 証明書に関連付けられる秘密キー。 DPS または IoT Hub になんらかの証明書認証 (サムプリントまたは CA) を使用する場合、構成ファイルの中で指定する必要があります。

エッジ CA 証明書を作成する

これらの証明書は、ゲートウェイのシナリオに必要となります。エッジ CA 証明書は、IoT Edge デバイスがダウンストリーム デバイスに対してその ID を証明する手段となるためです。 いずれのダウンストリーム デバイスも IoT Edge に接続しない場合、このセクションはスキップしてかまいません。

エッジ CA 証明書には、デバイス上で実行されるモジュールの証明書を作成する役割もありますが、エッジ CA が構成されていなければ、IoT Edge ランタイムで一時的な証明書を作成できます。 エッジ CA の証明書は、IoT Edge デバイス上の config.toml ファイルの Edge CA セクションにあります。 詳細については、「Azure IoT Edge での証明書の使用方法について理解する」を参照してください。

  1. 証明書生成スクリプトとルート CA 証明書がある作業ディレクトリ wrkdir に移動します。

  2. 次のコマンドを使って、IoT Edge CA 証明書と秘密キーを作成します。 CA 証明書の名前を入力します。 New-CACertsEdgeDevice コマンドに渡される名前は、構成ファイルの hostname パラメーターや IoT Hub のデバイス ID と同じに "しない" でください

    New-CACertsEdgeDevice "<CA cert name>"
    
  3. このコマンドでは、証明書とキーのファイルがいくつか作成されます。 次の証明書とキーのペアを IoT Edge デバイスにコピーし、構成ファイルでそれらを参照する必要があります。

    • certs\iot-edge-device-ca-<CA cert name>-full-chain.cert.pem
    • private\iot-edge-device-ca-<CA cert name>.key.pem

ダウンストリーム デバイス証明書の作成

これらの証明書は、ゲートウェイのシナリオで、IoT Hub または DPS に対して X.509 認証を使用したい場合に、ダウンストリーム IoT デバイスのセットアップに必要となります。 対称キー認証を使用する場合は、ダウンストリーム デバイスの証明書を作成する必要はありません。このセクションはスキップできます。

X.509 証明書を使用して IoT デバイスを認証する方法は 2 つあります。自己署名証明書を使用する方法、または証明機関 (CA) の署名付き証明書を使用する方法です。

  • X.509 自己署名認証 ("拇印" 認証とも呼ばれます) の場合、お使いの IoT デバイス上に配置する新しい証明書を作成する必要があります。 これらの証明書には、認証のために IoT Hub と共有する拇印が含まれています。
  • X.509 証明機関 (CA) の署名済みの認証の場合、お使いの IoT デバイスの証明書の署名に使用する IoT Hub または DPS に登録されているルート CA 証明書が必要です。 ルート CA 証明書またはそのいずれかの中間証明書によって発行された証明書を使用しているデバイスが認証に成功するためには、そのデバイスによって完全なチェーンが提示されることが条件となります。

証明書生成スクリプトは、これらの認証シナリオのいずれかをテストするデモ用の証明書を作成するのに役立ちます。

自己署名証明書

自己署名証明書を使用して IoT デバイスを認証する場合は、お使いのソリューションのルート CA 証明書に基づくデバイス証明書を作成する必要があります。 次に、その証明書から 16 進数の "サムプリント" を取得し、IoT Hub に提供します。 IoT Hub で認証できるように、IoT デバイスにはデバイス証明書のコピーも必要です。

  1. 証明書生成スクリプトとルート CA 証明書がある作業ディレクトリ wrkdir に移動します。

  2. ダウンストリーム デバイス用に 2 つの証明書 (プライマリとセカンダリ) を作成します。 簡単に使える名前付け規則として、IoT デバイスの名前の後に primary または secondary のラベルを付けて証明書を作成します。 次に例を示します。

    New-CACertsDevice "<device ID>-primary"
    New-CACertsDevice "<device ID>-secondary"
    

    このスクリプト コマンドでは、証明書とキーのファイルがいくつか作成されます。 以下の証明書とキーのペアをダウンストリーム IoT デバイスにコピーし、IoT Hub に接続するアプリケーション内で、それらのペアを参照する必要があります。

    • certs\iot-device-<device ID>-primary-full-chain.cert.pem
    • certs\iot-device-<device ID>-secondary-full-chain.cert.pem
    • certs\iot-device-<device ID>-primary.cert.pem
    • certs\iot-device-<device ID>-secondary.cert.pem
    • certs\iot-device-<device ID>-primary.cert.pfx
    • certs\iot-device-<device ID>-secondary.cert.pfx
    • private\iot-device-<device ID>-primary.key.pem
    • private\iot-device-<device ID>-secondary.key.pem
  3. 各証明書から SHA1 サムプリント (IoT Hub のコンテキストではサムプリントと呼ばれます) を取得します。 サムプリントは、40 文字の 16 進数文字列です。 次の openssl コマンドを使用して、証明書を表示し、サムプリントを見つけます。

    Write-Host (Get-Pfxcertificate -FilePath certs\iot-device-<device name>-primary.cert.pem).Thumbprint
    

    このコマンドは 2 回実行します。1 回目はプライマリ証明書、2 回目はセカンダリ証明書に対して実行します。 自己署名 X.509 証明書を使用して新しい IoT デバイスを登録する場合は、両方の証明書のサムプリントを指定します。

CA 署名証明書

CA によって署名された証明書を使用して IoT デバイスを認証する場合は、ソリューションのルート CA 証明書を IoT Hub にアップロードする必要があります。 同じルート CA 証明書を使用して、IoT デバイスが IoT Hub で認証できるように、そのデバイスに配置するデバイス証明書を作成します。

このセクションの証明書は、X.509 証明書チュートリアル シリーズの IoT Hub の手順を示しています。 このシリーズの導入については、「公開キーの暗号化と X.509 公開キー基盤について」を参照してください。

  1. 作業ディレクトリからルート CA 証明書ファイル certs\azure-iot-test-only.root.ca.cert.pem をお使いの IoT ハブにアップロードします。

  2. 自動検証を選択していない場合は、Azure portal で提供されているコードを使用して、そのルート CA 証明書を所有していることを確認します。

    New-CACertsVerificationCert "<verification code>"
    
  3. お使いのダウンストリーム デバイスに証明書チェーンを作成します。 IoT Hub でデバイスの登録に使われたのと同じデバイス ID を使用します。

    New-CACertsDevice "<device id>"
    

    このスクリプト コマンドでは、証明書とキーのファイルがいくつか作成されます。 以下の証明書とキーのペアをダウンストリーム IoT デバイスにコピーし、IoT Hub に接続するアプリケーション内で、それらのペアを参照する必要があります。

    • certs\iot-device-<device id>.cert.pem
    • certs\iot-device-<device id>.cert.pfx
    • certs\iot-device-<device id>-full-chain.cert.pem
    • private\iot-device-<device id>.key.pem