问题概览
由于 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 管理器 -> 右键 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 或 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)
解决方案
通过以上日志的内容进行搜索关键语句 [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. 故障讨论
- 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
0 条评论