问题概览
由于 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-SendFailure 或 failurecategory=cafe-sendfailure exchange 2013
获取到很多关于该故障的报错解决方案,最终解决办法如下:
简述
即在新签发的证书后,Exchange Back End
不会自动绑定新证书,在 IIS 站点绑定正确的证书即可。
流程
打开 IIS 管理器 -> 右键 Exchange Back End
-> 编辑绑定 -> 选择类型为 https
的项目 -> 点击右侧的【编辑】-> 在【SSL 证书】位置选择最新签发的证书 -> 点击【确定】,关闭并重新打开 Exchange Management Shell
后即可正常连接到远程服务器。
1. 操作演示
- https://markgossa.com/2015/11/exchange-2013-2016-connecting-to-remote-server-failed-with-the-following-error-message.html
- https://www.experts-exchange.com/questions/29131456/EXCHANGE-SERVER-ISSUE-PLEASE-HELP.html
2. 微软文档
解决 OWA 和 ECP 无法登录
前置重点
在成功签发证书后,可能会遇到登录 OWA 页面时出现 500 错误。此时,只需满足以下两点,并耐心等待自成功签发证书起 8 小时,即可恢复正常:
- 重启并检查邮件客户端,确保其能够正常与 Exchange 服务器通信并完成收发邮件。
- 通过浏览器访问 OWA 页面,检查当前证书的指纹编码是否与最新签发的证书相同。
经由何星星的实测,当天上午 10:30 完成证书签发,Outlook 客户端正常通信,但 OWA 登录异常,日志报错如下 问题表现。期间按此 重启服务 并无效果。后续通过查阅日志文件发现,当天晚上 19:25 服务开始逐渐恢复,不再继续报错。通过浏览器登录 OWA 页面证实已恢复正常。
通常以上方案即已作用于最终方案。如果通过以上方法且在预计的时间内没有恢复,以下内容将用于更多复杂情况下参考。
问题表现
登录 owa 或 ecp 时,可以正常打开登录界面,但是输入密码后登录提示 “ :-( 发生错误 | 很抱歉,我们当前无法获取该信息。请稍后重试。如果问题仍然存在,请与支持人员联系。
”,链接并带有 500 状态错误码 https://mail.hxx.tt/owa/auth/errorFE.aspx?httpCode=500
,同时附带 X-ClientId
和 X-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. 故障讨论
- https://techcommunity.microsoft.com/t5/exchange/exchange-server-error-in-owa-application/m-p/2546400
- https://community.spiceworks.com/topic/2341174-unable-to-login-eac-and-owa
2. 同样问题
- https://www.cloudshark.nl/blog/2021/09/04/exchange-2016-owa-ecp-issue-assert-hmacprovider-getcertificatesprotectioncertificates-length/
- https://lindsayleeds.medium.com/exchange-2016-owa-fails-to-login-2015afe4a11d
3. 解决方案
补充备忘
- https://www.jianshu.com/p/77b72d99eb14
- https://community.spiceworks.com/t/unable-to-login-eac-and-owa/818748
- https://techcommunity.microsoft.com/t5/exchange/exchange-server-error-in-owa-application/m-p/2546400
- https://learn.microsoft.com/en-us/answers/questions/1095344/exchange-2016-ecp-hmacprovider-getcertificates-pro
- https://micoolpaul.com/2021/08/03/microsoft-exchange-server-2010-2013-2016-2019-unable-to-connect-to-owa-ecp-protectioncertificates-length1
0 条评论