設定負載平衡的 Client Access Server 的 Kerberos 驗證

 

適用版本: Exchange Server 2010 SP2, Exchange Server 2010 SP3

上次修改主題的時間: 2016-11-28

若要包含 Client Access Server 負載平衡陣列的 Kerberos 驗證,必須完成幾個組態步驟。 如需如何使用 Kerberos 與 Client Access Server 陣列或負載平衡解決方案的詳細資訊,請參閱將 Kerberos 與 Client Access Server 陣列或負載平衡解決方案配合使用

在 Active Directory 中建立備用服務帳戶認證

Client Access Server 陣列中的所有電腦都必須共用相同的服務帳戶。此外,在資料中心啟動案例中可能呼叫的 Client Access Server 也必須共用相同的服務帳戶。 一般而言,每個樹系中有單一的服務帳戶便已足夠。 此帳戶稱為備用服務帳戶認證 (ASA 認證)。

注意事項附註:
如果您的部署非常複雜而且超出下列案例之外、有系統管理員委派問題或者在不同的 Exchange 部署排程上有多個樹系區段,則您可能必須建立其他的帳戶。 RollAlternateServiceAccountPasswordl.ps1 指令碼必須為每一個建立的帳戶分別執行。

認證類型

您可以為備用服務帳戶建立電腦帳戶或使用者帳戶。 因為電腦帳戶不允許互動式登入,所以其安全性原則可能比使用者帳戶更為簡單,因此適合作為 ASA 認證的解決方案。 儘管您建立電腦帳戶後密碼並未過期,仍然建議您定期更新密碼。 本機群組原則可以指定電腦帳戶的帳戶保留天數上限,而且可能會有排程為定期刪除不符合目前原則之電腦帳戶的指令碼。 定期更新電腦帳戶的密碼將確保您的電腦帳戶不會因為與本機原則不符而遭到刪除。 您的本機安全性原則將決定何時需要變更密碼。

認證名稱

對於 ASA 認證的名稱,並沒有特定的需求。 您可以使用任何符合命名配置的名稱。

群組及角色

ASA 認證並不需要特殊的安全性權限。 如果您正在部署 ASA 認證的電腦帳戶,這表示帳戶只需要是「網域電腦」安全性群組的成員。 如果您正在部署 ASA 認證的電腦帳戶,這表示帳戶只需要是「網域使用者」安全性群組的成員。

密碼

不會實際使用您建立帳戶時所提供的密碼。 而是指令碼將會重設密碼。 建立帳戶時,您可以使用符合組織密碼規定的任何密碼。

跨樹系案例

如果您有跨樹系或資源樹系部署,而且使用者位於包含 Active Directory 的 Exchange 樹系之外,則您必須設定跨樹系信任以及跨樹系路由名稱尾碼。如需相關資訊,請參閱存取跨樹系資源路由跨樹系名稱尾碼

識別應與備用服務帳戶認證產生關聯的服務主要名稱

建立備用服務帳戶之後,您必須決定將與 ASA 認證產生關聯的 Exchange 服務主要名稱 (SPN)Exchange SPN 清單可能因您的組態而有所不同,不過至少應包含下列項目:

  • http 針對 Exchange Web 服務、離線通訊錄下載和自動探索服務使用此 SPN。

  • exchangeMDB 針對 RPC Client Access 使用此 SPN。

  • exchangeRFR 針對通訊錄服務使用此 SPN。

  • exchangeAB 針對通訊錄服務使用此 SPN。

建立的 SPN 值必須設為與網路負載平衡器上使用的服務名稱相符,而非個別伺服器上的服務名稱。

為了協助您規劃應部署的 SPN 值,請考量下列概念性案例:

  1. 單一 Active Directory 站台

  2. 多個 Active Directory 站台

  3. 具備 DAG 站台恢復功能的多個 Active Directory 站台

在以上每個案例中都會假設已針對 Client Access Server 成員使用的內部 URL、外部 URL 和自動探索內部 URL 部署負載平衡網域全名。如需詳細資訊,請參閱 了解 Proxy 與重新導向

單一 Active Directory 站台

如果您有單一 Active Directory 站台,您的環境可能會與以下其中一個圖例類似。

根據內部 Outlook 用戶端在前述圖例中使用的網域全名,您需要在 ASA 認證上部署下列 SPN:

  • http/mail.corp.contoso.com

  • http/autod.corp.contoso.com

  • exchangeMDB/outlook.corp.contoso.com

  • exchangeRFR/outlook.corp.contoso.com

  • exchangeAB/outlook.corp.contoso.com

使用 Outlook Anywhere 的外部或網際網路型不會使用 Kerberos 驗證。因此,這些用戶端所使用的網域全名並不需要新增為 ASA 認證的 SPN。

重要事項重要事項:
如果您部署分割 DNS 基礎結構,外部和內部用戶端會使用網域全名,且這些名稱必須以 ASA 認證上的 SPN 來表示。

多個 Active Directory 站台

如果您有多個 Active Directory 站台,您的環境可能會與以下其中一個圖例類似。

根據內部 Outlook 用戶端在前述圖例中使用的網域全名,您需要在 Active Directory 站台 ADSite1 內供 Client Access Server 陣列使用的 ASA 認證上部署下列 SPN:

  • http/mail.corp.contoso.com

  • http/autod.corp.contoso.com

  • exchangeMDB/outlook.corp.contoso.com

  • exchangeRFR/outlook.corp.contoso.com

  • exchangeAB/outlook.corp.contoso.com

根據內部 Outlook 用戶端在前述圖例中使用的網域全名,您需要在 Active Directory 站台 ADSite2 內供 Client Access Server 陣列使用的 ASA 認證上部署下列 SPN:

  • http/mailsdc.corp.contoso.com

  • http/autodsdc.corp.contoso.com

  • exchangeMDB/outlooksdc.corp.contoso.com

  • exchangeRFR/outlooksdc.corp.contoso.com

  • exchangeAB/outlooksdc.corp.contoso.com

注意事項附註:
此範例顯示您可以為此特殊案例使用多個 ASA 認證。不過,您可以針對主控 Client Access Server 陣列 (您要在其中部署 Kerberos 驗證) 的所有 Active Directory 站台使用單一 ASA 認證。

具備 DAG 站台恢復功能的多個 Active Directory 站台

如果您有多個具備 DAG 站台恢復功能的 Active Directory 站台,您的環境可能會與以下其中一個圖例類似。

由於此架構包含延伸至兩個 Active Directory 站台的資料庫可用性群組 (DAG),因此您必須依照 ADSite1 和 ADSite2 中的 Client Access Server 陣列以部署要使用的單一 ASA 認證。如果您不使用單一 ASA 認證,當您執行資料中心轉換時,用戶端將會發生 Kerberos 驗證問題,因為次要資料中心 Client Access Server 陣列成員將無法解密 Kerberos 工作階段票證。如需啟用次要資料中心的相關資訊,請參閱資料中心轉換

根據內部 Outlook 用戶端在前述圖例中使用的網域全名,您需要在 ADSite1 和 ADSite2 內供 Client Access Server 陣列使用的 ASA 認證上部署下列 SPN:

  • http/mail.corp.contoso.com

  • http/autod.corp.contoso.com

  • exchangeMDB/outlook.corp.contoso.com

  • exchangeRFR/outlook.corp.contoso.com

  • exchangeAB/outlook.corp.contoso.com

  • http/mailsdc.corp.contoso.com

  • http/autodsdc.corp.contoso.com

  • exchangeMDB/outlooksdc.corp.contoso.com

  • exchangeRFR/outlooksdc.corp.contoso.com

  • exchangeAB/outlooksdc.corp.contoso.com

將離線通訊錄虛擬目錄轉換為應用程式

從另一種角度看,離線通訊錄虛擬目錄不是 Web 應用程式,所以不受 Microsoft Exchange 服務主機服務的控制。 因此,離離線通訊錄虛擬目錄的 Kerberos 認證要求無法由 ASA 認證加以解密。

若要將離線通訊錄虛擬目錄轉換為 Web 應用程式,請在每個 Client Access Server 成員上執行 ConvertOABDir.ps1 指令碼。 指令碼也會為離線通訊錄虛擬目錄建立新的應用程式集區。 指令碼位在 Exchange 2010 SP2 指令碼目錄中,或者您也可以從此處下載指令碼。

部署備用服務帳戶認證

建立 ASA 認證之後,請驗證帳戶已複寫到所有 Active Directory 站台內的所有網域控制站,其中包含將使用 ASA 認證的 Client Access Server。

然後您就可以在 Exchange 管理命令介面中執行 AlternateServiceAccount 認證指令碼。 如需詳細資訊,請參閱在命令介面中使用 RollAlternateserviceAccountCredential.ps1 指令碼。執行指令碼之後,建議您確認所有的目標伺服器都已正確更新。

注意事項附註:
此指令碼僅提供英文版。

如需協助疑難排解指令碼錯誤,請參閱疑難排解 RollAlternateServiceAccountCredential.ps1 指令碼

下列 RollAlternateServiceAccountPassword.ps1 指令碼的範例輸出使用以 ASA 認證所建立的電腦帳戶。此帳戶會命名為 contoso/newSharedServiceAccountName。在下列範例中,指令碼會將認證設定套用至稱為 outlook.corp.contoso.com 的 Client Access Server 陣列的每個成員。

若要執行指令碼,請使用下列命令。

RollAlternateServiceAccountPassword.ps1 -ToArrayMembers outlook.corp.contoso.com -GenerateNewPasswordFor contoso\newSharedServiceAccountName$

執行指令碼之後,您應會收到下列輸出。然後會出現一個提示,要求您核准變更密碼。

========== Started at 08/02/2010 15:48:09 ==========Destination servers that will be updated:Name----CASACASBCredentials that will be pushed to every server in the specified scope (recent first):UserName                               Password--------                               --------contoso\newSharedServiceAccountName$                System.Security.SecureStringPrior to pushing new credentials, all existing credentials that are invalid or no longer work will be removed from the destination servers.Pushing credentials to server CASAPushing credentials to server CASBSetting a new password on Alternate Service Account in Active DirectoryPassword changeDo you want to change password for contoso\newSharedServiceAccountName$ in Active Directory at this time?[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): yPreparing to update Active Directory with a new password for contoso\newSharedServiceAccountName$ ...Resetting a password in the Active Directory for contoso\newSharedServiceAccountName$ ...New password was successfully set to Active Directory.Retrieving the current Alternate Service Account configuration from servers in scopeAlternate Service Account properties:StructuralObjectClass QualifiedUserName       Last Pwd Update     --------------------- -----------------       ---------------     computer              contoso\newSharedServiceAccountName$ 8/2/2010 3:49:05 PM SPNs-----Per-server Alternate Service Account configuration as of the time of script completion:   Array: outlook.corp.contoso.comIdentity  AlternateServiceAccountConfiguration--------  ------------------------------------NAE14CAS  Latest: 8/2/2010 3:48:38 PM, contoso\newSharedServiceAccountName$          Previous: <Not set>NAE14CAS2 Latest: 8/2/2010 3:48:51 PM, contoso\newSharedServiceAccountName$          Previous: <Not set>

您也會在事件日誌中看到兩個事件識別碼。其中一個事件代表指令碼啟動,另一個則是成功完成。以下是成功完成事件的摘錄。

Log Name:      ApplicationSource:        MSExchange Management ApplicationEvent ID:      14002Task Category: KerberosLevel:         InformationDescription:Maintenance of the Alternate Service Accounts succeeded.

驗證 ASA 認證的部署

在 Exchange 管理命令介面中,執行下列命令以檢查 Client Access Server 上的設定。

Get-ClientAccessServer -IncludeAlternateServiceAccountCredentialStatus | fl name,*alter*

此命令的結果應如下所示。

Name                                 : CASAAlternateServiceAccountConfiguration : Latest: 8/2/2010 3:48:38 PM, contoso\newSharedServiceAccountName$                                       Previous: <Not set>Name                                 : CASBAlternateServiceAccountConfiguration : Latest: 8/2/2010 3:48:51 PM, contoso\newSharedServiceAccountName$                                       Previous: <Not set>

如果您已執行指令碼數次並進行變更,先前的項目將會顯示上次變更的時間。

Name                                 : NAE14CASAlternateServiceAccountConfiguration : Latest: 8/2/2010 4:32:38 PM, contoso\newSharedServiceAccountName$                                       Previous: 8/2/2010 4:32:24 PM, contoso\sharedkerbacct$Name                                 : NAE14CAS2AlternateServiceAccountConfiguration : Latest: 8/2/2010 4:32:38 PM, contoso\newSharedServiceAccountName$                                       Previous: 8/2/2010 4:32:24 PM, contoso\sharedkerbacct$

讓服務主要名稱與備用服務帳戶認證產生關聯

設定 SPN 前,請確定尚未在樹系中的不同帳戶上設定目標 SPN。ASA 認證在與這些與 SPN 相關聯的樹系中必須是唯一的帳戶。您可以執行 setspn 命令與命令列中的 –q–f 參數,以確定樹系中沒有其他帳戶具有與其關聯的 SPN。下列範例顯示如何執行此命令。 命令應不會傳回任何項目。如果它傳回值,表示另一個帳戶與您考慮使用的 SPN 相關聯。

注意事項附註:
僅 Windows Server 2008 在 setspn 命令中支援重複性檢查全樹系參數 (-f)
Setspn -q -f exchangeMDB/outlook.corp.contoso.com

下列命令提供如何在共用 ASA 認證上設定 SPN 的範例。您必須為您識別的每個目標 SPN 執行一次 setspn 指令以及此語法。

Setspn -S exchangeMDB/outlook.corp.contoso.com contoso\newSharedServiceAccountName$

設定 SPN 後,可以使用下列命令確定其已新增完成。

Setspn -L contoso\newSharedServiceAccountName$

驗證 Exchange 用戶端 Kerberos 驗證

成功設定 Kerberos 以及部署的 RollAlternateServiceAccountPasswordl.ps1 指令碼後,請確認用戶端能夠順利進行驗證。

確認 Microsoft Exchange 服務主機服務正在執行

Client Access Server 上的 Microsoft Exchange 服務主機服務會負責管理 ASA 認證。如果此服務未執行,將無法執行 Kerberos 驗證。依預設,此服務會設為在啟動電腦的同時自動啟動。確認您已在自身環境中的所有 Client Access Server 上安裝 Exchange Server 2010 SP1 Rollup 3 或更新版本。

驗證 Outlook 的驗證

為確保 Outlook 可以透過 Kerberos 驗證連線至 Client Access Server,請遵循下列步驟:

  1. 確認 Outlook 已設定為指向正確的負載平衡 Client Access Server 陣列。

  2. 設定電子郵件帳戶伺服器安全性設定以使用登入網路安全性 [交涉驗證]。或者您也可以將用戶端設定為使用 [Kerberos 密碼驗證]。不過,如果 SPN 曾遭到移除,在您將驗證機制變更回 [交涉驗證] 之前,用戶端將無法進行驗證。

  3. 確認該 Outlook Anywhere 未針對用戶端啟用。如果 Outlook 無法使用 Kerberos 進行驗證,就會回復至 Outlook Anywhere,因此應針對此測試停用 Outlook Anywhere。

  4. 重新啟動 Outlook。

  5. 如果您的桌上型電腦正在執行 Windows 7,您可以執行 klist.exe 以查看已授與及使用哪些 Kerberos 票證。如果您不是執行 Windows 7,則可以從 Windows Server 2003 Resource Kit 取得 klist.exe。

使用 Test-OutlookConnectivity Cmdlet 驗證

若要測試 Kerberos 是否有作用,請使用 Test-OutlookConnectivity Cmdlet。 這是查看是否可以建立 TCP 連線最好的方法。 依據預設,Cmdlet 會使用 TCP 連線的交涉驗證。 所以,如果設定了 Kerberos,便會使用它。klist.exe 檔可用於檢視電腦上的 Kerberos 票證。 這可以從 Client Access Server 本身執行,也可以從自動化的監視工具 (如 SCOM) 執行。使用 Test-OutlookConnectivity 指令程式時,請確認信箱資料庫的 RPCClientAccessServer 屬性設為 Client Access Server 陣列名稱。否則,此指令程式將不會測試共用的 ASA 認證功能。

Test-OutlookConnectivity -Identity administrator -MailboxCredential $c -Protocol tcp

若要確定連線是使用 Kerberos 所建立,請檢視 klist.exe 以查看是否已經新增與新的 SPN 相關聯的 Kerberos 票證。

驗證 Client Access Server 的 Kerberos

若要確定來自 Client Access Server 的 Kerberos 正常運作,您可以檢查通訊協定記錄以確定 Kerberos 連線成功。 除了其他驗證外,您也可以使用這些記錄來確認正在使用 Kerberos。

  • 在 Client Access Server上,檢查通訊錄通訊協定記錄。 這些記錄是通常位於下列路徑:C:\Program Files\Microsoft\Exchange server\v14\Logging\AddressBook Service。

  • 檢查最新的記錄檔,並在指令碼執行後尋找 Kerberos 這個字。 如果您看到 Kerberos 流量,表示已經成功連線。 記錄檔中的行看起來應該如下所示。

    2010-06-11T22:58:49.799Z,9,0,/o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=Administrator,,2001:4898:f0:3031:99f:ce35:750a:8b09,EXCH-A-363,ncacn_ip_tcp,Bind,,6,,,Kerberos,
    

如果您看到 Kerberos 的字眼,表示伺服器將成功建立 Kerberos 驗證的連線。 如需通訊錄服務記錄的詳細資訊,請參閱瞭解通訊錄服務

疑難排解驗證失敗

設定 Kerberos 驗證時,可能會發生幾個常見問題。

設定為僅使用 Kerberos 驗證的 Outlook 用戶端無法連線

如果您的 Outlook 用戶端是設定為僅使用 Kerberos 驗證而無法連線時,請遵循下列步驟進行疑難排解:

  1. 設定 Outlook 為僅使用 NTLM 驗證,然後確認連線。 如果無法建立連線,請確認 Client Access Server 陣列可用或網路連線能力穩定。

    如果 NTLM 連線成功,但 Kerberos 連線失敗,請確認 SPN 未在備用服務帳戶以外的其他任何帳戶註冊。 確認在帳戶上註冊的 Exchange SPN 是由本主題中稍早所述使用 setSPN 查詢命令的共用備用服務帳戶所使用。

  2. 請確定所有 Client Access Server 和 Active Directory 之間的密碼已協調完成。 若要執行此動作,請以自動模式執行指令碼並使其產生新密碼。

  3. 請確定 Microsoft Exchange 通訊錄服務已經在您的 Client Access Server 上執行。

  4. 如果仍然無法通過驗證,請確定您要使用 Kerberos 存取的服務所屬的虛擬目錄已經啟用整合式 Windows 驗證。 您可以使用 Get-VirtualDirectory Cmdlet 來確認驗證方法。 如需虛擬目錄的詳細資訊,請參閱了解 Outlook Web App 虛擬目錄瞭解 Exchange Web 服務虛擬目錄

自動探索服務失敗

如果您注意到下列自動探索服務失敗,很可能是因為自動探索服務要求標頭包含大型 Kerberos 驗證票證,導致標頭大小超出網際網路資訊服務 (IIS) 伺服器所設定的限制。 錯誤將類似如下。

HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Tue, 09 Mar 2010 18:06:18 GMT
Connection: close
Content-Length: 346

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""https://www.w3.org/TR/html4/strict.dtd">

<HTML><HEAD><TITLE>Bad Request</TITLE>

<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>

<BODY><h2>Bad Request - Request Too Long</h2>

<hr><p>HTTP Error 400. The size of the request headers is too long.</p>

</BODY></HTML>

若要修正這項錯誤,請增加 IIS 的標頭大小限制。 如需詳細資訊,請參閱 IIS 文件

ASA 認證的持續維護

如果共用 ASA 認證上的本機密碼必須定期重新整理,請參閱在命令介面中使用 RollAlternateserviceAccountCredential.ps1 指令碼,以取得設定排程工作執行定期密碼維護的指示。 務必監視排程的工作,確保密碼能夠及時變換,以避免可能的驗證中斷。

關閉 Kerberos 驗證

若要還原 Client Access Server 陣列,讓它不使用 Kerberos,請從共用服務帳戶移除 SPN。 如果移除 SPN,您的用戶端就不會嘗試 Kerberos 驗證,而且設定為使用交涉驗證的用戶端將會使用 NTLM。 設定為僅使用 Kerberos 的用戶端將無法連線。 一旦移除 SPN 之後,您也應該刪除共用服務帳戶。 您可以利用 toEntireForest 參數來使用維護指令碼清除所有 Client Access Server陣列成員中的認證,然後使用伺服器參數中的 -copy 來指定沒有任何 Kerberos 認證的伺服器。此外,您最後應重新啟動所有用戶端電腦以清除 Kerberos 票證快取。

 © 2010 Microsoft Corporation. 著作權所有,並保留一切權利。