为 Exchange Server 配置 Kerberos 身份验证

Jacki

如果您遇到频繁的身份验证提示或 Outlook 和 Exchange Server 性能缓慢,启用 Kerberos 身份验证将解决该问题。此外,与 NTLM 身份验证相比,Kerberos 提供了更强的安全性和更好的性能。在本文中,您将了解如何为 Exchange Server 配置 Kerberos 身份验证。

Kerberos 身份验证是 Exchange Server 使用的一种安全高效的协议,用于验证用户身份,而无需重复提示密码。它在基于票证的系统上运行,用户进行一次身份验证并收到票证授予票证 (TGT)。然后,此 TGT 用于请求服务票证以访问 Exchange Server 服务,例如 Outlook 和基于 Web 的应用程序。

通过在 Exchange Server 中实施 Kerberos 身份验证,组织可以实现更安全、无缝且高效的身份验证过程,同时减少对 NTLM 或基本身份验证方法的依赖。

笔记:默认情况下,不启用 Exchange Server 的 Kerberos 身份验证。安装后需要进行其他设置,包括创建备用服务帐户 (ASA) 和正确配置服务主体名称 (SPN)。

许多管理员忽视了此配置,可能会错过 Kerberos 提供的安全性和效率优势。

如何在 Exchange Server 中配置 Kerberos 身份验证

Microsoft 建议使用 A 记录而不是 CNAME 记录。这可确保客户端根据共享名称而不是服务器 FQDN 正确发出 Kerberos 票证请求。

在我们的组织中,我们有以下用于 Exchange Server 设置的内部 DNS:

  • mail.exoip.com适用于 MAPI over HTTP 和 Outlook Anywhere
  • autodiscover.exoip.com用于自动发现服务

这就是它在 DNS 中的样子mail.exoip.com

这就是它在 DNS 中的样子autodiscover.exoip.com

根据上述 FQDN,我们必须将以下 SPN 与 ASA 凭据关联:

  • http/mail.exoip.com
  • http/autodiscover.exoip.com

我们将完成以下步骤并为 Exchange Server 设置 Kerberos 身份验证。

步骤 1:创建备用服务帐户 (ASA)

运行共享相同命名空间和 URL 的客户端访问服务的所有 Exchange 服务器必须使用相同的备用服务帐户凭据或(ASA 凭据)。一般来说,每个版本的 Exchange 的林都有一个帐户就足够了。

笔记:您可以共享来自 Exchange Server 2013 及更高版本的相同 ASA 凭据。因此,如果您想从 Exchange Server 2016 迁移到 Exchange Server 2019,则无需创建新的。

  1. 开始Active Directory 用户和计算机
  2. 前往组织单位Exchange Server 计算机对象所在的位置
  3. 右键单击它并选择特性
  1. 单击属性编辑器选项卡
  2. 双击专有名称属性
  3. 复制价值
  1. 以管理员身份启动 Exchange 命令行管理程序
  2. 创建一个名为 AD 计算机对象EXCH2019ASA并使用您在上一步中复制的 OU 值作为 -Path 参数
New-ADComputer -Name "EXCH2019ASA" -AccountPassword (Read-Host "Enter new password" -AsSecureString) -Description "Alternate Service Account credentials for Exchange" -Enabled:$True -SamAccountName "EXCH2019ASA" -Path "OU=Exchange Servers,OU=Servers,OU=Company,DC=exoip,DC=local"
  1. 填写AD计算机对象的新密码
  2. 启用 AES 256 加密以支持 Kerberos
Set-ADComputer "EXCH2019ASA" -add @{"msDS-SupportedEncryptionTypes"="28"}
  1. 验证AD计算机对象是否创建成功
Get-ADComputer "EXCH2019ASA"

出现输出。

DistinguishedName : CN=EXCH2019ASA,OU=Exchange Servers,OU=Servers,OU=Company,DC=exoip,DC=local
DNSHostName       :
Enabled           : True
Name              : EXCH2019ASA
ObjectClass       : computer
ObjectGUID        : 0779280f-c25b-431c-b37e-1bfc020ec72a
SamAccountName    : EXCH2019ASA$
SID               : S-1-5-21-813775357-375391071-1622867542-1150
UserPrincipalName :

您还可以在 Active Directory 用户和计算机中找到 AD 计算机对象。

步骤 2. 将更改复制到所有域控制器

创建帐户后,将更改复制到所有 AD DS 域控制器。

repadmin /syncall /ADPe

步骤 3. 将 ASA 凭证部署到第一台 Exchange 服务器

部署 ASA 凭证的唯一受支持的方法是使用RollAlternateServiceAcountPassword.ps1来自 Exchange Server 脚本文件夹的脚本。

  1. 以管理员身份运行 Exchange 命令行管理程序
  2. 将目录更改为 Exchange Server 脚本文件夹
cd $exscripts
  1. 将 ASA 凭据部署到运行客户端访问服务的第一个 Exchange Server
.RollAlternateServiceAccountPassword.ps1 -ToSpecificServer "EX01-2019.exoip.local" -GenerateNewPasswordFor exoipEXCH2019ASA$
  1. 当系统询问您是否要更改备用服务帐户的密码时,请键入并按进入

步骤 4. 将 ASA 凭证部署到其他 Exchange 服务器

如果您在组织中运行多个 Exchange Server,请运行以下命令。

推荐阅读:在 Exchange Server/Microsoft 365 上配置邮箱的电子邮件转发

笔记:对所有 Exchange 服务器执行此操作。只需替换 Exchange Server (EX02-2019) 目标即可。

.RollAlternateServiceAccountPassword.ps1 -ToSpecificServer "EX02-2019.exoip.local" -CopyFrom "EX01-2019.exoip.local"

步骤 5. 验证 ASA 凭证的部署

检查 Exchange Server 上的 ASA 凭据设置。

Get-ClientAccessServer "EX01-2019" -IncludeAlternateServiceAccountCredentialStatus | Format-List Name, AlternateServiceAccountConfiguration

出现输出。

Name                                 : EX01-2019
AlternateServiceAccountConfiguration : Latest: 3/4/2025 6:07:57 PM, exoipEXCH2019ASA$
                                       Previous: <Not set>

步骤 6. 验证 SPN 尚未与帐户关联

在将 SPN 与 ASA 凭证关联之前,您必须验证目标 SPN 尚未与林中的其他帐户关联。 ASA 凭据必须是林中与这些 SPN 关联的唯一帐户。

启动命令提示符并运行以下命令。

setspn -F -Q http/mail.exoip.com
setspn -F -Q http/autodiscover.exoip.com

命令应该返回未找到此类 SPN如下图所示。

Checking forest DC=exoip,DC=local

No such SPN found.

如果它返回某些内容,则表明另一个帐户已与该 SPN 关联。

步骤 7. 将服务主体名称 (SPN) 与 ASA 凭证关联

  1. 启动命令提示符
  2. 将 MAPI over HTTP 和 Outlook Anywhere SPN 关联到 ASA 凭据
setspn -S http/mail.exoip.com exoipEXCH2019ASA$

出现输出。

Checking domain DC=exoip,DC=local

Registering ServicePrincipalNames for CN=EXCH2019ASA,OU=Exchange Servers,OU=Servers,OU=Company,DC=exoip,DC=local
        http/mail.exoip.com
Updated object
  1. 将自动发现 SPN 关联到 ASA 凭证
setspn -S http/autodiscover.exoip.com exoipEXCH2019ASA$

出现输出。

Checking domain DC=exoip,DC=local

Registering ServicePrincipalNames for CN=EXCH2019ASA,OU=Exchange Servers,OU=Servers,OU=Company,DC=exoip,DC=local
        http/autodiscover.exoip.com
Updated object

步骤 8. 验证您是否将 SPN 与 ASA 凭证相关联

启动命令提示符并运行以下命令。您只需运行此命令一次。

setspn -L exoipEXCH2019ASA$

步骤 9. 为 Outlook 客户端启用 Kerberos 身份验证

  1. 以管理员身份启动 Exchange 命令行管理程序
  2. 为所有要启用 Kerberos 身份验证的 Exchange 服务器启用 Outlook Anywhere 客户端的 Kerberos 身份验证
Get-OutlookAnywhere -Server "EX01-2019" | Set-OutlookAnywhere -InternalClientAuthenticationMethod Negotiate
  1. 验证是否设置成功
Get-OutlookAnywhere -Server "EX01-2019" | Format-Table InternalClientAuthenticationMethod

出现输出。

InternalClientAuthenticationMethod
----------------------------------
                         Negotiate
  1. 为所有要启用 Kerberos 身份验证的 Exchange 服务器启用 MAPI over HTTP 客户端的 Kerberos 身份验证
Get-MapiVirtualDirectory -Server "EX01-2019" | Set-MapiVirtualDirectory -IISAuthenticationMethods Ntlm,Negotiate
  1. 验证是否设置成功
Get-MapiVirtualDirectory -Server "EX01-2019" | Format-List IISAuthenticationMethods

出现输出。

IISAuthenticationMethods : {Ntlm, Negotiate}

在具有 Exchange Online 的混合环境中或者如果您在内部使用 OAuth。

$mapidir = Get-MapiVirtualDirectory -Server "EX01-2019"
$mapidir | Set-MapiVirtualDirectory -IISAuthenticationMethods ($mapidir.IISAuthenticationMethods +='Negotiate')

步骤 10. 重新启动 Exchange Server 服务

重新启动Microsoft Exchange 服务主机服务和MS Exchange 自动发现应用程序池加快进程。在所有 Exchange 服务器上执行此操作。

Restart-Service MSExchangeServiceHost
Restart-WebAppPool -Name MSExchangeAutodiscoverAppPool

如果需要,您还可以重新启动所有 Exchange 服务器。

步骤 11. 验证 Exchange 客户端 Kerberos 身份验证

成功配置 Kerberos 和 ASA 凭证后,验证客户端是否可以成功进行身份验证。

  1. 开始前景在客户端机器上
  2. 开始命令提示符在客户端机器上
  3. 运行下面的命令
klist
  1. 验证服务器上是否出现两张票证HTTP/mail.exoip.comHTTP/autodiscover.exoip.com

就是这样!

结论

您学习了如何为 Exchange Server 配置 Kerberos 身份验证。 Kerberos 比 NTLM 更安全,并且它会给您的客户端、Exchange 服务器和域控制器带来更低的开销。在运行 Exchange Server 的所有组织中都必须进行此配置。

您喜欢这篇文章吗?您可能还喜欢逐步创建 DAG Exchange Server。不要忘记关注我们并分享这篇文章。