演習 - OpenSSL を使用して X.509 CA 証明書の生成と構成を行う
この演習では、Azure Cloud Shell 内で OpenSSL を使って X.509 CA 証明書を生成した後、X.509 認証を使ってプロビジョニングするために、IoT デバイスの Device Provisioning Service (DPS) インスタンスに登録グループを作成します。
この X.509 CA 証明書は、この登録グループ内の各デバイスのデバイス証明書に署名するために使われます。 DPS の登録グループには、この先頭の CA 証明書のコピーのみが必要です。 デバイスは、プロビジョニングのために DPS に接続するとき、デバイス証明書、中間証明書、先頭の CA 証明書を示す証明機関の証明書チェーンを提示します。
タスク 1:ルートと中間の CA 証明書を生成する
このセクションでは、OpenSSL を使って X.509 CA 証明書を生成します。 この証明書は、DPS 内でグループ登録を構成するために使われます。
Azure サンドボックスで、certificates という名前のディレクトリを作成してから、次のコマンドを使って新しいディレクトリに移動します。
mkdir certificates cd certificates
X.509 証明書の作成に使うヘルパー スクリプトと 2 つの OpenSSL 構成ファイルをダウンロードします。
ファイルのダウンロード
curl https://raw.githubusercontent.com/Azure/azure-iot-sdk-c/main/tools/CACertificates/certGen.sh --output certGen.sh curl https://raw.githubusercontent.com/Azure/azure-iot-sdk-c/main/tools/CACertificates/openssl_device_intermediate_ca.cnf --output openssl_device_intermediate_ca.cnf curl https://raw.githubusercontent.com/Azure/azure-iot-sdk-c/main/tools/CACertificates/openssl_root_ca.cnf --output openssl_root_ca.cnf
スクリプトのアクセス許可を更新して、ユーザーがその読み取り、書き込み、実行を行えるようにします。
chmod 700 certGen.sh
ヘルパー スクリプトとサポート ファイルは、GitHub でホストされている、Azure IoT Device SDK のコンポーネントである Azure/azure-iot-sdk-c オープンソース プロジェクトでホストされています。 certGen.sh ヘルパー スクリプトを使うと、OpenSSL の構成の仕様 (このモジュールの範囲外) を詳しく調べなくても、CA 証明書がどのように使われているかを確認できます。
このヘルパー スクリプトを使う詳細な手順と、Bash ではなく PowerShell を使う方法については、次をご覧ください。「サンプルおよびチュートリアルのためのテスト用 CA 証明書の管理」
警告
このヘルパー スクリプトで作成された証明書は、運用環境では使わないでください。 それらにはハードコーディングされたパスワード ("1234") が含まれ、30 日後に有効期限が切れ、デモ用にのみ提供されています。 運用環境で CA 証明書を使うときは、証明書の作成と有効期間の管理に、会社のセキュリティのベスト プラクティスを必ず適用してください。
関心がある場合は、
cat
コマンドを使って、ダウンロードしたスクリプト ファイルの内容を簡単に読むことができます。cat certGen.sh
次のコマンドを入力して、ルート証明書と中間証明書を生成します。
./certGen.sh create_root_and_intermediate
create_root_and_intermediate オプションを指定してスクリプトを実行したことに注意してください。 このコマンドでは、~/certificates ディレクトリからスクリプトを実行していることが想定されています。
このコマンドにより、azure-iot-test-only.root.ca.cert.pem という名前のルート CA 証明書が生成されて、./certs ディレクトリ (作成した certificates ディレクトリの下) に配置されました。
タスク 2:DPS でグループ登録 (X.509 証明書) を作成する
Azure サンドボックスで、CA 証明書を Device Provisioning Service インスタンスにアップロードします。 証明書の名前は
groupCA-sensors
です。verified true
コマンド パラメーターを指定すると、アップロード時に証明書を自動的に検証でき、証明書の所有証明を生成する追加の手順が不要になります。az iot dps certificate create --dps-name dps-$suffix --certificate-name groupCA-sensors --path ~/certificates/certs/azure-iot-test-only.root.ca.cert.pem --verified true
DPS インスタンスに登録グループを作成します。
az iot dps enrollment-group create --dps-name dps-$suffix --enrollment-id enrollgroup-sensors --root-ca-name groupCA-sensors --iot-hubs hub-$suffix.azure-devices.net --initial-twin-properties "{'telemetryDelay':'1'}" --allocation-policy static
このコマンドは、次のパラメーターを使って登録グループを作成します。
パラメーター 説明 --dps-name
DPS 識別子。 --enrollment-id
新しい登録グループの名前。 --root-ca-name
登録グループの構成証明方法を X.509 CA 署名済み証明書に設定し、DPS にアップロードした CA 証明書を指定します。 --iot-hubs
このモジュールの冒頭で作成して DPS にリンクした IoT ハブに、この登録グループ内のデバイスをプロビジョニングするように DPS を構成します。 --initial-twin-properties
この登録グループ内のすべてのデバイスがプロビジョニング後に受け取る、必要なプロパティを設定します。 デバイスは、properties.desired.telemetryDelay プロパティを使って、テレメトリの読み取りと IoT Hub への送信に対する時間遅延を設定します。 allocation-policy
IoT Hub へのデバイスの割り当て方法を決めるために使われます。 静的ポリシーでは、デバイスを割り当てる IoT ハブを 1 つ指定できます。
作業を確認
ルート CA の azure-iot-test-only.root.ca.cert.pem ファイルが /certs フォルダーに作成されたことを確認します。
dir ~/certificates/certs/
CA 証明書が Device Provisioning Service (DPS) インスタンスにアップロードされたことを確認します。
az iot dps certificate show --certificate-name groupCA-sensors --dps-name dps-$suffix
コマンドの戻り値の情報を調べます。 次に示すように、CA 証明書の名前が
groupCA-sensors
であることを確認します。"name": "groupCA-sensors"
このコマンドから戻される情報を調べて、タスク 2 のステップ 2 の
az iot dps certificate create
ステートメントで指定したパラメーターで DPS 登録グループが作成されたことを確認します。az iot dps enrollment-group show --dps-name dps-$suffix --enrollment-id enrollgroup-sensors