シナリオ: mTLS証明書を使用するデジタル・ツイン・インスタンスの作成

デバイスからデータを受信する場合は、デジタル・ツイン・インスタンスで認証を使用する必要があります。このシナリオでは、デバイスのデジタル・ツイン・インスタンスを作成するときに、証明書を使用して認証する方法について説明します。

相互TLS (mTLS)は、クライアントとサーバーの両方が通信中に互いのアイデンティティを認証することを保証するセキュリティ・プロトコルです。サーバーのみを認証する標準のTLSとは異なり、mTLSは、クライアントとサーバーの両方に有効な証明書を提示するよう要求することで、信頼のレイヤーを追加します。
  1. 認証局を作成します。
  2. 新規プライベート・キーの生成
  3. 外部で管理される証明書の作成
  4. 証明書を使用するデジタル・ツイン・インスタンスの作成
  5. デジタル・ツインのインスタンスの詳細の取得
  6. MQTTxを使用したトピックへのサブスクライブ
  7. APEXでのデバイス・データの表示

ベストプラクティス
  • 証明書を頻繁にローテーションします。
  • 証明書の有効期間を制限します。
  • Vaultsを使用して秘密キーを格納します。
  • 接続の試行を監視および監査します。

開始する前に

必要な権限があることを確認してください。管理者は、必要なポリシーを作成してアクセス権を付与します。詳細は、前提条件およびInternet of Things (IoT)プラットフォームのポリシー詳細を参照してください。

ステップ1: 認証局の作成

証明書サービスを使用して、ルート認証局(CA)または下位CAを作成します。詳細は、認証局の作成を参照してください。

CAを作成するには、Oracle Cloud Infrastructure (OCI) Vaultサービスからハードウェアで保護された既存の非対称暗号化キーにアクセスできる必要があります。詳細は、ボールトの概要を参照してください。

このタスク例では、下位CAを使用して外部で管理する秘密キーを使用して証明書を発行する方法について説明します。

従属CAを作成するには、すでにルートCAが必要です。

  1. これらのアクションを実行するための正しいポリシーで管理者としてログインします。CAを作成するには、適切なレベルのセキュリティ・アクセス権が必要です。詳細は、必要なIAM方針に関する項を参照してください。
  2. 「認証局」リスト・ページで、「認証局の作成」を選択します。リスト・ページの検索に関するヘルプが必要な場合は、認証局のリストを参照してください。
  3. 「コンパートメント」を選択し、CAを作成するコンパートメントを選択します。
  4. 「認証局タイプ」で、「下位認証局」タイプ(他のCAを含む階層内のルートCAではないCA)を選択します。
  5. (オプション) CAの一意の表示名前を入力します。この名前を使用すると、管理目的でCAを識別できますが、CA証明書の一部として表示されません。機密情報を入力しないでください。
    ノート

    テナンシ内の2つのCAは、削除保留中のCAを含め、同じ名前を共有できません。
  6. (オプション)タグを適用するには、「タグ付けオプションの表示」を選択します。タグの詳細は、リソース・タグを参照してください。
  7. 「次へ」を選択します。
  8. 件名情報を入力します。サブジェクト情報には、少なくともCA証明書の所有者を識別するための共通名(CN)が含まれます。証明書の使用目的に応じて、サブジェクトは個人、組織、コンピュータ・エンドポイントまたはデバイスを識別します。サブジェクト情報の形式は、RFC 5280標準に準拠している必要があります。ワイルドカードを使用して、複数のドメイン名またはサブドメイン名の証明書を発行できます。
  9. 「次へ」を選択します。
  10. 「認可構成」で、CA証明書に使用する暗号化キーを含むボールトを確認または選択します。オプションで、「コンパートメントの変更」を選択して別のコンパートメントを指定します。ボールトの作成と管理の詳細は、「ボールトの管理」を参照してください。
  11. 「キー」で、使用するボールト内のキーをクリックします。証明書では非対称キーのみがサポートされるため、リストにはボールト内の非対称キーのみが含まれます。Rivest-Shamir-Adleman(RSA)キーから、2,048ビットまたは4,096ビットを選択できます。また、楕円曲線IDがNIST_P384の楕円曲線暗号デジタル署名アルゴリズム(ECDSA)キーを選択することもできます。具体的に言うと、このリストには、ハードウェア・セキュリティ・モジュール(HSM)によって保護されているこれらのタイプの非対称キーのみが含まれます。証明書では、ソフトウェア保護されたキーの使用はサポートされません。キーの作成および管理の詳細は、キーの管理を参照してください。
  12. 「署名アルゴリズム」で、キー・アルゴリズム・ファミリに応じて、次のいずれかのオプションを選択します。
    • SHA256_WITH_RSA: SHA-256ハッシュ関数を使用したRSSAキー
    • SHA384_WITH_RSA: SHA-384ハッシュ関数を使用したRSSAキー
    • SHA512_WITH_RSA: SHA-512ハッシュ関数を使用したRSSAキー
    • SHA256_WITH_ECDSA: SHA-256ハッシュ関数を使用したECDSAキー
    • SHA384_WITH_ECDSA: SHA-384ハッシュ関数を使用したECDSAキー
    • SHA512_WITH_ECDSA: SHA-512ハッシュ関数を使用したECDSAキー
  13. 「次へ」を選択します。
  14. 有効期限ルールを構成します。「証明書の最大有効期間(日数)」で、このCAによって発行された証明書を有効化できる最大日数を指定します。有効期間は90日以内にすることを強くお薦めします。
  15. 「失効構成」ページで、証明書失効リスト(CRL)を構成しない場合は、「失効のスキップ」チェック・ボックスを選択します。
  16. 「次へ」を選択します。
  17. 情報が正しいことを確認し、「認証局の作成」を選択します。証明書関連のリソースの作成には数分かかる場合があります。
  18. 認証局が正常に作成された場合は、サマリーの詳細が表示されます。

ステップ2: 新しい秘密キーの生成

OpenSSLを使用して、秘密キーと証明書署名リクエスト(CSR)を作成します。

ノート

セキュリティのため、キーを非公開にし、外部でキーを共有しないように、デバイスでこのステップを実行することを検討してください。
  1. このコマンドを使用して、新しい秘密キーprivate.pemと、RSA 2048ビット暗号化を使用した証明書署名リクエストcsr.pemを生成します。この例では、パスワード保護なしで指定し、v3_req拡張子を使用する-nodesパラメータの使用方法を示します。
    openssl req -nodes -newkey rsa:2048 -keyout private.pem -out csr.pem -extensions v3_req
  2. この例は、証明書リクエストの入力フィールドと値の例を示しています。証明書レポートに組み込む情報を識別名(DN)として入力します。

    共通名を入力します。共通名は、「証明書の詳細」ページの「サブジェクト情報」タブ、ステップ8の「認証局の作成」を参照するか、証明書の詳細ページの検索方法については、「証明書のリスト」を参照してください。
    Country Name (2 letter code) []: US
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) []:
    Organizational Unit Name (eg, section) []:
    Common Name (Enter common name from the certificate details.) []:common-name
    Email Address [your@email.com]:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:

ステップ3: 外部で管理される証明書の作成

証明書をインストールする予定のサーバーで証明書署名リクエスト(CSR)と秘密キーを生成してから、そのCSLをCAに送信し、証明書を発行することもできます。この場合、秘密キーは外部で管理します。

このタスクでは、外部で管理する秘密キーを持つ証明書を発行する方法について説明します。証明書を使用するその他の方法の詳細は、「外部で管理する証明書の作成」および「証明書の管理」を参照してください。
  1. コンソールで、ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。
  2. 「証明書」リスト・ページに、特定のコンパートメントの認証局のリストが表示されます。
  3. 作業する証明書を検索し、行の最後にある「アクション」メニューを選択します。
  4. 「発行証明書」を選択します。
  5. 「証明書タイプ」で、外部のサード・パーティCAによって管理される証明書サービスのCAから証明を発行するには、「内部CAによって発行され、外部に管理」を選択します。
  6. 証明書の一意の表示名前を入力します。機密情報を入力しないでください。
    ノート

    テナンシ内の2つの証明書が同じ名前(削除保留中の証明書を含む)を共有することはできません。
  7. (オプション) 説明を入力して、証明書を識別しやすくします。機密情報を入力しないでください。
  8. サードパーティCAが管理する証明書の場合、サブジェクト情報を指定する必要はありません。かわりに、「次へ」を選択します。
  9. 「証明書署名リクエスト」で、「ファイルのアップロード」を選択して証明書の内容を指定し、「1つ選択」を選択して証明書をPEM形式のファイルとしてのアップロードします。
  10. または、「コンテンツの貼付け」を選択し、テキスト・ボックスを選択して証明書の内容を直接貼り付けます。
  11. 「次へ」を選択します。
  12. 証明書サービスで管理されない証明書の自動更新は構成できません。「次へ」を選択して続行します。
  13. サマリー情報が正しいことを確認し、「証明書の作成」を選択します。
  14. 「証明書の詳細」ページがオープンします。「バージョン」で、表示する証明書の名前を検索し、行の最後にある「アクション」メニューに移動して、「コンテンツの表示」を選択します。詳細は、証明書の詳細の表示を参照してください。
  15. 「証明書PEM」「証明書チェーンPEM」の両方で、「ダウンロード」「保存」を選択してファイルを保存します。
  16. 証明書の詳細ページで、「サブジェクト情報」タブに移動し、次のステップで使用する証明書の「共通名」をコピーします。

ステップ4: 証明書を使用するデジタル・ツイン・インスタンスの作成

データを送信するデバイスを認証するには、前のステップで作成した--auth-idパラメータおよび<certificate-OCID>を使用して、デジタル・ツイン・インスタンスを作成します。

このコマンドおよびパラメータを使用して、デジタル・ツイン・インスタンスを作成します。<common-name-for-the-certificate>を置き換えます。<certificate-OCID>を環境の証明書OCIDに置き換えます。証明書の詳細でこれらの値を検索します。詳細は、証明書の詳細の表示を参照してください:

iot digital-twin-instance create --iot-domain-id <iot-domain-OCID> --auth-id <certificate-OCID> --external-key <common-name-from-certificate-details>

CLIパラメータの完全なリストは、oci iot digital-twin-instance createおよびデジタル・ツイン・インスタンスの作成を参照してください。

オプションのステップ5: デジタル・ツインのインスタンスの詳細の取得

このコマンドを使用して、デジタル・ツイン・インスタンスの詳細を表示します。レスポンスには、デジタル・ツインのインスタンスOCIDが含まれます。
oci iot digital-twin-instance get --digital-twin-instance-id <digital-twin-instance-OCID>
詳細は、デジタル・ツインのインスタンス詳細の取得を参照してください。

ステップ6: MQTTxを使用したトピックのサブスクライブ

シナリオに応じて、MQTT、HTTP、またはWebSocketを使用してデジタル・ツイン・インスタンスに接続できます。この例では、MQTTXを使用して接続する方法を示しています。シナリオの例は、Connecting a Deviceを参照してください。

接続をテストするには、次のようにします。

  1. 次のように、ホストとしてデバイスホストを入力します。
    mqtts://<domain-short-id>.device.iot.<region>.oci.oraclecloud.com
  2. ポート8883を入力します。
  3. クライアントID: your-client-ID
  4. クリーン・スタート: True
  5. トグルをオンにすると、TLSが有効になります。
  6. オプション「CAまたは自己署名証明書」を選択します。
  7. 「外部で管理される証明書の作成」のステップ15から、クライアント証明書ファイルの場所を入力します: your-certificate.pem
  8. 「新規秘密キーの生成」のステップ1から、クライアント・キー・ファイルの場所を入力します: your-private-key.pem
  9. 「接続」を選択します。

    MQTTx

    MQTTxを使用して接続します。

  10. デバイスからデータを受信するには、「新規サブスクリプション」を選択します。
  11. 「トピック」としてエンドポイントを入力します。
  12. 次の例は、Quality of Service (QoS)レベル1の/endpoints/4321トピックにパブリッシュされたメッセージを示しています。トピック:
    {
      "pulse": 300,
      "s02": 400
    }
    {
      "test": 100
    }

    MQTTxのトピックにサブスクライブします

オプションのステップ7: APEXでのIoTデータのモニター

APEXでデータを表示するための構成済アクセス権で、デバイスからRAWデータが送信された場合は、このSQL文を使用して、APEXでデジタル・ツイン・インスタンスのRAWデータ・レスポンスを表示できます。
select * from <domain-short-id-from-device-host>__IOT.RAW_DATA
where digital_twin_instance_id = '<digital-twin-instance-ocid>'