Eclipse HonoでのX.509証明書によるセキュアなデバイス認証
最近数ヶ月、基本的なセキュリティ基準を満たさない不安全なIoTデバイスがメディアで取り上げられています。繰り返し懸念されるのは、デバイスからクラウドサービスへ送信されるデータの機密性です。驚くべきことに、多くのデバイスがデータを暗号化せずに公衆網で送信しています。HTTPやMQTTのようなTCP/IPベースのプロトコルがTLS暗号化をサポートしているにもかかわらずです。
Eclipse Honoは、HTTPおよびMQTTアダプターで当初からTLSを有効にしてきました。0.9-M2マイルストーンでは、TLSハンドシェイク時のX.509クライアント証明書認証のサポートを追加し、デバイスがユーザー名/パスワードの代わりに鍵ペアを使用できるようになりました。
開発者の皆様へ
欧州最大のIoTハッカソンが2023年5月14〜15日、ベルリンで開催されます。700人以上の開発者がドメイン固有の課題に挑み、学び、ネットワークし、楽しめます。
本ガイドでは、完全な例を通じて解説します:テナント固有のトラストアンカーの作成と登録、デバイス証明書の生成、そのサブジェクトDNの登録、証明書を用いたHonoのMQTTアダプターへのデバイス認証。RSA暗号とX.509概念(RFC 5280)の実務知識を前提とします。
なぜクライアント証明書なのか?
パスワードを使うには、Honoの認証情報サービスにデバイスごとの秘密を格納し、デバイスが提供するパスワードと比較する必要があります。クライアント証明書なら、テナントごとに単一のトラストアンカーを登録するだけで、テナントの公開鍵を用いてTLSハンドシェイク時にすべてのデバイス証明書を検証できます。デバイスごとの秘密管理が不要になります。
テナント証明機関の作成
テナントのRSA鍵ペアと自己署名証明書を生成。これらがすべてのデバイス証明書の署名に使われます。
$ openssl genrsa -out tenant-key.pem 4096
$ openssl req -x509 -key tenant-key.pem -out tenant-cert.pem -days 365 -subj "/O=ACME Inc./CN=Sensors"
DNをシンプルに保つため、標準X.500属性(CN、L、ST、O、OU、C、STREET、DC、UID)のみを使用します。
テナントの登録
トラストアンカーをHonoに登録します。以下の例はHono Sandbox(v0.9-M2以降)を使用。ACMEをご自身のインスタンス用の一意のテナントIDに置き換えてください。
$ TENANT="ACME"
$ SUBJECT=$(openssl x509 -in tenant-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ PK=$(openssl x509 -in tenant-cert.pem -noout -pubkey | sed /^---/d | sed -z 's/\n//g')
$ cat < tenant.json
{
"tenant-id": "$TENANT",
"trusted-ca": {
"subject-dn": "$SUBJECT",
"public-key": "$PK"
}
}
EOS
$ curl -i -H "Content-Type: application/json" -H "Expect:" --data-binary @tenant.json https://hono.eclipse.org:28443/tenant
デバイス証明書の作成
デバイス鍵ペアを生成し、テナントのCAで署名された証明書を作成します。
$ openssl genrsa -out device-key.pem 4096
$ openssl req -new -key device-key.pem -subj "\/O=ACME Inc.\/CN=Hot Fuzz Device" | \
openssl x509 -req -days 365 -out device-cert.pem -CA tenant-cert.pem -CAkey tenant-key.pem -CAcreateserial
デバイスの登録
テナントにデバイスIDを登録します。
$ curl -i -H "Content-Type: application/json" --data-binary '{"device-id":"hot-fuzz"}' https://hono.eclipse.org:28443/registration/$TENANT
デバイスのサブジェクトDN登録
デバイス証明書のサブジェクトDNをデバイスIDと関連付けます。
$ SUBJECT=$(openssl x509 -in device-cert.pem -noout -subject -nameopt RFC2253 | sed s/^subject=//)
$ cat < credentials.json
{
"device-id": "hot-fuzz",
"type": "x509-cert",
"auth-id": "$SUBJECT",
"secrets": [{}]
}
EOS
$ curl -i -H "Content-Type: application/json" --data-binary @credentials.json https://hono.eclipse.org:28443/credentials/$TENANT
接続テスト
テナントのコンシューマーを起動し、デバイス証明書でテレメトリを送信します。
# コンシューマー起動
java -jar hono-cli-*-exec.jar \
--hono.client.host=hono.eclipse.org \
--hono.client.port=15671 \
--hono.client.tlsEnabled=true \
--hono.client.username=consumer@HONO \
--hono.client.password=verysecret \
--spring.profiles.active=receiver \
--tenant.id=$TENANT
# MQTTでテレメトリ送信
mosquitto_pub -h hono.eclipse.org -p 8883 \
--capath /etc/ssl/certs/ \
--cert device-cert.pem \
--key device-key.pem \
-q 1 -t telemetry -m "Hello there"
成功すれば、コンシューマーコンソールにメッセージが表示されます。HTTP経由でも送信可能です:
curl -i --cert device-cert.pem --key device-key.pem \
-H "Content-Type: plain/text" -H "Expect:" \
--data-binary "Hello there" https://hono.eclipse.org:8443/telemetry
モノのインターネットテクノロジー
- AT89S52マイコンとLM35センサーによる温度ベース機器制御システム
- 固体デバイス理論:物理から実用応用まで
- Eclipse Hono、MongoDBベースのデバイスレジストリを導入——スケーラブルで本番対応
- Eclipse Hono 1.0.0リリース:統合オープンソースIoT接続プラットフォーム
- バッテリー駆動医療機器向け信頼性の高い電源投入ソリューション
- 医療機器技術の進歩を追跡:市場予測と主要トレンド
- Arm、Stream Technologies買収でIoT接続性とデバイス管理を強化
- IoTデバイスの脆弱性がスマートホームを攻撃にさらす:認証情報漏洩の脅威
- 未設定IoTデバイス:スマートホームを蝕む隠れた脅威
- IoTデバイス向け組み込みハードウェアハッキング:ツール、技術、ビジネスへの影響
- IoTで医療機器を遠隔接続・管理し、新たなビジネスモデルを解き放つ