问题概览

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

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

解决 OWA 和 ECP 无法登录

问题表现

登录 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)

解决方案

通过以上日志的内容进行搜索关键语句 [Owa] An internal server error occurred. The unhandled exception was: Microsoft.Exchange.Diagnostics.ExAssertException: ASSERT: 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. 解决方案

补充备忘

https://www.jianshu.com/p/77b72d99eb14


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

0 条评论

发表回复

Avatar placeholder

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