工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial Internet of Things >> モノのインターネットテクノロジー

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

モノのインターネットテクノロジー

  1. AT89S52マイコンとLM35センサーによる温度ベース機器制御システム
  2. 固体デバイス理論:物理から実用応用まで
  3. Eclipse Hono、MongoDBベースのデバイスレジストリを導入——スケーラブルで本番対応
  4. Eclipse Hono 1.0.0リリース:統合オープンソースIoT接続プラットフォーム
  5. バッテリー駆動医療機器向け信頼性の高い電源投入ソリューション
  6. 医療機器技術の進歩を追跡:市場予測と主要トレンド
  7. Arm、Stream Technologies買収でIoT接続性とデバイス管理を強化
  8. IoTデバイスの脆弱性がスマートホームを攻撃にさらす:認証情報漏洩の脅威
  9. 未設定IoTデバイス:スマートホームを蝕む隠れた脅威
  10. IoTデバイス向け組み込みハードウェアハッキング:ツール、技術、ビジネスへの影響
  11. IoTで医療機器を遠隔接続・管理し、新たなビジネスモデルを解き放つ