共用方式為


設定負載平衡用戶端存取服務的 Kerberos 驗證

若要讓您搭配執行用戶端存取服務的負載平衡信箱伺服器使用 Kerberos 驗證,您必須完成本文所述的設定步驟。

在 Active Directory 網域服務中建立替代服務帳戶認證

所有執行共用相同命名空間和 URL 之用戶端存取服務的 Exchange 伺服器都必須使用相同的 替代服務帳戶認證 ,或 (ASA 認證) 。 一般而言,針對每個 Exchange 版本,只要有樹系的單一帳戶就已足夠。

重要事項

Exchange 2010 和 Exchange 2016 無法共用相同的 ASA 認證。 如果您的 ASA 認證是針對 Exchange 2010 所建立,您必須為 Exchange 2016 建立新的認證。

雖然共用命名空間支援 CNAME 記錄,但Microsoft建議使用 A 記錄。 這可確保客戶端根據共享名稱而非伺服器 FQDN 正確發出 Kerberos 票證要求。

注意事項

內部部署 Exchange Server 環境中不支援 gMSA) (群組受控服務帳戶,因此無法在此案例中使用。

當您設定 ASA 認證時,請記住下列指導方針:

  • 帳戶類型:建議您建立計算機帳戶,而不是用戶帳戶。 計算機帳戶不允許互動式登錄,而且安全策略可能比用戶帳戶更簡單。 如果您建立計算機帳戶,密碼不會過期,但我們還是建議您定期更新密碼。 您可以使用本機組策略來指定計算機帳戶和腳本的存留期上限,以定期刪除不符合目前原則的計算機帳戶。 您的本機安全策略也會決定何時必須變更密碼。 雖然我們建議您使用計算機帳戶,但您可以建立用戶帳戶。

  • 帳戶名稱:帳戶名稱沒有任何需求。 您可以使用任何符合命名設定的名稱。

  • 帳戶群組:您用於 ASA 認證的帳戶不需要特殊安全性許可權。 如果您使用計算機帳戶,則帳戶只需要是網域計算機安全組的成員。 如果您使用用戶帳戶,則帳戶只需要是 Domain Users 安全組的成員。

  • 帳戶密碼:您在建立帳戶時所提供的密碼將會被使用。 因此,當您建立帳戶時,應該使用複雜的密碼,並確保密碼符合組織的密碼需求。

將 ASA 認證建立為電腦帳戶

  1. 在已加入網域的計算機上,執行 Windows PowerShell 或 Exchange 管理命令介面。

    使用 Import-Module Cmdlet 匯入 Active Directory 模組。

    Import-Module ActiveDirectory
    
  2. 使用 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 EXCH2016ASA -AccountPassword (Read-Host 'Enter password' -AsSecureString) -Description 'Alternate Service Account credentials for Exchange' -Enabled:$True -SamAccountName EXCH2016ASA
    

    其中 EXCH2016ASA 是帳戶的名稱, 則描述 Exchange 的替代服務帳戶認證 是您想要的名稱,而 SamAccountName 參數的值在此案例 中EXCH2016ASA,在您的目錄中必須是唯一的。

  3. 使用 Set-ADComputer Cmdlet,使用下列 Cmdlet 語法啟用 Kerberos 所使用的 AES 256 加密加密支援:

    Set-ADComputer [-Name] <string> [-add @{<attributename>="<value>"]
    

    範例:

    Set-ADComputer EXCH2016ASA -add @{"msDS-SupportedEncryptionTypes"="28"}
    

    其中 EXCH2016ASA 是帳戶的名稱,而要修改的屬性是小數值為 28 的 msDS-SupportedEncryptionTypes ,可啟用下列加密:RC4-HMAC、AES128-CTS-HMAC-SHA1-96、AES256-CTS-HMAC-SHA1-96。

如需這些 Cmdlet 的詳細資訊,請參閱 Import-ModuleNew-ADComputer

跨樹系案例

如果您有跨樹系或資源樹系部署,而且您的用戶位於包含 Exchange 的 Active Directory 樹系外部,則必須設定樹系之間的樹系信任關係。 此外,針對部署中的每個樹系,您必須設定路由規則,以在樹系內和跨樹系的所有名稱後綴之間啟用信任。 如需管理跨樹系信任的詳細資訊,請參閱 設定合作夥伴組織

識別要與 ASA 認證相關聯的服務主體名稱

建立 ASA 認證之後,您必須將 Exchange 服務主體名稱 (SPN) 與 ASA 認證建立關聯。 Exchange SPN 清單可能會隨著您的組態而有所不同,但至少應包含下列專案:

  • HTTP/:針對 Outlook Anywhere、MAPI over HTTP、Exchange Web Services、自動探索和離線通訊簿使用此 SPN。

SPN 值必須符合網路負載平衡器上的服務名稱,而不是在個別伺服器上。 若要協助規劃您應該使用的SPN值,請考慮下列案例:

在每個案例中,假設已針對執行用戶端存取服務的成員所使用的內部 URL、外部 URL 和自動探索內部 URI,部署 (FQDN) 負載平衡的完整功能變數名稱。

單一 Active Directory 網站

如果您有單一 Active Directory 網站,您的環境可能類似下圖中的網站:

圖表顯示範例單一 Active Directory 網站。

根據上圖中內部 Outlook 用戶端所使用的 FQDN,您必須將下列 SPN 與 ASA 認證產生關聯:

  • http/mail.corp.tailspintoys.com
  • http/autodiscover.corp.tailspintoys.com

多個 Active Directory 網站

如果您有多個 Active Directory 網站,您的環境可能類似下圖中的網站:

圖表顯示多個 AD 網站的範例範例。

根據上圖中 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 伺服器
  • 將 ASA 認證部署至執行用戶端存取服務的後續 Exchange 伺服器

部署 ASA 認證的唯一支援方法是使用 RollAlternateServiceAcountPassword.ps1 腳本。 如需執行腳本的詳細資訊和必要許可權,請參閱 在殼層中使用 RollAlternateserviceAccountCredential.ps1 腳本。 執行文本之後,建議您確認所有目標伺服器都已正確更新。

將 ASA 認證部署到執行用戶端存取服務的第一部 Exchange 伺服器

  1. 在 Exchange 2016 或 Exchange 2019 伺服器上開啟 Exchange 管理命令介面。

  2. 將目錄變更為 <Exchange 2016 安裝目錄>\V15\Scripts。

  3. 執行下列命令,將 ASA 認證部署到執行用戶端存取服務的第一部 Exchange 2016 或 Exchange 2019 伺服器:

    .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-1.corp.tailspintoys.com -GenerateNewPasswordFor tailspin\EXCH2016ASA$
    
  4. 當系統詢問您是否要變更替代服務帳戶的密碼時,請回答 [是]

以下是當您執行 RollAlternateServiceAccountPassword.ps1 文稿時所顯示的輸出範例。

========== Starting at 01/12/2016 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\EXCH2016ASA$
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 mbx-1
Setting a new password on Alternate Service Account in Active Directory
Password change
Do you want to change password for tailspin\EXCH2016ASA$ 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\EXCH2016ASA$ ...
Resetting a password in the Active Directory for tailspin\EXCH2016ASA$ ...
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\EXCH2016ASA$   1/12/2016 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/2016 10:19:22 AM, tailspin\EXCH2016ASA$
          ...
========== Finished at 01/12/2016 10:20:00 ==========
        THE SCRIPT HAS SUCCEEDED

將 ASA 認證部署到另一部執行用戶端存取服務的 Exchange 伺服器

  1. 在 Exchange 2016 或 Exchange 2019 伺服器上開啟 Exchange 管理命令介面。

  2. 將目錄變更為 <Exchange 2016 安裝目錄>\V15\Scripts。

  3. 執行下列命令,將 ASA 認證部署到另一部執行用戶端存取服務的 Exchange 2016 或 Exchange 2019 伺服器:

    .\RollAlternateServiceAccountPassword.ps1 -ToSpecificServer cas-2.corp.tailspintoys.com -CopyFrom cas-1.corp.tailspintoys.com
    
  4. 針對您想要部署 ASA 認證的每部執行用戶端存取服務的伺服器,重複步驟 3。

以下是當您執行 RollAlternateServiceAccountPassword.ps1 文稿時所顯示的輸出範例。

========== Starting at 01/12/2016 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\EXCH2016ASA$
System.Security.SecureString
Prior to pushing new credentials, all existing credentials will be removed from the destination servers.
Pushing credentials to server mbx-2
Retrieving the current Alternate Service Account configuration from servers in scope
Alternate Service Account properties:
StructuralObjectClass QualifiedUserName Last Pwd Update       SPNs
--------------------- ----------------- ---------------       ----
computer              tailspin\EXCH2016ASA$   1/12/2016 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/2016 10:37:59 AM, tailspin\EXCH2016ASA$
          ...
========== Finished at 01/12/2016 10:38:13 ==========
        THE SCRIPT HAS SUCCEEDED

確認 ASA 認證的部署

  • 在 Exchange 2016 或 Exchange 2019 伺服器上開啟 Exchange 管理命令介面。

  • 執行下列命令,以檢查執行用戶端存取服務之伺服器上的設定:

    Get-ClientAccessServer CAS-3 -IncludeAlternateServiceAccountCredentialStatus | Format-List Name, AlternateServiceAccountConfiguration
    
  • 在執行用戶端存取服務的每部伺服器上重複步驟 2,以確認 ASA 認證的部署。

以下是當您執行上述 Get-ClientAccessServer 命令,但未設定先前的 ASA 認證時所顯示的輸出範例。

Name                                 : CAS-1
AlternateServiceAccountConfiguration : Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
                                       Previous: <Not set>
                                          ...

以下是當您執行上述的 Get-ClientAccessServer 命令,且先前已設定 ASA 認證時所顯示的輸出範例。 會傳回先前的 ASA 認證及其設定的日期和時間。

Name                                 : CAS-3
AlternateServiceAccountConfiguration : Latest: 1/12/2016 10:19:22 AM, tailspin\EXCH2016ASA$
                                       Previous: 7/15/2015 12:58:35 PM, tailspin\oldSharedServiceAccountName$
                                          ...

建立服務主體名稱 (SPN) 與 ASA 認證的關聯

重要事項

在您將該認證部署至至少一部 Exchange Server 之前,請勿將 SPN 與 ASA 認證建立關聯,如先前將 ASA 認證部署至執行用戶端存取服務的第一部 Exchange 伺服器中所述。 否則,您會遇到 Kerberos 驗證錯誤。

將SPN與 ASA 認證建立關聯之前,您必須確認目標SPN尚未與樹系中的不同帳戶相關聯。 ASA 認證必須是樹系中唯一與這些 SPN 相關聯的帳戶。 您可以從命令行執行 setspn 命令,確認樹系中沒有其他帳戶與 SPN 相關聯。

執行 setspn 命令,確認 SPN 尚未與樹系中的帳戶相關聯

  1. [開始]。 在 [ 搜尋] 方 塊中,輸入 命令提示字元,然後在結果清單中選取 [ 命令提示字元]

  2. 在命令提示字元處,輸入下列命令:

    setspn -F -Q <SPN>
    

    其中 <SPN> 是您想要與 ASA 認證建立關聯的SPN。 例如:

    setspn -F -Q http/mail.corp.tailspintoys.com
    

    命令應該不會傳回任何內容。 如果它傳回某個專案,則另一個帳戶已經與SPN相關聯。 針對您想要與 ASA 認證相關聯的每個 SPN 重複此步驟一次。

使用 setspn 命令建立 SPN 與 ASA 認證的關聯

  1. [開始]。 在 [ 搜尋] 方 塊中,輸入 命令提示字元,然後在結果清單中選取 [ 命令提示 字元]。

  2. 在命令提示字元處,輸入下列命令:

    setspn -S <SPN> <Account>$
    

    其中 <SPN> 是您想要與 ASA 認證相關聯的SPN,而 <Account> 是與 ASA 認證相關聯的帳戶。 例如:

    setspn -S http/mail.corp.tailspintoys.com tailspin\EXCH2016ASA$
    

    針對您想要與 ASA 認證相關聯的每個 SPN 執行此命令一次。

使用 setspn 命令,確認您已將 SPN 與 ASA 認證建立關聯

  1. [開始]。 在 [ 搜尋] 方 塊中,輸入 命令提示字元,然後在結果清單中選取 [ 命令提示 字元]。

  2. 在命令提示字元處,輸入下列命令:

    setspn -L <Account>$
    

    其中 <Account> 是與 ASA 認證相關聯的帳戶。 例如:

    setspn -L tailspin\EXCH2016ASA$
    

    您只需要執行此命令一次。

啟用 Outlook 用戶端的 Kerberos 驗證

  1. 在 Exchange 2016 或 Exchange 2019 伺服器上開啟 Exchange 管理命令介面。

  2. 若要啟用 Outlook Anywhere 用戶端的 Kerberos 驗證,請在執行用戶端存取服務的 Exchange 2016 或 Exchange 2019 伺服器上執行下列命令:

    Get-OutlookAnywhere -Server CAS-1 | Set-OutlookAnywhere -InternalClientAuthenticationMethod  Negotiate
    
  3. 若要透過 HTTP 用戶端啟用 MAPI 的 Kerberos 驗證,請在執行用戶端存取服務的 Exchange 2016 或 Exchange 2019 伺服器上執行下列命令:

    Get-MapiVirtualDirectory -Server CAS-1 | Set-MapiVirtualDirectory -IISAuthenticationMethods Ntlm,Negotiate
    

    在具有 Exchange Online 的混合式環境中,或如果您在內部使用 OAuth,請在執行用戶端存取服務的 Exchange 2016 或 Exchange 2019 伺服器上執行下列命令:

    $mapidir = Get-MapiVirtualDirectory -Server CAS-1
    $mapidir | Set-MapiVirtualDirectory -IISAuthenticationMethods ($mapidir.IISAuthenticationMethods +='Negotiate')
    
  4. 針對執行您要啟用 Kerberos 驗證之用戶端存取服務的每部 Exchange 2016 或 Exchange 2019 伺服器,重複步驟 2 和 3。

驗證 Exchange 用戶端 Kerberos 驗證

成功設定 Kerberos 和 ASA 認證之後,請確認用戶端可以成功驗證,如這些工作中所述。

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

Microsoft Exchange 服務主機服務 (執行用戶端存取服務之伺服器上的 MSExchangeServiceHost) 負責管理 ASA 認證。 如果 MSExchangeServiceHost 未執行,則無法進行 Kerberos 驗證。 根據預設,服務會設定為在計算機啟動時自動啟動。

確認已啟動 Microsoft Exchange 服務主機服務

  1. 按兩下 [開始],輸入 services.msc,然後從列表中選取 services.msc

  2. 在 [ 服務] 視窗中, 找出服務清單中Microsoft Exchange 服務主機 服務。

  3. 服務的狀態應該是 [正在 執行]。 如果狀態不是 [ 執行中],請以滑鼠右鍵按兩下服務,然後按兩下 [ 啟動]

從執行用戶端存取服務的伺服器驗證 Kerberos

當您在執行用戶端存取服務的每部伺服器上設定 ASA 認證時,您已執行 Set-ClientAccessServer Cmdlet。 執行此 Cmdlet 之後,您可以使用記錄來驗證成功的 Kerberos 連線。

使用 HttpProxy 記錄檔確認 Kerberos 正常運作

  1. 在文字編輯器中,流覽至 HttpProxy 記錄檔儲存所在的資料夾。 根據預設,記錄檔會儲存在下列資料夾中:

    %ExchangeInstallPath%\Logging\HttpProxy\RpcHttp

  2. 開啟最新的記錄檔,然後 尋找 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 認證

  1. 在 Exchange 2016 或 Exchange 2019 伺服器上開啟 Exchange 管理命令介面,然後執行下列命令:

    Set-ClientAccessServer CAS-1 -RemoveAlternateServiceAccountCredentials
    
  2. 雖然您不需要立即執行此動作,但最後應該重新啟動所有用戶端計算機,以從計算機清除 Kerberos 票證快取。