解析:Outlook弹框问题

**

前言:

**
最近刚好在一个技术群里看到有管理员咨询了一个Outlook客户端频繁弹密码的问题,大家给出的建议就是查服务器端的各种配置。从个人角度,我觉得这些建议是对的,但是并不能很好的帮助我们排障。
其实,Outlook弹身份验证密码框是一个挺麻烦的问题,主要是因为:

  • 弹框问题不太能够重现,可能需要好几天才出现一次;
  • 有时候是全公司大面积弹框,但是又是随机的,你永远不知道下一个会受到弹框问题的用户会是谁;
  • 弹框的时候很难抓到网咯包进行分析,即使抓到了,但是因为是加密连接,需要先解密才能看到更深入的原因。等等。

在微软做Support Engineer时,大家在接到这种case的时候普遍第一反应就是头很大。运气好点,用户自己就莫名其妙好了,运气不好一做就是个把月也是正常的。曾有一位同僚分享过一张处理此类issue的时候需要了解的问题清单,差不多有20多条,譬如单个用户,多个用户,Outlook版本等等。这些问题都是帮助我们工程师来定位问题的,究竟发生在客户端、传输过程中还是服务器端的,然后再从这个点上着手处理。

离开微软一年多了,许多知识点已经开始模糊了,所以打算在彻底遗忘之前,将相关的知识点梳理一遍。这些知识点都是来自微软的内部技术培训的,因为内部培训资料不可以外泄,所以我只能根据自己理解的整理下来。也乘此机会分享给大家,希望能对大家在着手处理此类问题的时候有所帮助。如果有什么不正确的地方,也请指出,我会进行修改。

可能有小伙伴看到过一种解决Outlook弹框问题的方法是修改注册表。但是其实这种方法是只适用于Outlook 2003,2007的。这种解决方法是通过

  • 增加允许Outlook验证失败的次数,或
  • 增加Outlook连接超时的时间

从而达到减少验证弹框的概率性。但是从Outlook 2013开始,代码里已经没有这些注册表了。所以这种修改注册表的方法已经不再适用了。

内容:

一、 Exchange 2013工作原理图
首先,我们先看一下Outlook如何与Exchange 2013建立连接的过程图。其实每次打开Outlook的时候都是会重现去刷一遍Autodiscover。但是2016使用的MAPI OVER HTTP走的是MSO stack,整个流程会有些不太一样,可惜,我离开MS的时候,未能有幸听到有人讲解过,所以无法在此分享了。
解析:Outlook弹框问题_第1张图片

二、简述Outlook认证
Outlook与服务器之间的连接有很多种,RPC、Http、Outlook Anywhere、Autodiscover、OAB、EWS等等。每个请求连接都是需要验证用户身份的,只有经过授权的用户才能够建立请求。所以Outlook弹身份验证框都是在建立请求的时候发生的。

验证的时候,会根据连接协议去找相应的服务器,然后建立相应的连接。RPC会去找Server name,transport type,Http会去找Http Url,建立请求以后就会需要去pick credential,将credential绑在RPC binding里面再去与服务器做negotiate。服务器会根据设置的支持的验证方式(NTLM、Kerberos等)对请求包内的验证信息去进行验证。如果成功了,就验证通过,如果失败了,就会返回。返回以后不是立即就失败的,它会根据代码函数中设定的选项和逻辑从OS缓存里找credential,然后一个个去验证一遍。

Outlook验证代码函数里获取credentials有以下4个选项:
(1). Return cached credentials
(2). Return MANUAL credentials from the keyring
(3). Return desktop credentials
(4). Prompt the user and return user-supplied credentials

直到代码内设定的步骤根据运行逻辑全部运行完毕,如果结果依然是验证失败,Outlook就会对用户弹出验证框请求用户手动输入身份认证信息。

所以,Outlook弹密码框一定是之前某个步骤里有请求验证失败才会导致的。

验证是由OS里的credential manager管理的,但是存放在Windows里的credentials是跨进程使用的,并不是一个应用单独对应一个credential。举个例子,用户打开Lync的时候,Lync应用需要credential,就会从Windows里去取,取的时候会先将这个credential临时锁定,验证完成了再释放锁定进程状态。如果此时Outlook也需要取credential,就只能先排队等着。所以,我们发现有时候用户遇到的弹密码框问题不一定是密码不正确,而是Outlook从OS缓存里一直取不到密码,被其他进程一直抢占锁死了。

三、Outlook弹框原因小结
Outlook弹验证框的原因总结起来有4个方向:

  1. Outlook本身密码的问题
    (1). 用户勾选了"always prompt for logon credentials",这样就会经常弹框。
    (2). 用户的密码在服务器端做了修改,服务器也会要求重新做验证。
    (3). Windows里错误的用户名/密码缓存导致了反复需要验证,可以通过清除凭证管理来解决。
  2. 网络问题
    (1). 在不稳定的网络环境中,或者出现网络切换(有线无线切换)时,由于Outlook 丢失了连接,它就会要求客户重新输入验证。
    (2). 当Outlook运行时电脑进入了sleep或者hibernation模式,导致Outlook网络连接出现中断,当再次恢复时会需要用户重新输入验证。
    (3). 当outlook从快速网络切换到慢速网络时,导致MAPI向Https切换,也会要求重新验证。
  3. 第三方Outlook插件导致的弹框问题,可以使用outlook /safe启用安全模式来排查。
  4. 服务器验证失败
    (1). 前端CAS的负载均衡导致重复验证弹框(这个可以通过直连一台CAS来缩小问题范围)。
    (2). Exchange服务器出现连接负载过高时,其会拒绝新的连接或者验证,这个时候也会出现弹框现象。
    (3). Exchange服务器出现NTLM验证瓶颈时:
    · Exchange相关的服务(AutoDiscover, EWS, OAB, OA)拒绝请求
    · 当IIS验证方式不符导致验证失败,(如IIS只支持basic认证,不支持NTLM时验证失败)

四、故障排查思路及方向

客户端

针对客户端,以下1-4个步骤是一定要去做的:

  1. 清理Windows内的凭证。
    打开“控制面版” > "凭据管理器”
  2. Outlook安全模式,排除第三方插件引起的问题。
    打开“运行”,输入Outlook.exe /safe,然后点“确定”
    解析:Outlook弹框问题_第2张图片
  3. SARA Tool
    OffCAT工具已经融入到了SARA Tool内了,具体可以查看这篇文档:
    How to scan Outlook by using the Microsoft Support and Recovery Assistant
  4. 查看问题发生时候的Outlook连接状态
    按住 CTRL键,并单击通知区域中的Microsoft Outlook图标,然后点击“连接状态”。
    解析:Outlook弹框问题_第3张图片
    在这里我们能看到当前的Outlook连接状态,可以看出是连接到directory、GC、Mail还是public folder的时候发生了问题。具体内容可以查看以下文档:(这篇文档请一定要看英文版,中文版内的内容有缺少)
    Description of the Connection Status dialog in Outlook
    如下图,可以看到我的账户因为在Exchange Directory里已经被移除了,所以就连接不上了。
    解析:Outlook弹框问题_第4张图片
    当然,如果问题比较频发重现,可以先抓个网咯包先分析一下。但是这个就有点随缘份了。
    如果以上步骤依然无法帮助你解决和找到问题的点,那就需要抓ETL日志了,因为ETL日志是需要用微软内部的Timber工具转换以后才能分析的,你只能交给微软的工程师去做啦。(纯On-premise环境的客户就要花钱啦!)
    开启的方法请查看以下文档:
    How to enable global and advanced logging for Microsoft Outlook

服务器端

在出现用户大面积发生弹框的时候一定要注意检查以下1-4点:

  1. 检查CAS服务器是否都处于正常运行的状态。

  2. AD上是否有Event ID 2080的事件日志,Netlogon服务是否正常工作。
    Event ID 2080 from MSExchangeDSAccess

  3. Exchange服务器的默认配置是否被更改过,如AutoDiscover, EWS, OAB, OA URL/Authentication。

  4. MaxConcurrentAPI
    国内绝大多数公司都是没有在Exchange上配置Kerberos认证的,所以Exchange的认证走的都是NTLM。当NTLM验证达到了瓶颈时就会出现弹框问题。具体可以查看以下几篇文档:
    Windows: Configuring MaxConcurrentAPI for NTLM Pass-Through Authentication
    Easy Checking for MaxConcurrentApi Problems
    间歇性地提示输入凭据或连接到身份验证服务时遇到超时
    如何通过使用 MaxConcurrentApi 设置,性能调优的 NTLM 身份验证

  5. RCA、IIS Log
    RPC Client Access (RCA) Logs路径:%ExchangeInstallPath%\Logging\RpcClientAccess
    IIS默认路径:%SystemDrive%\inetpub\logs\LogFiles

  6. Load Balance设备将请求破坏或阻止了(尤其是外网弹框内网不弹框的情况下)

  7. 如果用户开启了Kerberos验证的,可以查看Kerberos日志

因为Outlook验证是比较复杂的,针对不同的问题进行的解决方法也是不同的,以上步骤希望能够帮助到管理员快速的定点到问题的故障点。

你可能感兴趣的:(Office,Exchange,exchange,outlook)