適用対象: IoT Edge 1.5
重要
IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「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 をインストールします。 OpenSSL が既にインストールされている場合は、PATH 環境変数で openssl.exe を使用できることを確認します。
OpenSSL は、さまざまな方法でインストールできます。
簡単:サードパーティの OpenSSL バイナリを (たとえば、SourceForge の OpenSSL から) ダウンロードしてインストールします。 openssl.exe への完全なパスを PATH 環境変数に追加します。
推奨: OpenSSL ソース コードをダウンロードし、デバイスでバイナリをビルドするか、 vcpkg を使用します。 次の手順では、vcpkg を使用してソース コードをダウンロードし、コンパイルして、Windows デバイスに OpenSSL をインストールします。
vcpkg をインストールするディレクトリに移動します。 指示に従って vcpkg インストーラーをダウンロードし、実行します。
vcpkg がインストールされたら、PowerShell プロンプトから次のコマンドを実行して、Windows x64 用の OpenSSL パッケージをインストールします。 インストールが完了するまで、通常は約 5 分かかります。
.\vcpkg install openssl:x64-windows
ご自分の PATH 環境変数に
<vcpkg path>\installed\x64-windows\tools\openssl
を追加して、openssl.exe ファイルを呼び出せるようにします。
PowerShell でのスクリプトの準備
Azure IoT Edge の Git リポジトリには、テスト証明書の生成に使用できるスクリプトが含まれています。 このセクションでは、IoT Edge リポジトリを複製し、スクリプトを実行します。
管理者モードで PowerShell を開きます。
デモ証明書を生成するスクリプトがある IoT Edge Git リポジトリを複製します。
git clone
コマンドを使用するか、ZIP をダウンロードします。git clone https://github.com/Azure/iotedge.git
ディレクトリを作成し、そこに証明書スクリプトをコピーします。 このディレクトリには、すべての証明書ファイルとキー ファイルが作成されます。
mkdir wrkdir cd .\wrkdir\ cp ..\iotedge\tools\CACertificates\*.cnf . cp ..\iotedge\tools\CACertificates\ca-certs.ps1 .
リポジトリを ZIP としてダウンロードした場合、フォルダー名は
iotedge-master
され、残りのパスは同じです。スクリプトを実行するように PowerShell 実行ポリシーを設定します。
Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser
スクリプトで使用される関数を PowerShell のグローバル名前空間にインポートします。
. .\ca-certs.ps1
PowerShell ウィンドウには、このスクリプトによって生成される証明書はテスト専用であり、運用環境のシナリオでは使用できないことを示す警告が表示されます。
OpenSSL が正しくインストールされていることを確認し、既存証明書と名前の競合がないことを確認します。 問題がある場合は、スクリプト出力に、システムで問題を修正する方法が記述されているはずです。
Test-CACertsPrerequisites
ルート CA 証明書の作成
ルート CA 証明書を生成するには、このスクリプトを実行します。 この記事の手順ごとにこの証明書が必要です。
ルート CA 証明書を使用して、IoT Edge シナリオをテストするための他のデモ証明書を作成します。 同じルート CA 証明書を使用して、複数の IoT Edge またはダウンストリーム デバイスのデモ証明書を作成できます。
作業フォルダーにルート CA 証明書が既にある場合は、新しい証明書を作成しないでください。 新しいルート CA 証明書を作成すると、古いルート CA 証明書が上書きされ、古い証明書から作成されたすべてのダウンストリーム証明書が機能しなくなります。 複数のルート CA 証明書が必要な場合は、それらを個別のフォルダーで管理します。
証明書生成スクリプトを配置する作業ディレクトリ
wrkdir
に移動します。ルート 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 デバイス上の構成ファイルのプロビジョニング セクションにあります。
証明書生成スクリプトとルート CA 証明書を含む作業ディレクトリ
wrkdir
に移動します。次のコマンドを使用して、IoT Edge デバイス ID 証明書と秘密キーを作成します。
New-CACertsEdgeDeviceIdentity "<device-id>"
このコマンドに入力する名前は、IoT Hub の IoT Edge デバイスのデバイス ID です。
新しいデバイス ID コマンドでは、証明書とキーのファイルがいくつか作成されます。
タイプ ファイル 説明 デバイス 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) を使用する場合、構成ファイルの中で指定する必要があります。
Edge CA 証明書を作成する
これらの証明書は 、ゲートウェイ のシナリオ で必要になります。これは、Edge CA 証明書を使用すると、IoT Edge デバイスがダウンストリーム デバイスにその ID を検証できるためです。 ダウンストリーム デバイスを IoT Edge に接続していない場合は、このセクションをスキップします。
Edge CA 証明書では、デバイスで実行されているモジュールの証明書も作成されますが、Edge CA が設定されていない場合、IoT Edge ランタイムは一時的な証明書を作成できます。 IoT Edge デバイスの ファイルの config.toml
セクションに Edge CA 証明書を配置します。 詳細については、「Azure IoT Edge での証明書の使用方法について理解する」を参照してください。
証明書生成スクリプトとルート CA 証明書がある作業ディレクトリ
wrkdir
に移動します。次のコマンドを使って、IoT Edge CA 証明書と秘密キーを作成します。 CA 証明書の名前を入力します。 New-CACertsEdgeDevice コマンドには、構成ファイルのホスト名パラメーターと同じ名前や IoT Hub のデバイスの ID を使用しないでください。
New-CACertsEdgeDevice "<CA cert name>"
このコマンドでは、証明書とキーのファイルがいくつか作成されます。 次の証明書とキーのペアを IoT Edge デバイスにコピーし、構成ファイルで参照します。
certs\iot-edge-device-<CA cert name>-full-chain.cert.pem
private\iot-edge-device-<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 デバイスにはデバイス証明書のコピーも必要です。
証明書生成スクリプトとルート CA 証明書がある作業ディレクトリ
wrkdir
に移動します。ダウンストリーム デバイス用に 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
各証明書から 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 公開キー基盤について」を参照してください。
作業ディレクトリからルート CA 証明書ファイル
certs\azure-iot-test-only.root.ca.cert.pem
をお使いの IoT ハブにアップロードします。自動検証を選択していない場合は、Azure portal で提供されているコードを使用して、そのルート CA 証明書を所有していることを確認します。
New-CACertsVerificationCert "<verification code>"
お使いのダウンストリーム デバイスに証明書チェーンを作成します。 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