为 Exchange Server 配置 Kerberos 身份验证
如果您遇到频繁的身份验证提示或 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,则无需创建新的。
- 开始Active Directory 用户和计算机
- 前往组织单位Exchange Server 计算机对象所在的位置
- 右键单击它并选择特性
- 单击属性编辑器选项卡
- 双击专有名称属性
- 复制价值
- 以管理员身份启动 Exchange 命令行管理程序
- 创建一个名为 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"
- 填写AD计算机对象的新密码
- 启用 AES 256 加密以支持 Kerberos
Set-ADComputer "EXCH2019ASA" -add @{"msDS-SupportedEncryptionTypes"="28"}
- 验证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 脚本文件夹的脚本。
- 以管理员身份运行 Exchange 命令行管理程序
- 将目录更改为 Exchange Server 脚本文件夹
cd $exscripts
- 将 ASA 凭据部署到运行客户端访问服务的第一个 Exchange Server
.RollAlternateServiceAccountPassword.ps1 -ToSpecificServer "EX01-2019.exoip.local" -GenerateNewPasswordFor exoipEXCH2019ASA$
- 当系统询问您是否要更改备用服务帐户的密码时,请键入是并按进入
步骤 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 凭证关联
- 启动命令提示符
- 将 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
- 将自动发现 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 身份验证
- 以管理员身份启动 Exchange 命令行管理程序
- 为所有要启用 Kerberos 身份验证的 Exchange 服务器启用 Outlook Anywhere 客户端的 Kerberos 身份验证
Get-OutlookAnywhere -Server "EX01-2019" | Set-OutlookAnywhere -InternalClientAuthenticationMethod Negotiate
- 验证是否设置成功
Get-OutlookAnywhere -Server "EX01-2019" | Format-Table InternalClientAuthenticationMethod
出现输出。
InternalClientAuthenticationMethod
----------------------------------
Negotiate
- 为所有要启用 Kerberos 身份验证的 Exchange 服务器启用 MAPI over HTTP 客户端的 Kerberos 身份验证
Get-MapiVirtualDirectory -Server "EX01-2019" | Set-MapiVirtualDirectory -IISAuthenticationMethods Ntlm,Negotiate
- 验证是否设置成功
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 凭证后,验证客户端是否可以成功进行身份验证。
- 开始前景在客户端机器上
- 开始命令提示符在客户端机器上
- 运行下面的命令
klist
- 验证服务器上是否出现两张票证HTTP/mail.exoip.com和HTTP/autodiscover.exoip.com
就是这样!
结论
您学习了如何为 Exchange Server 配置 Kerberos 身份验证。 Kerberos 比 NTLM 更安全,并且它会给您的客户端、Exchange 服务器和域控制器带来更低的开销。在运行 Exchange Server 的所有组织中都必须进行此配置。
您喜欢这篇文章吗?您可能还喜欢逐步创建 DAG Exchange Server。不要忘记关注我们并分享这篇文章。
