開発者モードのキーのプロビジョニング - 無料RTOS

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

開発者モードのキーのプロビジョニング

重要

このページで言及している Amazon-FreeRTOS リポジトリは非推奨です。新しいプロジェクトを作成するときは、ここから始めることをお勧めします。現在非推奨の Amazon-FreeRTOS リポジトリをベースにした既存の FreeRTOS プロジェクトが既にある場合は、「Amazon-FreeRTOS Github リポジトリ移行ガイド」を参照してください。

序章

このセクションでは、信頼された X.509 クライアント証明書をラボテスト用に IoT デバイスに追加するための 2 つのオプションについて説明します。デバイスの機能に応じて、オンボード ECDSA キーの生成、プライベートキーのインポート、X.509 証明書の登録など、プロビジョニング関連のさまざまな操作がサポートされるかどうかが決まります。また、ユースケースに応じて、オンボードフラッシュストレージの使用から専用の暗号ハードウェアの使用まで、さまざまなレベルのキー保護が必要です。このセクションでは、デバイスの暗号化機能での作業ロジックを示します。

オプション #1: AWS IoT からのプライベートキーのインポート

ラボテストの目的で、デバイスでプライベートキーのインポートが許可されている場合は、「無料RTOSデモの設定」の手順に従います。

オプション #2: オンボードプライベートキーの生成

デバイスにセキュアエレメントがある場合、または独自のデバイスキーペアと証明書を生成する場合は、こちらの手順に従います。

初期設定

最初に「無料RTOSデモの設定」の手順を実行します。ただし、最後のステップはスキップします (つまり「AWS IoT 認証情報をフォーマットするには」を省略します)。最終的に、demos/include/aws_clientcredential.h ファイルはお客様の設定で更新されますが、demos/include/aws_clientcredential_keys.h ファイルは更新されません。

デモプロジェクトの設定

ボード固有の入門ガイド のボードのガイドの説明に従って、coreMQTT Mutual Authentication デモを開きます。プロジェクトで、ファイル aws_dev_mode_key_provisioning.c を開き、デフォルトでゼロに設定されている keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR の定義を 1 に変更します。

#define keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR 1

その後、デモプロジェクトをビルドして実行し、次のステップに進みます。

パブリックキーの抽出

デバイスではまだプライベートキーとクライアント証明書がプロビジョニングされていないため、デモは AWS IoT に対する認証に失敗します。ただし、coreMQTT Mutual Authentication デモは、開発者モードのキープロビジョニングを実行することから始まり、プライベートキーがまだ存在しない場合は作成されます。シリアルコンソール出力の先頭近くは以下のようになっています。

7 910 [IP-task] Device public key, 91 bytes: 3059 3013 0607 2a86 48ce 3d02 0106 082a 8648 ce3d 0301 0703 4200 04cd 6569 ceb8 1bb9 1e72 339f e8cf 60ef 0f9f b473 33ac 6f19 1813 6999 3fa0 c293 5fae 08f1 1ad0 41b7 345c e746 1046 228e 5a5f d787 d571 dcb2 4e8d 75b3 2586 e2cc 0c

キーバイトの 6 行を DevicePublicKeyAsciiHex.txt というファイルにコピーします。次に、コマンドラインツール「xxd」を使用して、16 進バイトをバイナリに解析します。

xxd -r -ps DevicePublicKeyAsciiHex.txt DevicePublicKeyDer.bin

「openssl」を使用して、バイナリエンコード (DER) デバイスのパブリックキーを PEM 形式に設定します。

openssl ec -inform der -in DevicePublicKeyDer.bin -pubin -pubout -outform pem -out DevicePublicKey.pem

上記で有効にした一時的なキー生成設定は必ず無効にしてください。無効にしない場合、デバイスでは別のキーペアが作成されるため、前の手順を繰り返す必要があります。

#define keyprovisioningFORCE_GENERATE_NEW_KEY_PAIR 0
PKI (公開鍵基盤) のセットアップ

CA 証明書の登録」の手順に従って、デバイスラボ証明書の証明書階層を作成します。「CA 証明書を使用したデバイス証明書の作成」セクションで説明されているシーケンスを実行する前に停止します。

この場合、デバイスは証明書リクエスト (証明書サービスリクエスト (CSR)) に署名しません。CSR の作成と署名に必要な X.509 エンコードロジックは、ROM サイズを小さくするために、FreeRTOS デモプロジェクトから除外されているためです。代わりに、ラボテストの目的で、ワークステーションでプライベートキーを作成し、そのキーを使用して CSR に署名します。

openssl genrsa -out tempCsrSigner.key 2048 openssl req -new -key tempCsrSigner.key -out deviceCert.csr

認証機関を作成して AWS IoT に登録したら、以下のコマンドを使用して、前の手順で署名したデバイス CSR に基づいてクライアント証明書を発行します。

openssl x509 -req -in deviceCert.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out deviceCert.pem -days 500 -sha256 -force_pubkey DevicePublicKey.pem

CSR は一時的なプライベートキーで署名されましたが、発行された証明書は実際のデバイスのプライベートキーでのみ使用できます。CSR 署名者キーを別のハードウェアに保存し、その特定のキーで署名されたリクエストに対してのみ証明書を発行するように認証機関を設定する場合は、その同じメカニズムを本番稼働に使用できます。そのキーは、指定された管理者の管理下にあることが必要です。

証明書のインポート

証明書が発行されたら、次のステップはその証明書をデバイスにインポートすることです。認証機関 (CA) 証明書もインポートする必要があります。この証明書は、JITP の使用時に AWS IoT への初回認証が成功するために必要です。プロジェクトの aws_clientcredential_keys.h ファイルで、keyCLIENT_CERTIFICATE_PEM マクロを deviceCert.pem の内容になるように設定し、keyJITR_DEVICE_CERTIFICATE_AUTHORITY_PEM マクロを rootCA.pem の内容になるように設定します。

デバイスの承認

自前の証明書を使用するで説明されているように deviceCert.pem を AWS IoT レジストリにインポートします。新しい AWS IoT モノを作成し、PENDING 証明書とポリシーをモノにアタッチして、証明書に ACTIVE とマークする必要があります。これらのステップはすべて、AWS IoT コンソールで手動で実行できます。

新しいクライアント証明書が ACTIVE になり、モノとポリシーに関連付けられたら、coreMQTT Mutual Authentication デモをもう一度実行します。これで、AWS IoT MQTT ブローカーへの接続が成功します。