Azure IoT Edge での証明書の使用方法について理解するUnderstand how Azure IoT Edge uses certificates

IoT Edge 証明書は、モジュールおよびダウンストリーム IoT デバイスで、IoT Edge ハブ ランタイム モジュールの ID と正当性を検証するために使用されます。IoT Edge certificates are used by the modules and downstream IoT devices to verify the identity and legitimacy of the IoT Edge hub runtime module. これらの検証によって、ランタイム、モジュール、および IoT デバイス間で TLS (トランスポート層セキュリティ) によるセキュアな接続が実現します。These verifications enable a TLS (transport layer security) secure connection between the runtime, the modules, and the IoT devices. IoT Hub 自体と同様に、IoT Edge では、IoT ダウンストリーム (リーフ) デバイスおよび IoT Edge モジュールからの、暗号化されたセキュアな接続が必要になります。Like IoT Hub itself, IoT Edge requires a secure and encrypted connection from IoT downstream (or leaf) devices and IoT Edge modules. セキュアな TLS 接続を確立するために、IoT Edge ハブ モジュールでは、接続するクライアントにサーバー証明書のチェーンを提示して、それらのクライアントで ID を検証します。To establish a secure TLS connection, the IoT Edge hub module presents a server certificate chain to connecting clients in order for them to verify its identity.

注意

この記事では、IoT Edge デバイス上のさまざまなコンポーネント間、または IoT Edge デバイスとリーフ デバイスとの間の接続をセキュリティで保護するために使用される証明書について説明します。This article talks about the certificates that are used to secure connections between the different components on an IoT Edge device or between an IoT Edge device and any leaf devices. また、証明書を使用して、IoT Hub に対して IoT Edge デバイスを認証することもできます。You may also use certificates to authenticate your IoT Edge device to IoT Hub. これらの認証証明書は異なりますが、この記事では説明されません。Those authentication certificates are different, and are not discussed in this article. 証明書を使用してデバイスを認証する方法の詳細については、「X.509 証明書を使用して IoT Edge デバイスを作成およびプロビジョニングする」を参照してください。For more information about authenticating your device with certificates, see Create and provision an IoT Edge device using X.509 certificates.

この記事では、IoT Edge 証明書が運用、開発、およびテストのシナリオでどのように動作可能であるかについて説明します。This article explains how IoT Edge certificates can work in production, development, and test scenarios. スクリプトが異なる (Powershell と bash) 場合でも、Linux と Windows での概念は同じです。While the scripts are different (Powershell vs. bash), the concepts are the same between Linux and Windows.

IoT Edge 証明書IoT Edge certificates

IoT Edge デバイスに証明書を設定するには、2 つの一般的なシナリオがあります。There are two common scenarios for setting up certificates on an IoT Edge device. デバイスのエンド ユーザー (オペレーター) が製造元によって作成された汎用デバイスを購入し、証明書を管理することがあります。Sometimes the end user, or operator, of a device purchases a generic device made by a manufacturer then manages the certificates themselves. それ以外の場合は、製造元がコントラクトの下で作業を行い、オペレーターのためにカスタム デバイスを作成して、デバイスを渡す前に初期証明書の署名を行います。Other times, the manufacturer works under contract to build a custom device for the operator and does some initial certificate signing before handing off the device. IoT Edge 証明書の設計では、両方のシナリオの考慮を試みています。The IoT Edge certificate design attempts to take both scenarios into account.

次の図は、IoT Edge での証明書の使用方法を示しています。The following figure illustrates IoT Edge's usage of certificates. ルート CA 証明書とデバイス CA 証明書の間には、関係しているエンティティの数に応じて、0 個、1 個、または多数の中間証明書が存在する可能性があります。There may be zero, one, or many intermediate signing certificates between the root CA certificate and the device CA certificate, depending on the number of entities involved. ここで、1 つの場合を示します。Here we show one case.

典型的な証明書の関連図

注意

現時点では、libiothsm の制限により、2038 年 1 月 1 日以降に有効期限が切れる証明書は使用できません。Currently, a limitation in libiothsm prevents the use of certificates that expire on or after January 1, 2038. この制限は、デバイス CA 証明書、信頼バンドル内のすべての証明書、x.509 のプロビジョニング方法に使用されるデバイス ID 証明書に適用されます。This limitation applies to the device CA certificate, any certificates in the trust bundle, and the device ID certificates used for X.509 provisioning methods.

証明機関Certificate authority

証明機関 (略して 'CA') は、デジタル証明書を発行するエンティティです。The certificate authority, or 'CA' for short, is an entity that issues digital certificates. 証明機関は、証明書の所有者および受信者間で信頼されたサード パーティとして機能します。A certificate authority acts as a trusted third party between the owner and the receiver of the certificate. デジタル証明書では、証明書の受信者による公開キーの所有権を認定します。A digital certificate certifies the ownership of a public key by the receiver of the certificate. 最初に、証明機関によって発行されたすべての証明書の信頼の基盤となるルート証明書を発行することで、信頼の証明書チェーンが機能します。The certificate chain of trust works by initially issuing a root certificate, which is the basis for trust in all certificates issued by the authority. その後、所有者はルート証明書を使用して、追加の中間証明書 ('リーフ' 証明書) を発行できます。Afterwards, the owner can use the root certificate to issue additional intermediate certificates ('leaf' certificates).

ルート CA 証明書Root CA certificate

ルート CA 証明書は、プロセス全体の信頼のルートです。A root CA certificate is the root of trust of the entire process. 運用環境のシナリオでは、この CA 証明書は通常、Baltimore、Verisign、DigiCert などの信頼された営利目的の証明機関から購入されます。In production scenarios, this CA certificate is usually purchased from a trusted commercial certificate authority like Baltimore, Verisign, or DigiCert. お使いの IoT Edge デバイスに接続されているデバイスに対して完全な制御がある場合は、企業レベルの証明機関を使用することが可能です。Should you have complete control over the devices connecting to your IoT Edge devices, it's possible to use a corporate level certificate authority. どちらの場合も、IoT Edge ハブからの証明書チェーン全体がその証明機関に集約されるので、リーフの IoT デバイスがルート証明書を信頼している必要があります。In either event, the entire certificate chain from the IoT Edge hub up rolls to it, so the leaf IoT devices must trust the root certificate. ルート CA 証明書を信頼されたルート証明機関のストアに格納すること、またはアプリケーション コード内で証明書の詳細を提供することが可能です。You can store the root CA certificate either in the trusted root certificate authority store, or provide the certificate details in your application code.

中間証明書Intermediate certificates

セキュアなデバイスを生産する一般的な製造プロセスでは、主に漏洩や露出のリスクがあるために、ルート CA 証明書が直接使用されることは、ほとんどありません。In a typical manufacturing process for creating secure devices, root CA certificates are rarely used directly, primarily because of the risk of leakage or exposure. ルート CA 証明書は、中間 CA 証明書を 1 つ以上作成し、デジタル署名を行います。The root CA certificate creates and digitally signs one or more intermediate CA certificates. これらの中間証明書は、1 つのみの場合も、チェーンになっている場合もあります。There may be only one, or there may be a chain of these intermediate certificates. 次に、中間証明書のチェーンが必要になるシナリオを示します。Scenarios that would require a chain of intermediate certificates include:

  • 製造業者の社内部門の階層。A hierarchy of departments within a manufacturer.

  • デバイスの生産時にシリアルに関連付けられた複数の企業。Multiple companies involved serially in the production of a device.

  • 顧客がルート CA を購入し、製造業者がその顧客の代わりにデバイスへの署名を行う署名証明書を取得している。A customer buying a root CA and deriving a signing certificate for the manufacturer to sign the devices they make on that customer's behalf.

いずれの場合も、製造業者は、終端のデバイス上に配置されたデバイス CA 証明書に署名するために、このチェーンの末尾に中間 CA 証明書を使用します。In any case, the manufacturer uses an intermediate CA certificate at the end of this chain to sign the device CA certificate placed on the end device. 一般に、これらの中間証明書は、製造工場で厳重に保護されます。Generally, these intermediate certificates are closely guarded at the manufacturing plant. 製造業者が、証明書の使用方法に合わせて、物理および電子の両面で、厳密なプロセスを実施します。They undergo strict processes, both physical and electronic for their usage.

デバイス CA 証明書Device CA certificate

デバイス CA 証明書は、プロセスの最後の中間 CA 証明書から生成され、この証明書で署名されます。The device CA certificate is generated from and signed by the final intermediate CA certificate in the process. この証明書は、IoT Edge デバイス自体 (可能であれば、ハードウェア セキュリティ モジュール (HSM) などの安全なストレージ) にインストールされます。This certificate is installed on the IoT Edge device itself, preferably in secure storage such as a hardware security module (HSM). さらに、デバイス CA 証明書は IoT Edge デバイスを一意に識別します。In addition, a device CA certificate uniquely identifies an IoT Edge device. デバイス CA 証明書は、他の証明書に署名できます。The device CA certificate can sign other certificates.

IoT Edge ワークロード CAIoT Edge Workload CA

プロセスの "操作者" 側では最初のワークロード CA 証明書は、IoT Edge が初めて起動されたときに IoT Edge セキュリティ マネージャーによって生成されます。The IoT Edge Security Manager generates the workload CA certificate, the first on the "operator" side of the process, when IoT Edge first starts. この証明書は、デバイス CA 証明書から生成され、署名されます。This certificate is generated from and signed by the device CA certificate. もう 1 つの中間署名証明書に相当するこの証明書は、IoT Edge ランタイムで使用されるその他の証明書を生成して署名するために、使用されます。This certificate, which is just another intermediate signing certificate, is used to generate and sign any other certificates used by the IoT Edge runtime. 現在、それは主に、後続のセクションで説明している IoT Edge ハブ サーバー証明書ですが、将来は、IoT Edge コンポーネント認証用の他の証明書が含まれる可能性があります。Today, that is primarily the IoT Edge hub server certificate discussed in the following section, but in the future may include other certificates for authenticating IoT Edge components.

IoT Edge ハブ サーバー証明書IoT Edge hub server certificate

IoT Edge ハブ サーバー証明書は、IoT Edge で必要な TLS 接続の確立時に、ID 確認のためにリーフ デバイスとモジュールに提示される実際の証明書です。The IoT Edge hub server certificate is the actual certificate presented to leaf devices and modules for identity verification during establishment of the TLS connection required by IoT Edge. この証明書は、ルート CA 証明書への証明書を生成するために使用される署名証明書チェーン全体を表します。リーフ IoT デバイスは必ず、これを信頼している必要があります。This certificate presents the full chain of signing certificates used to generate it up to the root CA certificate, which the leaf IoT device must trust. IoT Edge セキュリティ マネージャーによって生成されるときに、この IoT Edge ハブ証明書の共通名 (CN) は、小文字に変換されてから、config.yaml ファイルの 'hostname' プロパティに設定されます。When generated by the IoT Edge Security Manager, the common name (CN), of this IoT Edge hub certificate is set to the 'hostname' property in the config.yaml file after conversion to lower case. この構成は、IoT Edge で混乱を招く一般的な要因になっています。This configuration is a common source of confusion with IoT Edge.

運用環境への影響Production implications

「IoT Edge には、なぜ他に 'ワークロード CA' という証明書が必要になるのか」というのは、もっともな質問でしょう。A reasonable question might be "why does IoT Edge need the 'workload CA' extra certificate? デバイス CA 証明書を使用して、IoT Edge ハブ サーバー証明書を直接生成することはできないのか。Couldn't it use the device CA certificate to directly generate the IoT Edge hub server certificate?". これは、技術的には可能です。Technically, it could. しかし、この "ワークロード" の中間証明書の目的は、デバイス製造業者とデバイス操作者間での考慮事項を分離することです。However, the purpose of this "workload" intermediate certificate is to separate concerns between the device manufacturer and the device operator. IoT Edge デバイスが 1 人の顧客から次の顧客へと販売されたり、転用されたりするシナリオを想像してください。Imagine a scenario where an IoT Edge device is sold or transferred from one customer to another. 製造業者で指定されたデバイス CA 証明書は変更不可能にしたいと考えるでしょう。You would likely want the device CA certificate provided by the manufacturer to be immutable. ただし、デバイスの操作に固有の "ワークロード" 証明書は、新しいデプロイ時にワイプして、再作成する必要があります。However, the "workload" certificates specific to operation of the device should be wiped and recreated for the new deployment.

製造と操作のプロセスは分割されているため、運用環境用のデバイスを準備するときには以下の影響を考慮に入れてください。Because manufacturing and operation processes are separated, consider the following implications when preparing production devices:

  • いずれの証明書ベースのプロセスでも、IoT Edge デバイスを公開するプロセス全体の期間中、ルート CA 証明書とすべての中間 CA 証明書が、セキュリティ保護され監視される必要があります。With any certificate-based process, the root CA certificate and all intermediate CA certificates should be secured and monitored during the entire process of rolling out an IoT Edge device. IoT Edge デバイスの製造業者は、適切なストレージとその中間証明書の使用のために、強固なプロセスを適切に備えておく必要があります。The IoT Edge device manufacturer should have strong processes in place for proper storage and usage of their intermediate certificates. さらに、デバイス CA 証明書は、デバイス自体 (可能であれば、ハードウェア セキュリティ モジュール) の、できる限り安全なストレージに保管する必要があります。In addition, the device CA certificate should be kept in as secure storage as possible on the device itself, preferably a hardware security module.

  • IoT Edge ハブ サーバー証明書は、IoT Edge ハブによって、接続するクライアント デバイスとモジュールに提示されます。The IoT Edge hub server certificate is presented by IoT Edge hub to the connecting client devices and modules. デバイス CA 証明書の共通名 (CN) は、IoT Edge デバイス上の config.yaml ファイルで使用される "hostname" と同じであってはいけませんThe common name (CN) of the device CA certificate must not be the same as the "hostname" that will be used in config.yaml on the IoT Edge device. IoT Edge に接続するために (たとえば接続文字列の GatewayHostName パラメーターや MQTT の CONNECT コマンドを介して) クライアントが使用する名前は、デバイス CA 証明書で使用される共通名と同じにすることはできませんThe name used by clients to connect to IoT Edge (for example, via the GatewayHostName parameter of the connection string or the CONNECT command in MQTT) can't be the same as the common name used in the device CA certificate. この制約は、IoT Edge ハブが、クライアントによる検証のために証明書チェーン全体を提示するためです。This restriction is because the IoT Edge hub presents its entire certificate chain for verification by clients. IoT Edge ハブ サーバー証明書とデバイス CA 証明書の両方に同じ CN があると、検証のループに陥って証明書が無効になります。If the IoT Edge hub server certificate and the device CA certificate both have the same CN, you get in a verification loop and the certificate invalidates.

  • デバイス CA 証明書は、最後の IoT Edge 証明書を生成するために IoT Edge セキュリティ デーモンによって使用されるため、それ自体が署名証明書、つまり、署名機能を備えた証明書になっている必要があります。Because the device CA certificate is used by the IoT Edge security daemon to generate the final IoT Edge certificates, it must itself be a signing certificate, meaning it has certificate signing capabilities. "V3 Basic constraints CA:True" (V3 の基本制約 CA: True) をデバイス CA 証明書に適用することで、キーの使用に関する必須プロパティが自動的に設定されます。Applying "V3 Basic constraints CA:True" to the device CA certificate automatically sets up the required key usage properties.

ヒント

Microsoft の "便利なスクリプト" (次のセクションを参照) を使用して Dev/Test シナリオにおける透過的ゲートウェイとして IoT Edge を既に設定し終え、デバイス CA 証明書の作成時に config.yaml のホスト名と同じホスト名を使用していたら、なぜうまく動作したのか疑問に感じるかもしれません。If you've already gone through the setup of IoT Edge as a transparent gateway in a dev/test scenario using our "convenience scripts" (see next section) and used the same host name when creating the device CA certificate as you did for the hostname in config.yaml, you might be wondering why it worked. 開発者のエクスペリエンスを簡素化するために、便利なスクリプトによって、スクリプトに渡す名前の末尾に ".ca" が付加されます。In an effort to simplify the developer experience, the convenience scripts appends a ".ca" on the end of the name you pass into the script. つまり、たとえばスクリプト内のデバイス名と config.yaml 内のホスト名の両方に "mygateway" を使用していた場合、前者は、デバイス CA 証明書の CN として使用される前に、mygateway.ca に変更されます。So, for example, if you used "mygateway" for both your device name in the scripts and hostname in config.yaml, the former will be turned into mygateway.ca before being used as the CN for the device CA cert.

Dev/Test の影響Dev/Test implications

Dev/Test のシナリオを簡素化するために、Microsoft では、透過的ゲートウェイのシナリオで IoT Edge に適した非運用環境の証明書を生成するための、一連の便利なスクリプトを提供しています。To ease development and test scenarios, Microsoft provides a set of convenience scripts for generating non-production certificates suitable for IoT Edge in the transparent gateway scenario. スクリプトの動作の例については、「IoT Edge デバイスの機能テスト用のデモ証明書を作成する 」 を参照してください。For examples of how the scripts work, see Create demo certificates to test IoT Edge device features.

ヒント

IoT Edge 経由で IoT デバイス SDK を使用するデバイス IoT の "リーフ" デバイスとアプリケーションに接続するには、デバイスの接続文字列の末尾にオプションの GatewayHostName パラメーターを追加する必要があります。To connect your device IoT "leaf" devices and applications that use our IoT device SDK through IoT Edge, you must add the optional GatewayHostName parameter on to the end of the device's connection string. Edge Hub サーバー証明書が生成されるときは、config.yaml からの小文字バージョンのホスト名に基づくため、名前が一致して TLS 証明書の検証を通過するように、GatewayHostName パラメーターを小文字で入力する必要があります。When the Edge Hub Server Certificate is generated, it is based on a lower-cased version of the hostname from config.yaml, therefore, for the names to match and the TLS certificate verification to succeed, you should enter the GatewayHostName parameter in lower case.

IoT Edge 証明書の階層の例Example of IoT Edge certificate hierarchy

この証明書のパスを例示すために、次のスクリーンショットは、透過的ゲートウェイとして稼働している IoT Edge デバイスの設定に基づいています。To illustrate an example of this certificate path, the following screenshot is from a working IoT Edge device set up as a transparent gateway. OpenSSL は、IoT Edge ハブに接続し、証明書を検証してダンプ出力するために使用されます。OpenSSL is used to connect to the IoT Edge hub, validate, and dump out the certificates.

各レベルでの証明書階層のスクリーンショット

スクリーンショットに表示された証明書の階層の深さを確認できます。You can see the hierarchy of certificate depth represented in the screenshot:

ルート CA 証明書Root CA Certificate Azure IoT Hub の CA 証明書テストのみAzure IoT Hub CA Cert Test Only
中間 CA 証明書Intermediate CA Certificate Azure IoT Hub の中間証明書テストのみAzure IoT Hub Intermediate Cert Test Only
デバイス CA 証明書Device CA Certificate iotgateway.ca ("iotgateway" は、< ゲートウェイ ホスト名> として、便利なスクリプトに渡されました)iotgateway.ca ("iotgateway" was passed in as the < gateway host name > to the convenience scripts)
ワークロード CA 証明書Workload CA Certificate iotedge のワークロード CAiotedge workload ca
IoT Edge ハブ サーバー証明書IoT Edge Hub Server Certificate iotedgegw.local (config.yaml からの 'hostname' と一致する)iotedgegw.local (matches the 'hostname' from config.yaml)

次のステップNext steps

Azure IoT Edge モジュールについてUnderstand Azure IoT Edge modules

透過的なゲートウェイとして機能するように IoT Edge デバイスを構成します。Configure an IoT Edge device to act as a transparent gateway