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

EclipseHonoでのX.509ベースのデバイス認証

過去数か月の間に、メディアは安全でないに関する報道でいっぱいになりました 最も基本的なセキュリティ要件すら満たしていないIoTデバイス。提起された懸念の1つは、デバイスからメーカーが提供するクラウドサービスに転送されるデータの機密性でした。多くの場合、データは完全に暗号化されていないパブリックネットワークを介して送信されます。これは、今日のIoTデバイス(HTTPやMQTTなど)で使用されている一般的なTCP / IPベースのトランスポートプロトコルのすべてがネゴシエーションと使用をサポートしていることを考えると、非常に驚​​くべきことです。 トランスポート層セキュリティによる安全な(暗号化された)トランスポートチャネル (TLS)。

Eclipse Honoは、最初からHTTPおよびMQTTプロトコルアダプターでのTLSの使用をサポートしてきました。最近リリースされた0.9-M2マイルストーンでは、HTTPとMQTTアダプターの両方のTLSハンドシェイクの一部としてX.509クライアント証明書を使用したデバイスの認証のサポートが追加されました。これにより、デバイスは、プロトコルアダプターに対して自身を認証するために、ユーザー名とパスワードの代わりに秘密鍵と公開鍵のペアを使用できます。

すべての開発者に電話をかける

ヨーロッパ最大のIoTハッカソンが2019年5月14〜15日にベルリンに戻ります。700人を超える開発者がさまざまなドメイン固有のハッキングチャレンジに参加して、世界中からハッキング、プレイ、学習、楽しみ、新しい友達を作りましょう!

> IoTハッカソンに参加する

このブログ投稿では、テナント固有のトラストアンカーを作成および登録する方法の完全な例を紹介します。 、デバイスの証明書を作成し、そのサブジェクト識別名を登録します 最後に、証明書を使用して、HonoのMQTTプロトコルアダプターに対してデバイスを認証します。この投稿の残りの部分では、RSAベースの暗号化、特に秘密鍵と公開鍵が果たす役割について一般的に理解していることを前提としています。参考までに、RFC5280はX.509のすべての技術的な詳細を定義しています。

クライアント証明書を使用する理由

デバイスの認証にパスワードを使用する場合、プロトコルアダプターが認証中にデバイスによって提示されたパスワードを、記録されているパスワードのハッシュと比較できるように、各デバイスのパスワードをHonoの資格情報サービスに登録する必要があります。

デバイスの認証にクライアント証明書を使用する利点の1つは、デバイスの個々のシークレット(パスワード)をHonoに登録する必要がなくなることです。代わりに、単一のトラストアンカーを登録するだけで十分です。 TLSハンドシェイクの一部として、テナントに属するすべてのデバイスのIDを検証するために使用できるテナントの場合。これが機能するためには、デバイスで使用されるクライアント証明書に、テナントのトラストアンカーとして機能する公開鍵を使用して検証できるデジタル署名が含まれている必要があります。

テナント認証局を作成する

したがって、最初のステップは、テナントのデバイスで使用されるクライアント証明書に署名するために使用されるテナントの公開鍵と秘密鍵のペアを作成することです。

$ 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"

`-subj`パラメータを使用して設定されたサブジェクト識別名には、有効なX.500識別名を含めることができます。ただし、物事を単純にするために、 `CN`、` L`、 `ST`、` O`、 `OU`、` C`、 `STREET`、` DC`以外の属性タイプの使用は控えてください。 `UID`。

テナントを登録する

キーが作成されたので、公開キーをトラストアンカーとして使用してテナントを登録できます。

便宜上、Honoサンドボックスを使用します。ただし、バージョン0.9-M2以降を実行している他の(ローカル)インストールも同様に機能するはずです。

以下のコマンドで、 `ACME`テナント識別子を任意の識別子に置き換えてください。 Honoはテナント識別子の一意性を強制するため、これは重要です。したがって、各識別子はHonoインスタンスごとに1回だけ登録できます。

最初の3つのコマンドは、後で使用するためのいくつかの変数を定義します。テナントID、証明書のサブジェクト識別名、およびBase64でエンコードされた公開鍵です。次に、変数をコマンドで使用して、トラストアンカーを新しいテナントに登録します。

$ 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

デバイス証明書を作成する

次のステップは、デバイスとそれに対応するクライアント証明書のキーペアを作成することです。これは、テナントの秘密キーによって署名されます。

$ 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

繰り返しになりますが、件名に「CN」、「L」、「ST」、「O」、「OU」、「C」、「STREET」、「DC」、「UID」以外の属性タイプを使用しないでください。識別名。

デバイスを登録する

これで、任意のデバイスIDを使用して、デバイスをテナントに登録できます。

$ curl -i -H'Content-Type:application / json '--data-binary' {"device-id": "hot-fuzz"} 'https://hono.eclipse.org:28443/registration/$テナント

デバイスのサブジェクトDNを登録する

最後のステップは、デバイスのサブジェクト識別名を登録することです。繰り返しになりますが、必ず上記と同じテナントとデバイスの識別子を使用してください。

$ 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

接続をテストする

デバイスが登録されたので、新しく作成されたクライアント証明書を使用してMQTTアダプターに接続し、データを公開します。

まず、デバイスを登録したテナントのコンシューマーを開始します。クライアントはHonoのWebサイトからダウンロードできます:

$ 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

最後のステップでは、Eclipse Mosquittoコマンドラインクライアントを使用して、テレメトリデータを公開します。

$ 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. ソリッドステートデバイス理論の概要
  2. EclipseHonoでの新しいMongoDBベースのデバイスレジストリのリリース
  3. Eclipse Hono 1.0.0がリリースされました:オープンなIoT接続プラットフォーム
  4. 電池式の医療機器の電源を確実にオンにする
  5. 医療機器の進歩の監視
  6. LM35を使用した温度ベースのデバイス制御システム
  7. Armは、Stream Technologiesの買収により、IoT接続とデバイス管理機能を拡張します
  8. アプリケーションの脆弱性により、IoTデバイスは攻撃を受けやすくなります
  9. 適合して忘れる:未構成のIoTによってもたらされる脅威
  10. IoTデバイス組み込みハードウェアハッキングの概要
  11. 高度なテクノロジーを使用して医療機器をリモート接続するときが今なのはなぜですか