証明書を使用した MQTT クライアント認証

Azure Event Grid の MQTT ブローカーでは、X.509 証明書を使用したクライアント認証がサポートされています。 X.509 証明書は、特定のクライアントをテナントに関連付ける資格情報を提供します。 このモデルでは通常、認証はセッションの確立中に 1 回行われます。 これで、同じセッションを使用するすべての以降の操作は、その ID から行われたものと見なされます。

サポートされている認証モードは次の通りです。

  • 証明機関 (CA) によって発行された証明書
  • 自己署名クライアント証明書 - 拇印
  • Microsoft Entra ID トークン

この記事では、証明書に重点を置いて説明します。 Microsoft Entra ID トークンを使用した認証の詳細については、「Microsoft Entra ID トークンを使用したクライアント認証」を参照してください。

証明機関 (CA) によって署名された証明書

この方法では、ルートまたは中間の X.509 証明書がサービスに登録されます。 基本的に、クライアント証明書の署名に使用されるルートまたは中間証明書は、最初にサービスに登録する必要があります。

重要

  • クライアント証明書の署名に使用されるルートまたは中間証明書をアップロードするようにしてください。 証明書チェーン全体をアップロードする必要はありません。
  • たとえば、ルート、中間、およびリーフの証明書のチェーンがある場合は、リーフ/クライアント証明書に署名した中間証明書をアップロードするようにしてください。

クライアント証明書の署名に使用されるルートまたは中間証明書がある、CA 証明書ページを示すスクリーンショット。

クライアントの登録中に、クライアント認証名の保持に使用される証明書フィールドを識別する必要があります。 サービスは、クライアントを検証するために、証明書の認証名をクライアント メタデータ内のクライアントの認証名と照合します。 サービスは、以前に登録されたルートまたは中間証明書によって署名されているかどうかを確認することで、クライアント証明書も検証します。

5 つの証明書チェーン ベースの検証スキームがあるクライアント メタデータを示すスクリーンショット。

自己署名クライアント証明書 - 拇印

この認証方法では、クライアント レジストリは、クライアントが認証に使用する証明書の正確なサムプリントを格納します。 クライアントがサービスへの接続を試みると、サービスは、クライアント証明書に表示されるサムプリントとクライアント メタデータに格納されているサムプリントを比較することで、クライアントを検証します。

サムプリントの認証スキームがあるクライアント メタデータを示すスクリーンショット。

注意

  • クライアントの接続パケットのユーザー名フィールドにクライアント認証名を含めることをおすすめします。 この認証名とクライアント証明書を使用すると、サービスがクライアントを認証できます。
  • ユーザー名フィールドに認証名を指定しない場合は、名前空間スコープでクライアント認証名の代替ソース フィールドを構成する必要があります。 サービスは、クライアント接続を認証するために、クライアント証明書の対応するフィールドでクライアント認証名を検索します。

名前空間スコープの構成ページで、クライアント認証名の代替ソースを有効にしてから、クライアント認証名を持つクライアント証明書フィールドを選択できます。

クライアント認証名の代替ソース設定がある名前空間構成ページを示すスクリーンショット。

名前空間構成ページでクライアント証明書フィールドを選択する順序は重要です。 サービスは、クライアント証明書フィールドのクライアント認証名をそれと同じ順序で検索します。

たとえば、最初に証明書の [DNS] オプションを、次に [サブジェクト名] オプションを選択した場合、クライアント接続の認証中に次のようになります。

  • サービスは、まずクライアント証明書のサブジェクトの別名 DNS フィールドで、クライアント認証名を確認します
  • DNS フィールドが空の場合、サービスはクライアント証明書の [サブジェクト名] フィールドを確認します
  • これら 2 つのフィールドのいずれにもクライアント認証名が存在しない場合、クライアント接続は拒否されます

クライアント認証のどちらのモードでも、クライアント認証名は、接続パケットのユーザー名フィールド、またはいずれかのクライアント証明書フィールドに指定されるものと想定されています。

クライアント認証名の代替ソースでサポートされているクライアント証明書フィールド

次のいずれかのフィールドを使用して、クライアント証明書にクライアント認証名を指定できます。

認証名のソース オプション 証明書フィールド 説明
証明書のサブジェクト名 tls_client_auth_subject_dn 証明書のサブジェクト識別名。
証明書 DNS tls_client_auth_san_dns 証明書の dNSName SAN エントリ。
証明書 URI tls_client_auth_san_uri 証明書の uniformResourceIdentifier SAN エントリ。
証明書 IP tls_client_auth_san_ip 証明書の iPAddress SAN エントリに存在する IPv4 または IPv6 アドレス。
証明書のメール アドレス tls_client_auth_san_email 証明書の rfc822Name SAN エントリ。

次のステップ