共用方式為


使用憑證進行 MQTT 用戶端驗證

Azure 事件方格 的 MQTT 訊息代理程式支援使用 X.509 憑證驗證用戶端。 X.509 憑證會提供認證,以將特定用戶端與租用戶產生關聯。 在此模型中,驗證通常會在會話建立期間發生一次。 然後,會假設所有使用相同會話的未來作業都來自該身分識別。

支援的驗證模式如下:

  • 憑證頒發機構單位發行的憑證(CA)
  • 自我簽署客戶端憑證 - 指紋
  • Microsoft Entra ID 令牌

本文著重於憑證。 若要瞭解如何使用 Microsoft Entra 識別符令牌進行驗證,請參閱 使用 Microsoft Entra ID 令牌驗證用戶端。

證書頒發機構單位 (CA) 簽署的憑證

在此方法中,根或中繼 X.509 憑證會向服務註冊。 基本上,用來簽署客戶端憑證的跟證書或中繼憑證必須先向服務註冊。

重要

  • 請務必上傳用來簽署客戶端憑證的跟證書或中繼憑證。 不需要上傳整個憑證鏈結。
  • 例如,如果您有根、中繼和分葉憑證的鏈結,請確定上傳簽署分葉/客戶端憑證的中繼憑證。

顯示 CA 憑證頁面的螢幕快照,其中含有用來簽署用戶端憑證的跟證書和中繼憑證。

註冊用戶端時,您必須識別用來儲存客戶端驗證名稱的憑證欄位。 服務會比對憑證中的驗證名稱,以及用戶端元數據中的客戶端驗證名稱,以驗證用戶端。 服務也會藉由驗證先前註冊的根憑證或中繼憑證簽署,來驗證客戶端憑證。

顯示具有五個憑證鏈結式驗證配置之用戶端元數據的螢幕快照。

自我簽署客戶端憑證 - 指紋

在此驗證方法中,用戶端登錄會儲存用戶端將用來驗證之憑證的確切指紋。 當用戶端嘗試連線到服務時,服務會藉由比較客戶端憑證中顯示的指紋與用戶端元數據中儲存的指紋來驗證用戶端。

顯示具有指紋驗證配置之用戶端元數據的螢幕快照。

注意

  • 建議您在用戶端連線封包的使用者名稱欄位中加入客戶端驗證名稱。 使用此驗證名稱以及客戶端憑證,服務將能夠驗證用戶端。
  • 如果您未在使用者名稱欄位中提供驗證名稱,您必須在命名空間範圍中設定客戶端驗證名稱的替代來源欄位。 服務會在用戶端憑證的對應欄位中尋找客戶端驗證名稱,以驗證客戶端連線。

在命名空間範圍的組態頁面中,您可以啟用替代的用戶端驗證名稱來源,然後選取具有客戶端驗證名稱的用戶端憑證欄位。

顯示具有客戶端驗證名稱替代來源設定之命名空間組態頁面的螢幕快照。

命名空間組態頁面上的用戶端憑證欄位選取順序很重要。 服務會以相同順序尋找客戶端憑證欄位中的客戶端驗證名稱。

例如,如果您先選取 [憑證 DNS] 選項,然後選取 [主體名稱] 選項 - 在驗證用戶端連線時,

  • 服務會先檢查客戶端憑證的主體別名 DNS 欄位,以取得客戶端驗證名稱
  • 如果 DNS 欄位是空的,則服務會檢查客戶端憑證的 [主體名稱] 字段
  • 如果這兩個字段中沒有客戶端驗證名稱,則會拒絕客戶端連線

在這兩種客戶端驗證模式中,我們預期會在連線封包的用戶名稱欄位或其中一個用戶端憑證欄位中提供客戶端驗證名稱。

用戶端驗證名稱替代來源支援的用戶端憑證欄位

您可以使用下列其中一個字段,在客戶端憑證中提供客戶端驗證名稱。

驗證名稱來源選項 [憑證] 欄位 描述
憑證主體名稱 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 專案。

下一步