维护 Exchange Server OAuth 证书

一般信息

本文档介绍在不中断 Exchange 服务的情况下在当前服务过期之前轮换 Exchange Server 身份验证证书所需的步骤。

提示

还可以使用 MonitorExchangeAuthCertificate 脚本。 它执行自动轮换 OAuth 证书的必要步骤。 如果 OAuth 证书已过期,它还可以帮助你替换该证书。

Microsoft Exchange 服务器使用身份验证配置和身份验证证书,以使用开放授权 (OAuth) 协议标准启用服务器到服务器身份验证。 可以在以下文章中找到有关它的详细信息: 计划 Exchange 与 SharePoint 的集成以及 Skype for Business

身份验证证书也由多个 Exchange Server 安全功能使用。

安装第一个 Exchange 服务器期间,安装程序例程会生成一个具有友好名称 Microsoft Exchange Server Auth Certificate的自签名证书,然后将其添加到新的身份验证配置中。 此证书会自动复制到 Exchange 组织中的所有前端服务器。 Exchange 证书 servicelet 执行复制,这是该过程的一 MSExchangeServiceHost 部分。 如果向 Exchange 组织添加更多服务器,则 servicelet 负责将证书复制到已添加到组织的所有 Exchange 服务器。

配置为当前身份验证证书的证书可以通过运行以下 PowerShell (在 Exchange 命令行管理程序中执行) 查询:

(Get-AuthConfig).CurrentCertificateThumbprint | Get-ExchangeCertificate | Format-List Subject, Thumbprint, NotAfter, NotBefore

如果调用失败并出现以下警告,则表示服务器上缺少当前的身份验证证书。

A special Rpc error occurs on server <Servername>: The certificate with thumbprint <AuthCertificateThumbprint> was not found.

按照“如果当前证书已过期或缺失要执行哪些步骤”部分中提到的说明进行修复。

可以按如下所示查询配置为下一个身份验证证书的证书:

(Get-AuthConfig).NextCertificateThumbprint | Get-ExchangeCertificate | Format-List Subject, Thumbprint, NotAfter, NotBefore

如果调用失败并显示与当前身份验证证书相同的警告,则表示服务器上未配置或缺少下一个身份验证证书。

如果当前身份验证证书即将过期,请按照 “如何轮换 Exchange Server 身份验证证书” 中所述的说明进行操作。

如果当前证书已过期或缺失,请遵循哪些步骤?

在这种情况下,需要立即将旧的身份验证证书替换为新证书。 按照以下支持文章的解决方法部分中概述的说明操作: 如果 Exchange Server OAuth 证书过期,则无法登录到 Outlook 网页版或 EAC

如何轮换 Exchange Server 身份验证证书

请务必在活动身份验证证书过期之前将活动身份验证证书替换为新的证书。 这样做可确保顺利过渡到新证书,而不会中断 Exchange 服务。 可以按照以下步骤准备并暂存新的身份验证证书。

重要

请确保已安装最新的 Exchange Server 累积更新 (CU) ,因为它包含影响相应 Exchange 功能的修补程序。

  1. 通过运行以下命令生成新的身份验证证书:

    $newAuthCertificate = New-ExchangeCertificate -KeySize 2048 -PrivateKeyExportable $true -SubjectName "cn=Microsoft Exchange Server Auth Certificate" -FriendlyName "Microsoft Exchange Server Auth Certificate" -DomainName @()
    
  2. 不要覆盖现有默认 SMTP 证书 (键入“N”,然后按 enter) :

    Confirm
    Overwrite the existing default SMTP certificate?
    
    Current certificate: '<DefaultSMTPCertificateThumbprint>' (expires 12/30/2027 2:39:08 PM)
    Replace it with certificate: '<NewCertificateThumbprint>' (expires 1/5/2028 9:04:48 AM)
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [?] Help (default is "Y"): N
    
  3. 将身份验证证书配置为最早在 49 小时内成为新的活动证书:

    Set-AuthConfig -NewCertificateThumbprint $newAuthCertificate.Thumbprint -NewCertificateEffectiveDate (Get-Date).AddHours(49)
    

根据 Exchange 组织的规模,新的身份验证证书可能需要一些时间才能部署到所有 Exchange 服务器。 建议在新生成的身份验证证书变为活动状态之前至少计划 48 小时。 在大型 Exchange 环境中,可能需要更长的时间。

对身份验证证书的引用由 MSExchangeOWAAppPoolMSExchangeECPAppPool 应用程序池缓存。 可以回收这些应用程序池以刷新此引用。 为此,可以从提升的 PowerShell 窗口运行以下命令:

Restart-WebAppPool MSExchangeOWAAppPool
Restart-WebAppPool MSExchangeECPAppPool

Exchange AuthAdmin servicelet 也是该过程的 MSExchangeServiceHost 一部分,负责最终的身份验证证书发布过程。 如果重新启动服务, MSExchangeServiceHost 将立即执行 servicelet。 之后,它每 12 小时执行一次,如果检测到 NewCertificateEffectiveDate 已到达,则会发布新的身份验证证书,使其成为新的活动证书。

若要确保 AuthAdmin servicelet 可以启动,必须在 Exchange Server 安装在子域中且系统邮箱位于根域中时启用 AuthAdminReadSession 。 否则,AuthAdmin servicelet 无法启动。 如果 Exchange 服务器安装在所述的星座中,请运行以下 PowerShell cmdlet:

Set-OrganizationConfig -EnableAuthAdminReadSession:$true

可以通过运行以下 PowerShell cmdlet 来查询 AuthAdmin servicelet 的最后一个运行时:

[xml]$xml = Get-ExchangeDiagnosticInfo -Process "Microsoft.Exchange.ServiceHost"
$xml.Diagnostics.Components.AnchorApplication.AnchorServiceComponents.CacheScheduler.lastRunTime

每次运行 AuthAdmin servicelet 都会记录到以下目录: <ExchangeInstallPath>\Logging\AuthAdminLogs

成功完成身份验证证书轮换时,servicelet 会生成新的事件日志条目:

Log Name:      Application
Source:        MSExchange AuthAdmin
Date:          12/29/2022 5:56:13 AM
Event ID:      2014
Task Category: General
Level:         Information
Keywords:      Classic
User:          N/A
Description:   The current signing certificate for Exchange has been updated to certificate with thumbprint <NewExchangeCertificateThumbprint>.

常见问题解答

问题: 替换身份验证证书后,是否需要 (HCW) 重新运行混合配置向导?

答: 是的,强烈建议在替换活动身份验证证书后 (HCW) 运行混合配置向导。

问题: 如果其他 Active Directory (AD) 站点中的 Exchange 服务器上缺少新的身份验证证书,该怎么办?

答: 可以使用 Export-ExchangeCertificate cmdlet 导出证书,并通过另一 AD 站点中的服务器上的 Import-ExchangeCertificate 导入证书。 证书 servicelet 负责复制到位于 AD 站点内的其余 Exchange 服务器。