问题概览

由于 Exchange 邮箱证书过期,签发新证书后在客户端生效后同时也就出现无法登录 OWA 和 ECP 并提示 500 错误码以及 EMS 无法连接远程服务器的问题。

  • OWA => Outlook Web App
  • ECP => Exchange Control Panel
  • EMS => Exchange Management Shell

思路梳理

第一步:目前 Exchange Management Shell 无法连接到远程服务器 mail.hxx.tt,所以无法使用 Exchange Management Shell 通过命令来消除故障,首要步骤即是解决 Exchange Management Shell 无法连接到远程服务器的问题;
第二步:通过 Exchange Management Shell 来解决无法登录 owa 和 ecp 的故障。

解决步骤

解决 EMS 无法连接

问题表现

Exchange Management Shell 无法连接到远程服务器,如下提示:

详细信息: 正在连接到 mail.hxx.tt。
New-PSSession : [mail.hxx.tt] 连接到远程服务器 mail.hxx.tt 失败,并显示以下错误消息: [ClientAccessServer=MAILHXXTT,BackEndServer=mail.hxx.tt,RequestId=5dd05b1d-ae54-4b9e-8e39-21f99ea489a4,TimeStamp=2023/4/10 14:15:58] [FailureCategory=Cafe-SendFailure]  有关详细信息,请参阅 about_Remote_Tro
ubleshooting 帮助主题。
所在位置 行:1 字符: 1
+ New-PSSession -ConnectionURI "$connectionUri" -ConfigurationName Microsoft.Excha ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException
    + FullyQualifiedErrorId : -2144108477,PSSessionOpenFailed

解决方案

查询

通过网络搜索以下报错失败分类关键语句:

Cafe-SendFailurefailurecategory=cafe-sendfailure exchange 2013

获取到很多关于该故障的报错解决方案,最终解决办法如下:

简述

即在新签发的证书后,Exchange Back End 不会自动绑定新证书,在 IIS 站点绑定正确的证书即可。

流程

打开 IIS 管理器 -> 右键 Exchange Back End -> 编辑绑定 -> 选择类型为 https 的项目 -> 点击右侧的【编辑】-> 在【SSL 证书】位置选择最新签发的证书 -> 点击【确定】,关闭并重新打开 Exchange Management Shell 后即可正常连接到远程服务器。

1. 操作演示
2. 微软文档

解决 OWA 和 ECP 无法登录

前置重点

在成功签发证书后,可能会遇到登录 OWA 页面时出现 500 错误。此时,只需满足以下两点,并耐心等待自成功签发证书起 8 小时,即可恢复正常:

  1. 重启并检查邮件客户端,确保其能够正常与 Exchange 服务器通信并完成收发邮件。
  2. 通过浏览器访问 OWA 页面,检查当前证书的指纹编码是否与最新签发的证书相同。

经由何星星的实测,当天上午 10:30 完成证书签发,Outlook 客户端正常通信,但 OWA 登录异常,日志报错如下 问题表现。期间按此 重启服务 并无效果。后续通过查阅日志文件发现,当天晚上 19:25 服务开始逐渐恢复,不再继续报错。通过浏览器登录 OWA 页面证实已恢复正常。

通常以上方案即已作用于最终方案。如果通过以上方法且在预计的时间内没有恢复,以下内容将用于更多复杂情况下参考。

问题表现

登录 owa 或 ecp 时,可以正常打开登录界面,但是输入密码后登录提示 “ :-( 发生错误 | 很抱歉,我们当前无法获取该信息。请稍后重试。如果问题仍然存在,请与支持人员联系。”,链接并带有 500 状态错误码 https://mail.hxx.tt/owa/auth/errorFE.aspx?httpCode=500,同时附带 X-ClientIdX-FEServer 以及 Date 信息。

以上前端显示的信息无法帮助我们判断问题根源,所以需要从 Exchange 服务器端的事件查看器来查看有用的帮助以获得更详细的报错信息。

通过 Exchange 服务器端的事件查看器中看到报错日志提示以下内容:

[Owa] An internal server error occurred. The unhandled exception was: Microsoft.Exchange.Diagnostics.ExAssertException: ASSERT: HMACProvider.GetCertificates:protectionCertificates.Length<1
   在 Microsoft.Exchange.Diagnostics.ExAssert.AssertInternal(String formatString, Object[] parameters)
   在 Microsoft.Exchange.Clients.Common.HmacProvider.GetCertificates()
   在 Microsoft.Exchange.Clients.Common.HmacProvider.GetHmacProvider()
   在 Microsoft.Exchange.Clients.Common.HmacProvider.ComputeHmac(Byte[][] messageArrays)
   在 Microsoft.Exchange.HttpProxy.FbaModule.SetCadataCookies(HttpApplication httpApplication)
   在 Microsoft.Exchange.HttpProxy.FbaFormPostProxyRequestHandler.HandleFbaFormPost(BackEndServer backEndServer)
   在 Microsoft.Exchange.HttpProxy.FbaFormPostProxyRequestHandler.ShouldContinueProxy()
   在 Microsoft.Exchange.HttpProxy.ProxyRequestHandler.BeginProxyRequestOrRecalculate()
   在 Microsoft.Exchange.HttpProxy.ProxyRequestHandler.InternalOnCalculateTargetBackEndCompleted(TargetCalculationCallbackBeacon beacon)
   在 Microsoft.Exchange.HttpProxy.ProxyRequestHandler.<>c__DisplayClass3f.<OnCalculateTargetBackEndCompleted>b__3e()
   在 Microsoft.Exchange.Common.IL.ILUtil.DoTryFilterCatch(TryDelegate tryDelegate, FilterDelegate filterDelegate, CatchDelegate catchDelegate)

解决方案

通过日志的内容进行搜索以下关键语句:

HMACProvider.GetCertificates:protectionCertificates.Length<1

同样我们得到很多关于该故障的报错的解决方案,最终解决办法如下:

原因

如果 Exchange Server 公开身份验证 (OAuth) 证书已过期、不存在或未正确配置,则会出现此问题,在 Exchange Management Shell 中执行以下命令查看当前所有证书详情:

Get-ExchangeCertificate
方案

要查看现有 OAuth 证书的状态,请在 Exchange Management Shell 中运行以下命令:

(Get-AuthConfig).CurrentCertificateThumbprint | Get-ExchangeCertificate | Format-List

如果命令返回正常且表示证书有效,请跳转到此处:附录:启用当前证书

如果命令返回错误或证书已过期,请使用以下步骤新建 OAuth 证书并将其部署到 Exchange Server:

1. 新建证书

运行以下命令新建 OAuth 证书:

New-ExchangeCertificate -KeySize 2048 -PrivateKeyExportable $true -SubjectName "cn=Microsoft Exchange Server Auth Certificate" -FriendlyName "Microsoft Exchange Server Auth Certificate" -DomainName @()

将提示替换原有证书并要求确认。

2. 验证证书

设置服务器身份验证的新证书。 为此,请运行以下命令:

Set-AuthConfig -NewCertificateThumbprint < 证书指纹编码序列> -NewCertificateEffectiveDate (Get-Date)

注意:以上证书指纹编码序列需要替换为本地实际编码,这在以上方案的 OAuth 证书的状态命令获得,同时,执行命令后可能需要等待 48 小时后生效,何星星在实际方案中并没有应用当前操作的新证书配置,而是使用原有证书的指纹编码序列来配置。

Set-AuthConfig -PublishCertificate
Set-AuthConfig -ClearPreviousCertificate
3. 重启服务

打开系统服务,重启 Microsoft Exchange Service Host 服务。

4. 回收 EAC 程序

运行 IISReset 命令重启 IIS 或运行以下命令(在提升模式下)以回收 Outlook 网页版和 EAC 应用程序池:

Restart-WebAppPool MSExchangeOWAAppPool
Restart-WebAppPool MSExchangeECPAppPool
5. 重启 IIS
IISReset
附录:启用当前证书

如果你在前端页面可以正常登录 OWA 或 ECP(或是不正常),通过浏览器查看证书与实际以上使用证书信息和指纹不符,这个问题可能是由于在这之前没有正确启用对应的证书原因所导致。

请执行以下启用证书命令并紧追执行 重启服务,完成后请参考 前置重点

Enable-ExchangeCertificate -Thumbprint < 证书指纹编码序列> -Services POP,IMAP,SMTP,IIS

参考文档

1. 故障讨论
2. 同样问题
3. 解决方案

补充备忘


友情提示:本站所有文章,如无特殊说明或标注,均为何星星原创发布。与此同时,趋于近年来本站的文章内容频繁被他站盗用与机器采集,现已全局禁用网站文字内容操作,了解详情或转载文章请 点此 继续!

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注