當使用者屬於多個群組的 Kerberos 驗證問題

文章翻譯 文章翻譯
文章編號: 327825 - 檢視此文章適用的產品。
2011 年 7 月 12,Windows Vista Service Pack 1 (SP1) 結尾的支援。若要繼續接收視窗的安全性更新,請確定您執行的是 Windows Vista Service Pack 2 (SP2)。如需詳細資訊,請參閱此 Microsoft 網頁: 結束某些 Windows 版本的支援.
全部展開 | 全部摺疊

在此頁中

徵狀

當使用者屬於多個群組時,該使用者可能會有與驗證或群組原則 」 設定的問題。下列 「 Microsoft 知識庫 」 文件描述更詳細地這些徵狀:

269643 Internet Explorer Kerberos 驗證無法運作因為連線到 IIS 的緩衝區不足
280380 延伸預存程序可能的緩衝區溢位弱點
2020943 「 HTTP 400-錯誤的要求 (要求標頭太長) 」 的錯誤在網際網路資訊服務 (IIS)
這些文件所述的解析度會指示您修改 MaxTokenSize 登錄值。這種解析度進行改進。如果您使用本文中所述的 hotfix,您可能沒有編輯預設的 MaxTokenSize 值。

本文中所述的 hotfix 取代這一節中所列的微軟知識庫文件中所述的 hotfix。

發生的原因

使用者無法驗證,因為 Kerberos 語彙基元時的驗證嘗試產生具有固定的最大大小。例如遠端程序呼叫 (RPC) 傳輸,而且當他們配置緩衝區進行驗證時,MaxTokenSize 值依賴 HTTP。在 Windows 2000 (原始發行版本),MaxTokenSize 值為 8000 個位元組。在 Windows 2000 Service Pack 2 (SP2) 和 Windows Server 2003 中,MaxTokenSize 值會是 12000 個位元組。

Kerberos 使用 Kerberos 封包傳輸作用中的目錄群組成員資格的權限屬性憑證 (PAC) 欄位。這也適用於 [使用中目錄宣告資訊 (動態存取控制)] 欄位從 Windows Server 2012 開始。如果有許多的群組成員資格使用者,而且有許多使用者或裝置正在使用的宣告,這些欄位可以會佔用大量封包中的區域。

如果使用者是 120 種以上的群組的成員,由 MaxTokenSize 值的緩衝區不足。因此,使用者無法進行驗證,而且它們可能會收到 「 記憶體不足 」 錯誤訊息。在套用本文中所述的 hotfix 之前,新增至使用者帳戶每個群組會將此緩衝區增加 40 位元組。

附註在許多情況下,Windows NTLM 驗證會如預期般運作。您可能看不到分析 Kerberos 驗證問題。不過,套用群組原則 」 設定的情況下可能無法如預期般運作。

解決方案

重要若要解決這個問題,您必須設定 MaxTokenSize 登錄值的 Kerberos 驗證程序中涉及的所有電腦。這包括 SQL Server 用戶端。(也就是登錄機碼都必須設定每個要求/回應流程中涉及的電腦上。因此,如果沒有在其的 web 應用程式需要,在 SQL Server 用戶端或使用者的權杖已傳遞至後端 SQL Server 資料庫,登錄機碼設定 SQL Server 用戶端電腦上,SQL Server 資料庫電腦,而且也執行 Internet Explorer 用戶端電腦執行的 web 伺服器執行 IIS依此類推。)

附註下列的 Windows 版本包含修正這個問題:
  • Windows 8
  • Windows Server 2012
  • Windows 7
  • Windows Server 2008 R2
  • Windows 2003 Server
  • Windows Vista
  • Windows 2008 Server
  • Windows XP 商用版

服務套件資訊

若要解決這個問題,請取得最新的 service pack,Microsoft Windows 2000。如需詳細資訊,按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
260910 如何取得最新的 Windows 2000 service pack

Hotfix 資訊

現在可以取得可用的 Microsoft 支援 hotfix 了。不過,它被用來修正本文中所述的問題。它只適用於發生此特定問題的系統上。此 hotfix 可能會接受其他測試。因此,如果這個問題不會嚴重影響,我們建議您等候下一步的 Windows 2000 service pack 包含此 hotfix。

若要立即解決這個問題,請連絡 Microsoft 客戶支援服務 」 取得 hotfix。Microsoft 客戶支援服務電話號碼以及支援費用的相關資訊的完整清單,請移至下列 Microsoft 網站:
http://support.microsoft.com/contactus/?ws=support
附註在特殊情況下,如果 Microsoft 支援專業人員認為某特定更新程式可以解決您的問題時,可能就不會收取一般因支援電話所產生的費用。收取支援費用會套用,如果有其他支援問題是,不能限定的特定更新程式。此 hotfix 的英文版具有檔案屬性 (或較新的檔案屬性) 下表中所列。日期和時間,這些檔案會列出在國際標準時間 (UTC)。當您檢視檔案資訊時,它會轉換為本地時間。若要查看 UTC 與當地時間的時差,請在 [控制台] 中的日期和時間項目使用 [時區] 索引標籤。

狀況說明

Microsoft 已經確認這是 「 適用於 」 一節中所列的 Microsoft 產品中的問題。 這個問題,第一次已經在 Microsoft Windows 2000 Service Pack 4年中獲得修正。

其他相關資訊

語彙基元大小計算 Windows 2000 Windows Server 2008 R2

如果您使用本文中所述的 hotfix,您不需要修改 MaxTokenSize 登錄值,在大多數情況下。不過,有某些情況下,您不必套用此 hotfix 之後,修改 MaxTokenSize 登錄值。所有網域控制站在都套用這個 hotfix 之後,使用下列公式來決定是否有修改 MaxTokenSize 值:
TokenSize = 1200 + 40 d + 8s
此公式會使用下列值:
  • d: 的網域本機使用者群組的成員數目加上外的使用者帳戶網域的使用者所屬的成員的萬用群組數目再加上群組數目表示安全性識別碼 (SID) 歷程記錄。
  • s 安全性的通用群組的使用者是的成員數目再加上使用者所隸屬的使用者帳戶網域中的萬用群組數目。
  • 1200: 票證的額外負荷的估計的值。這個值可以有所不同,例如 DNS 網域名稱的長度、 用戶端名稱,以及其他因素的因素。
在案例中 (例如,當使用者驗證的網域控制站),使用委派,我們建議您將語彙基元大小加倍。

何時要設定的登錄項目

如果您使用此公式來計算語彙基元大小小於高達 12000 個位元組 (預設大小),您不需要修改網域用戶端上的 MaxTokenSize 登錄值。如果值大於高達 12000 個位元組,請參閱下列 「 Microsoft 知識庫 」 文件,如何調整 MaxTokenSize 登錄值的說明:

263693 群組原則不會套用至屬於多個群組的使用者

注意
  • 當您變更的 MaxTokenSize 值時,使變更生效必須重新啟動電腦。
MaxTokenSize登錄項目的建議的值為 65535 的十進位或十六進位 FFFF。MaxTokenSize 值指定固定的 Kerberos 票證接收緩衝區,其中包含表示帳戶所屬群組的 Sid。

若要使用安全的大小,您可以選擇將MaxTokenSize設定為48000,下列引入稍後在本文中的 HTTP 標頭大小限制的討論。根據您使用何種值,第一次遇到 Kerberos 錯誤事件或 IIS HTTP 400 錯誤的問題。

您可能會遇到的已知的問題

存取語彙基元大小的已知的問題:

本機安全性授權 (LSA) 服務會從這個 SID 緩衝區產生使用者的存取語彙基元。硬式編碼限制可定義此語彙基元的 Sid 是 1,015 的客戶,請參閱此知識庫文件:
328889 是多個 1,015 群組的成員的使用者可能無法登入驗證
http://support.microsoft.com/kb/328889/EN-US

因此,多個 1015年的有效 Sid 的 MaxTokenSize 值不是很有用。在下列公式:
MaxTokenSize = 1200 + 40 d + 8s
40 d 表示您有網域本機群組 SID 40 位元組。8s 表示 8 個位元組,網域全域/萬用群組 sid。

因此,如果您有 MaxTokenSize 值為 0x0000FFFF (64k),您可以用來緩衝大約 1600年網域本機群組的 Sid 或大約 8000 網域通用/萬用群組 Sid。如果您使用 「 受信任可以委派 」 的帳戶,每個 SID 的緩衝區需求可能會增加一倍。在這些情況下,您只可以儲存大約 800 網域本機群組的 Sid 時使用 MaxTokenSize 值為 64 K。不過,只有網域本機群組的 Sid 是不常見的案例。64 K 的值應足以甚至的委派案例。

已知問題當使用 MaxTokenSize 大於 65535 的值

舊版的這篇文章討論多達 100000 個位元組的值為MaxTokenSize。我們發現版本的 SMS 系統管理員在100000 MaxTokenSize時,會有問題或更大。我們可以識別出 IPSEC IKE 通訊協定不允許安全性變得大於 66536 個位元組 BLOB,而且它也會失敗時MaxTokenSize設定為較大的值。

已知的問題,如網際網路資訊伺服器 HTTP 接收緩衝區

網際網路資訊服務 (IIS) 以降低阻絕服務攻擊向量 64 KB 的使用降低的要求的緩衝區大小。不過,在 HTTP 要求中的 Kerberos 票證會編碼為 Base64 (展開以八個位元的六個位元)。此外,且 Kerberos 票證會使用 133 百分比原來的大小。因此,在 IIS 中的 64 KB 的緩衝區大小上限時,就可以使用 48 KB 的 Kerberos 票證。

如果您將MaxTokenSize登錄項目設定為大於 48000,值的緩衝區空間用於 Sid,IIS 可能發生錯誤。不過,如果您將MaxTokenSize登錄項目設定為 48000 時,則 Kerberos 可能會發生錯誤。

如需有關 IIS 的緩衝區大小的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
310156 如何限制 IIS 會接受來自 Windows 2000 中的用戶端的 HTTP 傳輸標頭大小

920862 當 Outlook Web Access 使用者嘗試存取信箱,以在 Exchange Server 2003年中的錯誤訊息: 「 HTTP 400 錯誤的要求 (太長的要求標頭)"

Windows Server 2012 變更

Windows Server 2012 引入這個緩衝區的相關考量下列變更:
  • MaxTokenSize 的預設值變更為 48000 位元組。
  • 沒有新的配置來壓縮 PAC.中的 sid
  • 動態存取控制項加入至票證的使用中目錄宣告。因此,計算預期的票證大小已不再直接了當。期望的是 Windows Server 2012 網域控制站所發出的票證小於相同從舊版作業系統發出的票證。宣告加入票證大小。不過,Windows Server 2012 檔案伺服器會廣泛地使用宣告之後,您可以預期階段出大量的您控制要修剪票證大小的檔案存取的群組。

如需有關 Windows Server 2012 變更的詳細資訊,請移至下列 Microsoft TechNet 網站:
http://technet.microsoft.com/en-us/library/hh831717.aspx

問題票證大小超過時的範例

如需詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
277741 因緩衝區不足而失敗的 Kerberos 的 Internet Explorer 登入
313661 錯誤訊息: 「 逾時過期 」 發生於您連線到 SQL Server 透過 TCP/IP,Kerberos MaxTokenSize 且大於 0xFFFF

因為您可能有跨網域登入案例樹系中,值應該設定全樹系的所有 Windows 架構的系統上。因此,我們建議您 MaxTokenSize 值的最大值為 64 K。

重要在 SQL Server 用戶端上,這個問題發生時,可能會收到下列錯誤訊息:
無法產生 SSPI 內容
若要解決這個問題,您必須設定 MaxTokenSize 登錄值的 Kerberos 驗證程序中涉及的所有電腦。這包括 SQL Server 用戶端。

屬性

文章編號: 327825 - 上次校閱: 2014年6月12日 - 版次: 4.0
這篇文章中的資訊適用於:
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Professional x64 Edition
  • Microsoft Windows Server 2003 Service Pack 2
  • Windows Vista 商用入門版
  • Windows Vista 商用進階版
  • Windows Vista 旗艦版
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
  • Windows Web Server 2008
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Foundation
  • Windows Server 2008 R2 Standard
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Ultimate
  • Windows Server 2012 Datacenter
  • Windows Server 2012 Essentials
  • Windows Server 2012 Foundation
  • Windows Server 2012 Standard
  • Windows 8 Enterprise
  • Windows 8 Pro
  • Microsoft Windows Server 2003 R2 Datacenter Edition (32-Bit x86)
  • Microsoft Windows Server 2003 R2 Datacenter x64 Edition
  • Microsoft Windows Server 2003 R2 Enterprise Edition (32-Bit x86)
  • Microsoft Windows Server 2003 R2 Enterprise x64 Edition
  • Microsoft Windows Server 2003 R2 Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003 R2 Standard x64 Edition
  • Windows 8.1 Enterprise
  • Windows 8.1 Pro
  • Windows Server 2012 R2 Datacenter
  • Windows Server 2012 R2 Essentials
  • Windows Server 2012 R2 Foundation
  • Windows Server 2012 R2 Standard
關鍵字:?
kbqfe kbhotfixserver kbsecurity kbwin2ksp4fix kbbug kbfix kbwin2000presp3fix kbwin2000presp4fix kbmt KB327825 KbMtzh
機器翻譯
請注意--重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,且可能由 Microsoft Community 利用 Community Translation Framework技術或人工進行事後編修。翻譯過程並無專業譯者參與。Microsoft 同時提供使用者人為翻譯、機器翻譯及社群編修後的機器翻譯三種版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,所有翻譯文章都可能不盡完美,內容都可能出現詞彙、語意或文法上的錯誤。就翻譯內容之不正確或錯誤,或客戶因使用翻譯內容所產生的任何損害,微軟不負擔任何責任。Microsoft將依合理的商業努力不斷地更新機器翻譯軟體和工具,以期能為使用者提供更好的服務。
按一下這裡查看此文章的英文版本:327825
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com