Howto で出来ること
EdgeLock SE050 にプリインストールされた X.509 証明書を用いたデバイス認証によって単一のデバイスを Azure IoT Hub に接続する。
Howto の概要
- Armadillo IoT ゲートウェイ G4 向け
- クラウドサービス (Azure IoT Hub と Azure IoT Hub DPS )側の環境を構築する
- EdgeLock SE050 を利用して、単一のデバイスを X.509 認証で Azure Iot Hub DPS 経由で Azure Iot Hub に登録し、message を送信する
- 接続アプリケーションは azure-iot-sdk-python の provision_x509.py を利用する
- Microsoft Azure Portal を利用してプロビジョニングを行います
EdgeLock SE050
NXP Semiconductors 製 EdgeLock SE050 (以下「SE050」という) は IoT アプリケーション向けのセキュアエレメントです。様々なアルゴリズムに対応した暗号エンジン、セキュアストレージを搭載します。内部処理は秘密鍵を露出させることなくセキュアに暗号処理を行うことができます。外部インターフェースは I2C を採用して GlobalPlatform が規定する Secure Channel Protocol 03 に準拠し、バスレベル暗号化 (AES)、ホストとカードの相互認証 (CMAC ベース) を行うことも可能です。また、SE050 はターンキーソリューションとして利用を開始してすぐにクラウドサービスなど PKI を基にしたサービスに接続することができます。チップ固有の X.509証明書などが事前にプロビジョニングされた状態で出荷されます。
Azure IoT Hub
Azure IoT Hub は IoT デバイスの接続や管理を行うことができる Microsoft のクラウドサービスです。Azure IoT Hub だけでも IoT デバイス認証は可能ですが、本 Hotwo では、Azure IoT Hub Device Provisioning Service (以下「Azure IoT Hub DPS」という) を経由して Azure Iot Hub への接続を試みます。Azure IoT Hub DPS は Azure IoT Hub のヘルパーサービスです。Azure IoT Hub へのプロビジョニングを代行します。ゼロタッチプロビジョンニングと呼ばれる、工場などで事前にセットアップを行っておくことで、それ以降のプロビジョニング作業が不要となる仕組みを用意しています。また、小規模から大規模までスケールする IoT デバイス群のプロビジョンニングに対応が可能です。
セットアップ作業の流れと実運用について
以下に接続までの流れを示します。これらの作業はセットアップ時に一度だけ行います。セットアップが完了した後には Armadillo IoT ゲートウェイ G4 を Azure IoT Hub に接続する IoT デバイスとして利用することができます。
- SE050 を有効にする
- IoT デバイスの準備をする
- SE050 から証明書を取得する
- Microsoft Azure アカウントを作る
- Azure IoT Hub にプロビジョニングする
- Azure IoT Hub を作成する
- Azure IoT Hub DPS を作成する
- 証明書を登録する
- Azure IoT Hub に接続するために必要な情報を取得する
- デバイスアプリケーションを実行する
実運用には、「1. デバイス上で SE050 から証明書を取得する」を事前に行っておいて、運用者 (もしくは開発者) に証明書とリファレンスキーを渡して 2. 以降のクラウド側の構築を行う分担が考えられます。証明書やリファレンスキーは SE050 チップと紐づくので漏洩が脆弱性につながるリスクは大きくありません。
SE050 を有効にする
以下を参考にセットアップ作業を行う前に SE050 の Deep Power-down を解除してください。
SE050 から証明書を取得する
以下を参考にセットアップ作業を行う前に NXP Semiconductors の SE050 ミドルウェア (Plug & Trust MW) のビルド、SE050 から証明書とリファレンスキーの取得をしてください。
Microsoft Azure アカウントを作る
すでに Microsoft Azure を購読済みであれば次の節に移動してください。ここでは無料の試行用のアカウントを利用します。
1, 2 https://www.azure.com へ移動してフリーのアカウントを作ります。
Azure にサインインしてください。アカウントがなければアカウントを作ってください。
3 ~ 5 入力して、6 次に進んでください。
7 入力して、8 次に進んでください。
9 入力に問題がなければ Azure アカウントを作成します。
Azure IoT Hub を作成する
1, 2 Microsoft Azure Portal に接続してリソースを作ります。
3, 4 Azure IoT Hub を作ります。
5 ~ 8 入力してください。
9 入力してください。
10 入力してください。
11 入力に問題がなければ Azure IoT Hub をつくります。 以下、非表示とあるのはセキュリティ目的のためあえて表示していない項目です。
Azure IoT Hub DPS を作成する
1, 2 Microsoft Azure Portal に接続してリソースを作ります。Azure IoT Hub を作ってからこの作業を行ってください。
3, 4 Azure IoT Hub DPS を作ります。
5 ~ 8 入力してください。
9 入力してください。
10 入力に問題がなければ Azure IoT Hub DPS をつくります。
Home に移動すると上記で作成した Azure IoT Hub DPS のリンクが増えています。作成した Azure IoT Hub DPS へ移動してください。 移動すると以下のようなページが表示されます。
ID Scope は Azure IoT Hub へ接続する際に必要な情報です。後ほど利用するのでメモしてください。
Azure IoT HuB DPS に証明書を登録する
SE050 から取得した証明書を Azure IoT Hub DPS に登録してデバイス認証に利用します。 Home から Azure IoT Hub DPS へ移動してください。
1, 2 ここでは IoT デバイス個別に証明書を登録する Indivisual enroll を利用します。
3 ~ 8 取得した証明書をロードしてください。また、Azure IoT Hub とリンクする設定 (2つ下の画像)を行ってから、保存してください。 6.IoT edge device を有効にすると Azure IoT Edge サービスに対応したデバイスとして登録ができます。Azure IoT Edge サービスに接続する場合は有効にしてください。
Azure IoT Edge サービスに接続するデバイスを登録する場合は有効にしてください
7-1, 7-2 enroll を保存する前に Azure IoT Hub と Azure IoT Hub DPS を関連付けます。
Azure IoT Hub に接続するために必要な情報を取得する
以下は Azure IoT Hub に接続するために、これまでの作業で入手した情報の一覧です。 今後はこの情報を基に Azure IoT Hub に接続するアプリケーションを設定して接続してください。
- SE050 から取得した証明書
- SE050 から取得したリファレンスキー
- ID SCOPE
以上で、Azure IoT Hub, Azure IoT Hub DPS 上の作業は終了です。 これ以降はAzure IoT Hub へ接続するアプリケーションを動作させる方法について説明します。
azure-iot-sdk-python
ここでは azure-iot-sdk-python を使って接続を確認していきます。 azure-iot-sdk-python は簡単に Azure IoT Hub に接続するための python 環境です。Microsoft によって管理されています。
準備
Plug & trust MW のビルドで python3 はインストール済みの前提なので省略します。
Azure IoT 向けの python のライブラリをインストールします。
[container ~]# pip install azure-iot-device
Github からソースファイルを取得するために git をインストールします。
[container ~]# apk add git
ソースファイルの取得
GitHub からリポジトリをクローンします。
[container ~]# git clone https://github.com/Azure/azure-iot-sdk-python.git
設定
NXP Semiconductors から提供される Plug & Trust MW 経由で SE050 にアクセスする OpenSSL 設定ファイルを利用します。
[container ~]# export OPENSSL_CONF=/root/simw-top/demos/linux/common/openssl11_sss_se050.cnf
以下は Plug & Trust MW のための接続デバイスの設定です。
[container ~]# export EX_SSS_BOOT_SSS_PORT=/dev/i2c-2:0x48
デモアプリケーションには環境変数でパラメータを渡す必要があります。
接続先のエンドポイントは基本的に以下のリンクです。
[container ~]# export PROVISIONING_HOST=global.azure-devices-provisioning.net
以下は設定の例です。各自の環境に合わせて設定値を入力してください。
[container ~]# export PROVISIONING_IDSCOPE=0ne00123456
[container ~]# export DPS_X509_REGISTRATION_ID=Python-device-01
[container ~]# export X509_CERT_FILE=key.pem
[container ~]# export X509_KEY_FILE=device_cert.pem
[container ~]# export PASS_PHRASE=
env | description |
---|---|
PROVISIONING_IDSCOPE | 0neXXXXXXX。Azure IoT Hub DPS のトップページに表示されている情報です。Azure IoT Hub DPS を一意に識別するために使用されます。 |
DPS_X509_REGISTRATION_ID | 任意の名前をつけてください。 |
X509_CERT_FILE | SE050 から取得したリファレンスキーを入力してください。 |
X509_KEY_FILE | SE050 から取得した証明書を入力してください。 |
PASS_PHRASE | 証明書のパスフレーズ。本 Howto の手順ではパスワードは付加していません。必要であれば各自付加してこちらにパスフレーズを入力してください。 |
デバイスアプリケーションの実行
以下のコマンドを実行してください。
[container ~]# cd azure-iot-sdk-python/azure-iot-device/samples/async-hub-scenarios
[container ~/azure-(省略)...]# python3 provision_x509.py
以下はコンソール出力の例です。
ssse-flw: EmbSe_Init(): Entry
App :INFO :Using PortName='/dev/i2c-2:0x48' (ENV: EX_SSS_BOOT_SSS_PORT=/dev/i2
c-2:0x48)
sss :INFO :atr (Len=35)
00 A0 00 00 03 96 04 03 E8 00 FE 02 0B 03 E8 08
01 00 00 00 00 64 00 00 0A 4A 43 4F 50 34 20 41
54 50 4F
sss :WARN :Communication channel is Plain.
sss :WARN :!!!Not recommended for production use.!!!
ssse-flw: Version: 1.0.5
ssse-flw: EmbSe_Init(): Exit
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 32 random bytes
ssse-flw: EmbSe_Rand invoked requesting 32 random bytes
ssse-flw: EmbSe_Rand invoked requesting 32 random bytes
global.azure-devices-provisioning.net
: (省略)
sending message #1
sending message #2
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
sending message #3
sending message #4
sending message #5
sending message #6
sending message #7
sending message #8
sending message #9
sending message #10
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
done sending message #1
done sending message #2
done sending message #3
done sending message #4
done sending message #5
done sending message #6
done sending message #7
done sending message #8
done sending message #9
done sending message #10
ssse-flw: EmbSe_Rand invoked requesting 16 random bytes
ssse-flw: EmbSe_Finish(): Entry
ssse-flw: EmbSe_Finish(): Exit
ssse-flw: EmbSe_Destroy(): Entry
Azure IoT Hub の確認
Azure IoT Hub をみるとデバイスが登録されたことが確認できます。 以下は Azure IoT Edge サービスに接続可能な IoT Edge Device を登録した例です。Azure IoT Edge サービスに接続しないデバイスは 1つ上の Devices で確認できます。
参考
以下の手順を参考にしております。
- EdgeLock™ SE05x for secure connection to Azure IoT Hub