共用方式為


Kerberos 會產生 KDC_ERR_S_PRINCIPAL_UNKNOWN 或 KDC_ERR_PRINCIPAL_NOT_UNIQUE 錯誤

KDC_ERR_S_PRINCIPAL_UNKNOWN和KDC_ERR_PRINCIPAL_NOT_UNIQUE錯誤表示用戶端要求存取 Kerberos 無法識別的服務。 這類錯誤表示下列一或多個問題:

  • 服務帳戶未正確設定。
  • 服務未使用為其設定的服務帳戶。
  • 已針對服務設定多個帳戶。
  • 用戶端未正確要求服務。

每個服務都有一個服務主體名稱 (SPN),可將其識別給用戶端和其他服務。 SPN 是服務所使用的 Active Directory Domain Services (AD DS) 帳戶屬性。 服務可以在自定義服務帳戶的環境中執行,或在內建帳戶的環境中執行,例如本機電腦的電腦帳戶。 服務也可以在與計算機帳戶相關的安全性內容中執行,例如本機系統或網路服務。

您設定 SPN 的方式會根據服務所使用的帳戶類型而有所不同:

  • 自訂服務帳戶對於使用帳戶的每個服務都必須有明確的SPN。
  • 計算機帳戶可能會有針對使用它的服務所設定的明確SPN。 不過,一般服務類別會自動對應至 HOST SPN。 系統會自動為每個電腦帳戶產生 HOST SPN。 在這種情況下,某些服務可能沒有自己在計算機帳戶上設定的SPN。

這很重要

  • 除非服務使用計算機帳戶和 HOST SPN,否則 SPN 在 AD DS 樹系中必須是唯一的。 在多樹系環境中,SPN 在所有相關聯的樹系中都必須是唯一的。
  • 一個SPN只能與一個帳戶相關聯。 SPN 問題的常見原因是將服務設定為使用自定義帳戶,即使SPN與自定義帳戶和電腦帳戶相關聯。

收集追蹤數據並識別問題 SPN

如果您尚未收集問題的追蹤數據,請立即執行。 如需詳細資訊,請參閱 Kerberos 驗證疑難解答指引:3.收集追蹤和票證數據。 檢查追蹤數據,以尋找用戶端所要求的SPN。

檢查服務帳戶所使用的SPN

這些程序會根據服務是否使用自訂帳戶或電腦帳戶而有所不同。 下表摘要說明差異。

服務使用自定義帳戶 服務會使用電腦帳戶
要求的SPN必須符合帳戶SPN。

SPN 在樹系中必須是唯一的。
所請求的 SPN 可能與其中一個帳戶的 SPN 相匹配。 不過,一般服務(例如 Web 服務)通常會使用自動 HOST SPN,而不是唯一的 SPN。

如果帳戶具有服務特有的SPN,該SPN在樹系中必須是唯一的。
  1. 取得指派給服務帳戶的SPN清單。 若要這樣做,請在域控制器上開啟系統管理命令提示字元視窗,然後執行下列命令:

    setspn -L <Name>
    

    備註

    • 在此命令中, <Name> 代表執行服務的電腦或服務所使用的自定義帳戶的名稱。
    • 在多網域環境中,使用 <Domain\Name> 格式來指定帳戶的網域。
  2. 查找任何使用所要求 SPN 的帳戶。 此搜尋會識別任何重複的SPN或指派給不正確帳戶的SPN。

    備註

    若要執行此程式,您至少必須擁有企業系統管理員許可權。

    若要判斷與 SPN 相關聯的帳戶,請開啟系統管理命令提示字元視窗,然後執行下列其中一個命令。

    單一森林 多個受信任的樹系
    setspn -Q <SPN> setspn -X <SPN>

    備註

    • 在此命令中, <SPN> 代表您要搜尋的 SPN。
    • 搜尋重複項目,特別是在整個森林範圍內,可能會花費很長的時間和大量的記憶體。

如需命令和可用選項的詳細資訊 setspn ,請參閱 setspn

視需要重新設定SPN

後續步驟取決於追蹤數據的結果、 setspn 查詢,以及服務所使用的帳戶類型。

您可能會看到下列任何問題。

自訂帳戶 電腦帳戶
服務帳戶以外的一或多個帳戶具有SPN。 計算機帳戶以外的一或多個帳戶具有SPN。
自定義帳戶沒有SPN。 計算機帳戶應該具有SPN,但不會。1
自訂帳號的 SPN 不正確或與用戶端要求的 SPN 不匹配。2 計算機帳戶的SPN不正確或SPN不符合客戶端所要求的SPN。2

1 如需可以使用計算機帳戶 HOST SPN 的服務清單,請參閱 setspn。 如果您的服務不是下列其中一個常見服務,您必須在計算機帳戶上設定服務的SPN。

2 如需用戶端要求資訊,請參閱網路追蹤數據。

使用下列方法來修正 SPN 組態:

  • 如果服務帳戶已正確設定,但用戶端要求不正確的 SPN,請參閱修正不一致的SPN

  • 如果正確的服務帳戶有SPN,但SPN不正確,請移除不正確的SPN,然後新增正確的SPN。 如需詳細資訊,請參閱 從帳戶移除SPN將SPN新增至服務帳戶

  • 如果SPN被指派給非正確服務帳戶的其他帳戶(例如自定義帳戶或電腦帳戶),請從這些帳戶中移除SPN。 請參閱 從帳戶移除 SPN

  • 如果您的服務使用自定義帳戶,但自定義帳戶沒有指派的SPN,請新增SPN。 如需詳細資訊,請參閱 將SPN新增至服務帳戶

  • 如果您的服務使用計算機帳戶,但不是本文所述的其中一個常見服務, 請將SPN新增 至電腦帳戶。

從帳戶移除 SPN

若要從帳戶中移除 SPN,請在系統管理命令提示字元中執行下列命令:

setspn -D <SPN> <AccountName>

備註

在此命令中, <SPN> 代表您想要移除的 SPN。 <AccountName> 代表您想要從中移除 SPN 的帳戶(或其中一個帳戶)。

將SPN新增至服務帳戶

若要將 SPN 新增至帳戶,請在系統管理命令提示字元中執行下列命令:

setspn -S \<SPN> \<AccountName>

備註

在此命令中, <SPN> 代表您要新增的 SPN。 <AccountName> 代表您想要新增 SPN 的帳戶(或其中一個帳戶)。

修正不一致的SPN

判斷SPN的版本正確:用戶端要求的版本,或服務帳戶上設定的SPN版本。

如果用戶端要求不正確的SPN,請確認用戶端用來建置要求SPN的資訊,並確定來源資訊正確無誤。 DNS 是這項資訊的常見來源。 除了 DNS 之外,其他用戶端(特別是非瀏覽器或自訂用戶端)可能會使用其他來源。

如果服務帳戶使用不正確的SPN,請 從服務帳戶移除SPN,然後 新增正確的SPN

詳細資訊

SPN 使用 <ServiceClass>/<Host>:<Port>/,<ServiceName> 格式,並包含下列元件:

  • <ServiceClass> (必要) 代表服務的服務類別。
  • <主機> (必要) 代表執行服務的計算機名稱。
  • < > 埠 (選擇性) 代表服務所使用的埠號碼。
  • <ServiceName> (選擇性) 代表服務的名稱。

如需如何格式化 SPN 以及何時使用選擇性參數的詳細資訊,請參閱 Unique SPN 的名稱格式