デバイスの X.509 証明書を展開する方法
IoT ソリューションのライフサイクルの間に、証明書を展開する必要があります。 証明書を展開する主な理由としては、セキュリティ違反および証明書の期限切れの 2 つが挙げられます。
セキュリティ違反が発生した際にシステムを保護するためのセキュリティのベスト プラクティスは、証明書を展開することです。 「Assume Breach Methodology」(侵害想定の方法) の一環として、マイクロソフトは予防措置に加えて事後対応型のセキュリティ プロセスの必要性を提唱しています。 デバイスの証明書の展開は、これらのセキュリティ プロセスの一部として含まれる必要があります。 証明書を展開する頻度は、ソリューションのセキュリティのニーズに左右されます。 非常に機密性の高いデータを扱うソリューションを持つ顧客は証明書を毎日展開する場合がある一方で、数年ごとに展開する顧客もいます。
デバイスの証明書の展開は、デバイスに格納されている証明書や IoT ハブの更新が関与します。 後ほど、デバイスはデバイス プロビジョニング サービス (DPS) の通常のプロビジョニングを使用して、IoT ハブと再プロビジョニングします。
新しい証明書を取得する
お使いの IoT デバイス用の新しい証明書を取得する方法は数多くあります。 これらには、デバイス ファクトリから証明書を取得する、独自の証明書を作成する、サード パーティに証明書の作成を管理してもらうなどの方法があります。
証明書は互いに署名され、ルート CA 証明書からリーフ証明書への信頼チェーンを形成します。 署名証明書は、信頼チェーンの最後のリーフ証明書の署名に使用される証明書です。 署名証明書には、ルート CA 証明書、または信頼チェーンの中間証明書を指定できます。 詳しくは、「X.509 証明書」をご覧ください。
署名証明書を取得する方法は 2 つあります。 最初の方法は、ルート証明機関 (CA) から署名証明書を購入する方法で、実稼働システムで推奨されます。 この方法は、信頼できる発行元にセキュリティをチェーンでつなぎます。
2 つ目の方法は、OpenSSL などのツールを使用して、独自の X.509 証明書を作成する方法です。 この方法は X.509 証明書のテストに適していますが、セキュリティはほとんど保証されません。 この手法は、独自の CA プロバイダーとして機能する準備ができていない限り、テストのみに使用することをお勧めします。
証明書を端末に展開する
デバイス上の証明書は、常にハードウェア セキュリティ モジュール (HSM) などの安全な場所に格納する必要があります。 デバイスの証明書を展開する方法は、それらが作成された方法と、最初にデバイスにインストールされた方法によって異なります。
サード パーティから証明書を取得した場合は、その証明書を展開する方法を確認する必要があります。 そのプロセスはサード パーティとの取り決めの中に含まれている場合もあれば、別個のサービスとして提供される場合もあります。
デバイスの証明書を自身で管理している場合は、証明書を更新するための独自のパイプラインをビルドする必要があります。 新旧のリーフ証明書が同じ共通名 (CN) を持つようにします。 同じ CN を持つことで、デバイスは重複した登録コードを作成することなく、再プロビジョニングできます。
デバイスに新しい証明書をインストールするメカニズムには、多くの場合、次のいずれかの方法が含まれます。
影響を受けるデバイスが新しい証明書署名要求 (CSR) を PKI 証明機関 (CA) に送信するのをトリガーできます。 この場合、各デバイスは、CA から直接、新しいデバイス証明書をダウンロードできます。
各デバイスからの CSR を保持し、それを使って PKI CA から新しいデバイス証明書を取得できます。 この場合は、Device Update for IoT Hub のようなセキュリティ保護された OTA 更新サービスを使って、ファームウェアの更新で各デバイスに新しい証明書をプッシュする必要があります。
DPS で証明書を展開する
デバイスの証明書は、手動で IoT ハブに追加できます。 Device Provisioning Service インスタンスを使用して、証明書を自動化することもできます。 この記事では、自動プロビジョニングのサポートに、Device Provisioning Service インスタンスが使用されているものとします。
デバイスが自動プロビジョニングによって初めてプロビジョニングされると、デバイスは起動し、プロビジョニング サービスに接続されます。 プロビジョニング サービスは、資格情報としてデバイスのリーフ証明書を使用して IoT ハブにデバイスの ID を作成する前に、ID チェックを実行することで応答します。 その後、プロビジョニング サービスはデバイスがどの IoT ハブに割り当てられているかを伝えます。次に、そのデバイスがリーフ証明書を使用して認証し、IoT ハブに接続します。
新しいリーフ証明書がデバイスに展開されると、接続に新しい証明書が使用されるため、IoT ハブに接続できなくなります。 IoT ハブは、古い証明書を持つデバイスのみを認識します。 デバイスの接続の試行結果は、「未承認」の接続エラーになります。 このエラーを解決するには、デバイスが新しいリーフ証明書に対応するように、デバイスの登録エントリを更新する必要があります。 その後プロビジョニング サービスは、デバイスが再プロビジョニングされるときに、必要に応じて IoT Hub のデバイス レジストリ情報を更新できます。
この接続エラーに対する例外として、プロビジョニング サービスでデバイスの登録グループを作成している場合のシナリオが考えられます。 このケースで、デバイスの証明書の信頼チェーンにルートまたは中間証明書を展開していない場合、デバイスは新しい証明書が登録グループで定義された信頼チェーンの一部である場合に認識されます。 このシナリオがセキュリティ違反に対する反応として発生する場合は、少なくとも、グループ内の違反と見なされる特定のデバイス証明書を禁止する必要があります。 詳しくは、登録グループ内の特定のデバイスを禁止するに関する記事をご覧ください
登録エントリの更新を処理する方法は、個々の登録またはグループ登録のどちらを使用しているかどうかに左右されます。 また、推奨される手順は、セキュリティ違反または証明書の期限切れのどちらが原因で証明書を展開しているかによって異なります。 次のセクションは、これらの更新をどのように処理するかについて説明します。
個々の登録用の証明書を展開する
セキュリティ侵害への対応として証明書を展開する場合、セキュリティが侵害された証明書があれば直ちに削除する必要があります。
証明書の期限切れを処理するために証明書を展開する場合、プロビジョニングを試行するデバイスのダウンタイムが短縮されるように、セカンダリ証明書の構成を使用することをお勧めします。 その後、セカンダリ証明書の期限切れが近づき、展開することが必要になったら、プライマリの構成を使用するよう切り替えることができます。 このようにプライマリとセカンダリの証明書を切り替えることで、プロビジョニングを試行するデバイスのダウンタイムを短縮できます。
展開された証明書の登録エントリの更新は、[登録を管理します] ページで行われます。 そのページにアクセスするには、次の手順に従います。
Azure portal にサインインし、デバイスの登録エントリがある Device Provisioning Service インスタンスに移動します。
[登録を管理します] を選択します。
[個々の登録] タブを選択し、一覧から登録 ID エントリを選択します。
既存の証明書を削除する場合は、[プライマリ/セカンダリ証明書を削除または置換する] チェック ボックスをオンにします。 ファイル フォルダー アイコンを選択することで、新しい証明書を参照してアップロードします。
ご利用の証明書のいずれかのセキュリティが侵害された場合は、できるだけ早く削除する必要があります。
ご利用の証明書の 1 つが有効期限に近づいている場合、2 つ目の証明書がその日以降もアクティブである限りは、そのまま保持できます。
終了したら、[保存] を選択します。
プロビジョニング サービスからセキュリティが侵害された証明書を削除した場合、その証明書に対するデバイスの登録が存在する限り、その証明書を使用して IoT ハブにデバイスを接続できます。 これに対処するには 2 つの方法があります。
1 番目の方法は、手動で IoT ハブに移動し、直ちに、侵害された証明書に関連付けられているデバイスの登録を削除することです。 その後、更新された証明書でデバイスが再びプロビジョニングされると、新しいデバイス登録が作成されます。
2 番目の方法は、再プロビジョニングのサポートを使用して、同じ IoT ハブにデバイスを再度プロビジョニングすることです。 この方法を使用すると、IoT ハブ上のデバイス登録に対する証明書を置き換えることができます。 詳しくは、「How to reprovision devices」(デバイスを再プロビジョニングする方法) をご覧ください。
登録グループ用の証明書を展開する
セキュリティ侵害に対する対応としてグループ登録を更新するには、侵害されたルート CA または中間証明書をすぐに削除してください。
証明書の期限切れを処理するために証明書を展開する場合、プロビジョニングを試行するデバイスのダウンタイムが発生しないように、セカンダリ証明書の構成を使用することをお勧めします。 後ほどセカンダリ証明書の期限切れが近づき、展開することが必要になったら、プライマリの構成を使用するよう切り替えることができます。 このようにプライマリとセカンダリの証明書を切り替えることで、プロビジョニングを試行するデバイスのダウンタイムが発生しないようにすることができます。
ルート CA 証明書を更新する
Device Provisioning Service インスタンスのナビゲーション メニューの [設定] セクションから、[証明書] を選択します。
一覧から、セキュリティが侵害されたまたは期限切れになった証明書を選択して、[削除] を選択します。 該当する証明書の名前を入力して削除を確定し、[OK] をクリックします。
「検証済みの CA 証明書の構成」に記載の手順に従い、新しいルート CA 証明書を追加して検証します。
Device Provisioning Service インスタンスのナビゲーション メニューの [設定] セクションから [登録の管理] を選択し、次に [登録グループ] を選択します。
リストから登録グループの名前を選択します。
[X.509 証明書の設定] セクションで、新しいルート CA 証明書を選択することで、セキュリティが侵害されたまたは期限切れになった証明書を置換するか、セカンダリ証明書として追加します。
[保存] を選択します。
プロビジョニング サービスからセキュリティが侵害された証明書が削除されても、その証明書に対するデバイスの登録が存在する限り、その証明書を使用して IoT ハブにデバイスを接続できます。 これに対処するには 2 つの方法があります。
1 番目の方法は、手動で IoT ハブに移動し、直ちに、セキュリティが侵害された証明書に関連付けられているデバイスの登録を削除することです。 その後、更新された証明書でデバイスが再びプロビジョニングされると、それぞれに対する新しいデバイス登録が作成されます。
2 番目の方法は、再プロビジョニングのサポートを使用して、同じ IoT ハブにデバイスを再度プロビジョニングすることです。 この方法を使用すると、IoT ハブ上のデバイス登録に対する証明書を置き換えることができます。 詳しくは、「How to reprovision devices」(デバイスを再プロビジョニングする方法) をご覧ください。
中間証明書を更新する
Device Provisioning Service インスタンスのナビゲーション メニューの [設定] セクションから [登録の管理] を選択し、次に [登録グループ] を選択します。
一覧からグループ名を選択します。
既存の証明書を削除する場合は、[プライマリ/セカンダリ証明書を削除または置換する] チェック ボックスをオンにします。 ファイル フォルダー アイコンを選択することで、新しい証明書を参照してアップロードします。
ご利用の証明書のいずれかのセキュリティが侵害された場合は、できるだけ早く削除する必要があります。
ご利用の証明書の 1 つが有効期限に近づいている場合、2 つ目の証明書がその日以降もアクティブである限りは、そのまま保持できます。
各中間証明書は、プロビジョニング サービスに既に追加されている検証済みのルート CA 証明書で署名する必要があります。 詳しくは、「X.509 証明書」をご覧ください。
プロビジョニング サービスからセキュリティが侵害された証明書が削除されても、その証明書に対するデバイスの登録が存在する限り、その証明書を使用して IoT ハブにデバイスを接続できます。 これに対処するには 2 つの方法があります。
1 番目の方法は、手動で IoT ハブに移動し、直ちに、侵害された証明書に関連付けられているデバイスの登録を削除することです。 その後、更新された証明書でデバイスが再びプロビジョニングされると、それぞれに対する新しいデバイス登録が作成されます。
2 番目の方法は、再プロビジョニングのサポートを使用して、同じ IoT ハブにデバイスを再度プロビジョニングすることです。 この方法を使用すると、IoT ハブ上のデバイス登録に対する証明書を置き換えることができます。 詳しくは、「How to reprovision devices」(デバイスを再プロビジョニングする方法) をご覧ください。
デバイスを再プロビジョニングする
証明書がデバイスと Device Provisioning Service の両方に展開されたら、デバイスは Device Provisioning Service と通信してデバイス自体を再プロビジョニングできます。
プロビジョニングするデバイスをプログラミングする簡単な方法の 1 つは、デバイスが IoT ハブに接続を試行しているときに「未承認」のエラーを受け取った場合に、プロビジョニング サービスに連絡してプロビジョニング フローを実行するようデバイスをプログラミングする方法です。
もう 1 つの方法は、新旧の証明書の両方の短期間のオーバーラップを有効にし、IoT ハブを使用してデバイスにコマンドを送信し、IoT Hub の接続情報を更新するためにプロビジョニング サービスを介してそれらデバイスを再登録する方法です。 各デバイスはコマンドを個別に処理する場合があるため、コマンドが呼び出されたときにデバイスが何をするかわかるようにプログラミングする必要があります。 IoT Hub を介してデバイスに指示を出す方法は複数ありますが、ダイレクト メソッドまたはジョブを使用してプロセスを開始することをお勧めします。
再プロビジョニングが完了すると、デバイスは新しい証明書を使用して IoT Hub に接続できるようになります。
証明書を禁止する
セキュリティ違反への対応として、デバイスの証明書を禁止することが必要になる場合があります。 デバイスの証明書を禁止するには、ターゲット デバイスまたは証明書の登録エントリを無効にします。 詳しくは、登録解除の管理に関するページのデバイスの禁止に関する記事をご覧ください。
証明書が無効になった登録エントリの一部として追加されると、その証明書が別の登録エントリの一部として有効になっている場合でも、その証明書を使用した IoT ハブへの登録の試行はすべて失敗します。
次のステップ
- デバイス プロビジョニング サービスの X.509 証明書について詳しくは、「X.509 証明書の構成証明」をご覧ください
- Azure IoT Hub Device Provisioning Service で X.509 CA 証明書の所有証明を行う方法について詳しくは、証明書を検証する方法に関する記事をご覧ください。
- ポータルを使って登録グループを作成する方法について詳しくは、「Azure Portal でデバイス登録を管理する方法」をご覧ください。