設定負載平衡的 Client Access Server 的 Kerberos 驗證
適用於:Exchange Server 2013
總結: 描述如何在 Exchange 2013 中搭配負載平衡的用戶端存取伺服器使用 Kerberos 驗證。
若要讓您搭配負載平衡的用戶端存取伺服器使用 Kerberos 驗證,您必須完成本文所述的設定步驟。
在 Active Directory 網域服務 中建立替代服務帳戶認證
所有共用相同命名空間和 URL 的用戶端存取伺服器都必須使用相同的替代服務帳戶認證。 一般而言,針對每個 Exchange 版本,只要有樹系的單一帳戶就已足夠。 替代服務帳戶認證 或 ASA 認證。
重要事項
Exchange 2010 和 Exchange 2013 無法共用相同的 ASA 認證。 您必須為 Exchange 2013 建立新的 ASA 認證。
重要事項
雖然共用命名空間支援 CNAME 記錄,但 Microsoft 建議使用 A 記錄。 這可確保用戶端根據共用名稱稱而非伺服器 FQDN 正確發出 Kerberos 票證要求。
當您設定 ASA 認證時,請記住下列指導方針:
帳戶類型:建議您建立電腦帳戶,而不是使用者帳戶。 電腦帳戶不允許互動式登入,而且安全性原則可能比使用者帳戶更簡單。 如果您建立電腦帳戶,密碼不會過期,但我們還是建議您定期更新密碼。 您可以使用本機組策略來指定電腦帳戶和腳本的存留期上限,以定期刪除不符合目前原則的電腦帳戶。 您的本機安全性原則也會決定何時需要變更密碼。 雖然我們建議您使用電腦帳戶,但您可以建立使用者帳戶。
帳戶名稱:帳戶名稱沒有任何需求。 您可以使用任何符合命名配置的名稱。
帳戶群組:您用於 ASA 認證的帳戶不需要特殊安全性許可權。 如果您使用電腦帳戶,則帳戶只需要是網域電腦安全性組的成員。 如果您使用使用者帳戶,則帳戶只需要是 Domain Users 安全性群組的成員。
帳戶密碼:您在建立帳戶時所提供的密碼將會被使用。 因此,當您建立帳戶時,應該使用複雜的密碼,並確保密碼符合組織的密碼需求。
將 ASA 認證建立為電腦帳戶
在已加入網域的電腦上,執行 Windows PowerShell 或 Exchange 管理命令介面。
使用 Import-Module Cmdlet 匯入 Active Directory 模組。
Import-Module ActiveDirectory
使用 New-ADComputer Cmdlet,使用下列 Cmdlet 語法建立新的 Active Directory 電腦帳戶:
New-ADComputer [-Name] <string> [-AccountPassword <SecureString>] [-AllowReversiblePasswordEncryption <System.Nullable[boolean]>] [-Description <string>] [-Enabled <System.Nullable[bool]>]
範例:
New-ADComputer -Name EXCH2013ASA -AccountPassword (Read-Host 'Enter password' -AsSecureString) -Description 'Alternate Service Account credentials for Exchange' -Enabled:$True -SamAccountName EXCH2013ASA
其中 EXCH2013ASA是帳戶的名稱,Exchange 的替代服務帳戶認證描述是您想要的任何名稱,而SamAccountName參數的值,在此案例中,EXCH2013ASA在您的目錄中必須是唯一的。
使用 Set-ADComputer Cmdlet,使用下列 Cmdlet 語法啟用 Kerberos 所使用的 AES 256 加密加密支援:
Set-ADComputer [-Name] <string> [-add @{<attributename>="<value>"]
範例:
Set-ADComputer EXCH2013ASA -add @{"msDS-SupportedEncryptionTypes"="28"}
其中 EXCH2013ASA是帳戶的名稱,而要修改的屬性是msDS-SupportedEncryptionTypes,其十進位值為 28,可啟用下列加密:RC4-HMAC、AES128-CTS-HMAC-SHA1-96、AES256-CTS-HMAC-SHA1-96。
如需這些 Cmdlet 的詳細資訊,請參閱 Import-Module 和 New-ADComputer。
跨樹系案例
如果您有跨樹系或資源樹系部署,而且您的使用者位於包含 Exchange 的 Active Directory 樹系外部,則必須設定樹系之間的樹系信任關係。 此外,針對部署中的每個樹系,您必須設定路由規則,以在樹系內和跨樹系的所有名稱尾碼之間啟用信任。 如需管理跨樹系信任的詳細資訊,請參閱 設定合作夥伴組織。
識別要與 ASA 認證相關聯的服務主體名稱
建立 ASA 認證之後,您必須將 Exchange 服務主體名稱 (SPN) 與 ASA 認證產生關聯。 Exchange SPN 清單可能會隨著您的組態而有所不同,但至少應包含下列專案:
HTTP/:針對 Outlook Anywhere、MAPI over HTTP、Exchange Web Services、自動探索和離線通訊錄使用此 SPN。
SPN 值必須符合網路負載平衡器上的服務名稱,而不是在個別伺服器上。 若要協助規劃您應該使用的 SPN 值,請考慮下列案例:
單一 Active Directory 網站
多個 Active Directory 網站
在每個案例中,假設已針對內部 URL、外部 URL 和用戶端存取伺服器成員所使用的自動探索內部 URI,部署 (FQDN) 負載平衡的完整功能變數名稱。 如需詳細資訊,請參閱瞭解 Proxy 和重新導向。
單一 Active Directory 網站
如果您有單一 Active Directory 網站,您的環境可能類似下圖中的網站:
根據上圖中內部 Outlook 用戶端所使用的 FQDN,您需要將下列 SPN 與 ASA 認證產生關聯:
HTTP/mail.corp.tailspintoys.com
HTTP/autodiscover.corp.tailspintoys.com
多個 Active Directory 網站
如果您有多個 Active Directory 網站,您的環境可能類似下圖中的網站:
根據上圖中 Outlook 用戶端所使用的 FQDN,您必須將下列 SPN 與 ADSite 1 中用戶端存取伺服器所使用的 ASA 認證產生關聯:
HTTP/mail.corp.tailspintoys.com
HTTP/autodiscover.corp.tailspintoys.com
您也需要將下列 SPN 與 ADSite 2 中用戶端存取伺服器所使用的 ASA 認證產生關聯:
HTTP/mailsdc.corp.tailspintoys.com
HTTP/autodiscoversdc.corp.tailspintoys.com
在每個用戶端存取伺服器上設定並確認 ASA 認證的設定
建立帳戶之後,您必須確認帳戶已複寫至所有 AD DS 網域控制站。 具體而言,帳戶必須存在於將使用 ASA 認證的每部用戶端存取伺服器上。 接下來,您會在部署中的每個用戶端存取伺服器上,將帳戶設定為 ASA 認證。
您可以使用 Exchange 管理命令介面來設定 ASA 認證,如下列其中一個程式所述:
將 ASA 認證部署到第一部 Exchange 2013 用戶端存取伺服器
將 ASA 認證部署至後續的 Exchange 2013 用戶端存取伺服器
部署 ASA 認證的唯一支援方法是使用RollAlternateServiceAcountPassword.ps1腳本。 如需執行腳本的詳細資訊和必要許可權,請參閱 在殼層中使用RollAlternateserviceAccountCredential.ps1腳本。 執行腳本之後,建議您確認所有目標伺服器都已正確更新。
將 ASA 認證部署到第一部 Exchange 2013 用戶端存取伺服器
在 Exchange 2013 伺服器上開啟 Exchange 管理命令介面。
執行下列命令,將 ASA 認證部署到第一部 Exchange 2013 用戶端存取伺服器:
Cd $env:ExchangeInstallPath\Scripts .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-1.corp.tailspintoys.com -GenerateNewPasswordFor tailspin\EXCH2013ASA$
當系統詢問您是否要變更替代服務帳戶的密碼時,請回答 [是]。
以下是當您執行RollAlternateServiceAccountPassword.ps1腳本時所顯示的輸出範例。
========== Starting at 01/12/2015 10:17:47 ==========
Creating a new session for implicit remoting of "Get-ExchangeServer" command...
Destination servers that will be updated:
Name PSComputerName
---- --------------
cas-1 cas-1.corp.tailspintoys.com
Credentials that will be pushed to every server in the specified scope (recent first):
UserName
Password
--------
--------
tailspin\EXCH2013ASA$
System.Security.SecureString
Prior 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 cas-1
Setting a new password on Alternate Serice Account in Active Directory
Password change
Do you want to change password for tailspin\EXCH2013ASA$ in Active Directory at this time?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
Preparing to update Active Directory with a new password for tailspin\EXCH2013ASA$ ...
Resetting a password in the Active Directory for tailspin\EXCH2013ASA$ ...
New password was successfully set to Active Directory.
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:
StructuralObjectClass QualifiedUserName Last Pwd Update SPNs
--------------------- ----------------- --------------- ----
computer tailspin\EXCH2013ASA$ 1/12/2015 10:19:53 AM
Per-server Alternate Service Account configuration as of the time of script completion:
Array: {mail.corp.tailspintoys.com}
Identity AlternateServiceAccountConfiguration
-------- ------------------------------------
cas-1 Latest: 1/12/2015 10:19:22 AM, tailspin\EXCH2013ASA$
...
========== Finished at 01/12/2015 10:20:00 ==========
THE SCRIPT HAS SUCCEEDED
將 ASA 認證部署到另一部 Exchange 2013 用戶端存取伺服器
在 Exchange 2013 伺服器上開啟 Exchange 管理命令介面。
將目錄變更為
$env:\Scripts
。執行下列命令,將 ASA 認證部署到另一部 Exchange 2013 用戶端存取伺服器:
.\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-2.corp.tailspintoys.com -CopyFrom cas-1.corp.tailspintoys.com
針對您要部署 ASA 認證的每個用戶端存取伺服器重複步驟 3。
以下是當您執行RollAlternateServiceAccountPassword.ps1腳本時所顯示的輸出範例。
========== Starting at 01/12/2015 10:34:35 ==========
Destination servers that will be updated:
Name PSComputerName
---- --------------
cas-2 cas-2.corp.tailspintoys.com
Credentials that will be pushed to every server in the specified scope (recent first):
UserName
Password
--------
--------
tailspin\EXCH2013ASA$
System.Security.SecureString
Prior to pushing new credentials, all existing credentials will be removed from the destination servers.
Pushing credentials to server cas-2
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:
StructuralObjectClass QualifiedUserName Last Pwd Update SPNs
--------------------- ----------------- --------------- ----
computer tailspin\EXCH2013ASA$ 1/12/2015 10:19:53 AM
Per-server Alternate Service Account configuration as of the time of script completion:
Array: cas-2.corp.tailspintoys.com
Identity AlternateServiceAccountConfiguration
-------- ------------------------------------
cas-2 Latest: 1/12/2015 10:37:59 AM, tailspin\EXCH2013ASA$
...
========== Finished at 01/12/2015 10:38:13 ==========
THE SCRIPT HAS SUCCEEDED
確認 ASA 認證的部署
在 Exchange 2013 伺服器上開啟 Exchange 管理命令介面。
執行下列命令以檢查用戶端存取伺服器上的設定:
Get-ClientAccessServer CAS-3 -IncludeAlternateServiceAccountCredentialStatus | Format-List Name, AlternateServiceAccountConfiguration
在您要驗證 ASA 認證部署的每個用戶端存取伺服器上重複步驟 2。
以下是當您執行上述Get-ClientAccessServer命令,但未設定先前的 ASA 認證時所顯示的輸出範例。
Name : CAS-1
AlternateServiceAccountConfiguration : Latest: 1/12/2015 10:19:22 AM, tailspin\EXCH2013ASA$
Previous: <Not set>
...
以下是當您執行上述的 Get-ClientAccessServer 命令,且先前已設定 ASA 認證時所顯示的輸出範例。 會傳回先前的 ASA 認證及其設定的日期和時間。
Name : CAS-3
AlternateServiceAccountConfiguration : Latest: 1/12/2015 10:19:22 AM, tailspin\EXCH2013ASA$
Previous: 7/15/2014 12:58:35 PM, tailspin\oldSharedServiceAccountName$
...
建立服務主體名稱 (SPN) 與 ASA 認證的關聯
重要事項
在您將該認證部署至至少一個Exchange Server之前,請勿將 SPN 與 ASA 認證建立關聯,如先前將 ASA 認證部署至第一部 Exchange 2013 用戶端存取伺服器中所述。 否則,您會遇到 Kerberos 驗證錯誤。
將 SPN 與 ASA 認證建立關聯之前,您必須確認目標 SPN 尚未與樹系中的不同帳戶相關聯。 ASA 認證必須是樹系中唯一與這些 SPN 相關聯的帳戶。 您可以從命令列執行 setspn 命令,確認樹系中沒有其他帳戶與 SPN 相關聯。
執行 setspn 命令,確認 SPN 尚未與樹系中的帳戶相關聯
按 [開始]。 在 [ 搜尋] 方 塊中,輸入 命令提示字元,然後在結果清單中選取 [ 命令提示字元]。
在命令提示字元處,輸入下列命令:
setspn -F -Q <SPN>
其中 < SPN > 是您想要與 ASA 認證建立關聯的 SPN。 例如:
setspn -F -Q http/mail.corp.tailspintoys.com
命令應該不會傳回任何內容。 如果它傳回某個專案,則另一個帳戶已經與 SPN 相關聯。 針對您想要與 ASA 認證相關聯的每個 SPN 重複此步驟一次。
使用 setspn 命令建立 SPN 與 ASA 認證的關聯
按 [開始]。 在 [ 搜尋] 方 塊中,輸入 命令提示字元,然後在結果清單中選取 [ 命令提示字元]。
在命令提示字元處,輸入下列命令:
setspn -S <SPN> <Account>$
其中 < SPN > 是您想要與 ASA 認證相關聯的 SPN,而 < Account > 是與 ASA 認證相關聯的帳戶。 例如:
setspn -S http/mail.corp.tailspintoys.com tailspin\EXCH2013ASA$
針對您想要與 ASA 認證相關聯的每個 SPN 執行此命令一次。
使用 setspn 命令,確認您已將 SPN 與 ASA 認證建立關聯
按 [開始]。 在 [ 搜尋] 方 塊中,輸入 命令提示字元,然後在結果清單中選取 [ 命令提示字元]。
在命令提示字元處,輸入下列命令:
setspn -L <Account>$
其中 < Account > 是與 ASA 認證相關聯的帳戶。 例如:
setspn -L tailspin\EXCH2013ASA$
您只需要執行此命令一次。
啟用 Outlook 用戶端的 Kerberos 驗證
在 Exchange 2013 伺服器上開啟 Exchange 管理命令介面。
若要啟用 Outlook Anywhere 用戶端的 Kerberos 驗證,請在您的用戶端存取伺服器上執行下列命令:
Get-OutlookAnywhere -server CAS-1 | Set-OutlookAnywhere -InternalClientAuthenticationMethod Negotiate
若要透過 HTTP 用戶端啟用 MAPI 的 Kerberos 驗證,請在 Exchange 2013 用戶端存取伺服器上執行下列命令:
Get-MapiVirtualDirectory -Server CAS-1 | Set-MapiVirtualDirectory -IISAuthenticationMethods Ntlm, Negotiate
針對您想要啟用 Kerberos 驗證的每個 Exchange 2013 用戶端存取伺服器重複步驟 2 和 3。
驗證 Exchange 用戶端 Kerberos 驗證
成功設定 Kerberos 和 ASA 認證之後,請確認用戶端可以如這些工作中所述成功驗證。
確認 Microsoft Exchange 服務主機服務正在執行
用戶端存取伺服器上的 Microsoft Exchange 服務主機服務 (MSExchangeServiceHost) 負責管理 ASA 認證。 如果此服務未執行,則無法進行 Kerberos 驗證。 根據預設,服務會設定為在電腦啟動時自動啟動。
確認 Microsoft Exchange 服務主機服務已啟動
按一下 [開始],輸入 services.msc,然後從清單中選取 services.msc 。
在 [ 服務] 視窗中,于服務清單中找到 Microsoft Exchange 服務主機 服務。
服務的狀態應該是 [正在 執行]。 如果狀態不是 [ 執行中],請以滑鼠右鍵按一下服務,然後按一下 [ 啟動]。
從用戶端存取伺服器驗證 Kerberos
當您在每部 Client Access 伺服器上設定 ASA 認證時,您會執行 set-ClientAccessServer Cmdlet。 執行此 Cmdlet 之後,您可以使用記錄來驗證成功的 Kerberos 連線。
使用 HttpProxy 記錄檔驗證 Kerberos 是否正常運作
流覽至 HttpProxy 記錄檔儲存所在的資料夾,方法是使用下列路徑:
%ExchangeInstallPath%Logging\HttpProxy\RpcHttp
開啟最新的記錄檔,並 尋找 Negotiate 這個字。 記錄檔中的這一行看起來會像下列範例:
2014-02-19T13:30:49.219Z,e19d08f4-e04c-42da-a6be-b7484b396db0,15,0,775,22,,RpcHttp,mail.corp.tailspintoys.com,/rpc/rpcproxy.dll,,Negotiate,True,tailspin\Wendy,tailspintoys.com,MailboxGuid~ad44b1e0-e44f-4a16-9396-3a437f594f88,MSRPC,192.168.1.77,EXCH1,200,200,,RPC_OUT_DATA,Proxy,exch2.tailspintoys.com,15.00.0775.000,IntraForest,MailboxGuidWithDomain,,,,76,462,1,,1,1,,0,,0,,0,0,16272.3359,0,0,3,0,23,0,25,0,16280,1,16274,16230,16233,16234,16282,?ad44b1e0-e44f-4a16-9396-3a437f594f88@tailspintoys.com:6001,,BeginRequest=2014-02-19T13:30:32.946Z;BeginGetRequestStream=2014-02-19T13:30:32.946Z;OnRequestStreamReady=2014-02-19T13:30:32.946Z;BeginGetResponse=2014-02-19T13:30:32.946Z;OnResponseReady=2014-02-19T13:30:32.977Z;EndGetResponse=2014-02-19T13:30:32.977Z;,PossibleException=IOException;
如果您看到 AuthenticationType 值為 Negotiate,則伺服器會成功建立 Kerberos 驗證的連線。
維護 ASA 認證
如果您需要定期重新整理 ASA 認證上的密碼,請使用本文中設定 ASA 認證的步驟。 請考慮設定排程工作以執行一般密碼維護。 請務必監視排程的工作,以確保及時變換密碼,並防止可能的驗證中斷。
關閉 Kerberos 驗證
若要設定用戶端存取伺服器,使其不使用 Kerberos,請解除關聯或從 ASA 認證中移除 SPN。 如果移除 SPN,您的用戶端將不會嘗試 Kerberos 驗證,而設定為使用交涉驗證的用戶端將會改用 NTLM。 設定為僅使用 Kerberos 的用戶端將無法連線。 移除 SPN 之後,您也應該刪除帳戶。
移除 ASA 認證
在 Exchange 2013 伺服器上開啟 Exchange 管理命令介面,然後執行下列命令:
Set-ClientAccessServer CAS-1 -RemoveAlternateServiceAccountCredentials
雖然您不需要立即執行此動作,但最後應該重新開機所有用戶端電腦,以從電腦清除 Kerberos 票證快取。