共用方式為


設定負載平衡用戶端存取服務的 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是帳戶的名稱,而要修改的屬性是msDS-SupportedEncryptionTypes,其十進位值為 28,可啟用下列加密: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 網站,您的環境可能類似下圖中的網站:

多個 AD 網站。

根據上圖中內部 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 票證快取。