Office 365 Outlook 自动发现使用反向代理 - 糟糕的方法?

Office 365 Outlook 自动发现使用反向代理 - 糟糕的方法?

背景。Outlook 自动发现尝试找出配置有一定的顺序,并且它在某种程度上是不可改变的,至少对于拥有 BYOD 设备的 Office 365 用户来说是这样:

  1. 域名顶点https://example.com:443/Autodiscover/Autodiscover.xml。由于这通常是托管在其他地方的公共网站,因此对于大多数人来说这似乎是不必要的步骤。
  2. https://autodiscover.example.com:443/Autodiscover/Autodiscover.xml是一种更合理的选择。不幸的是,截至 2019 年 9 月,微软搞砸了这一点:对于 Office 365 用户,这被指示为CNAME autodiscover.outlook.com.,但...

    $ curl -vvv https://autodiscover.outlook.com:443/Autodiscover/Autodiscover.xml
    *   Trying 40.101.49.88...
    * TCP_NODELAY set
    * connect to 40.101.49.88 port 443 failed: Connection refused
    *   Trying 40.101.65.216...
    * TCP_NODELAY set
    * connect to 40.101.65.216 port 443 failed: Connection refused
    *   Trying 40.101.126.120...
    * TCP_NODELAY set
    * connect to 40.101.126.120 port 443 failed: Connection refused
    *   Trying 40.101.126.216...
    * TCP_NODELAY set
    * connect to 40.101.126.216 port 443 failed: Connection refused
    *   Trying 2603:1026:207:15::8...
    * TCP_NODELAY set
    * connect to 2603:1026:207:15::8 port 443 failed: Connection refused
    *   Trying 2603:1026:207:109::8...
    . . .
    
  3. 回退到 HTTP 重定向方法,这是唯一有效的方法。

    这次http://autodiscover.example.com:80/Autodiscover/Autodiscover.xml,配置为CNAME autodiscover.outlook.com.,以重定向到工作站点作为响应。

    Location: https://autodiscover-s.outlook.com/Autodiscover/Autodiscover.xml
    

    在大多数情况下,这个服务都是正确的,尽管对于新的应用程序密码来说,排队似乎很长。然而,这需要大量的请求和额外的时间。(此外,这使得调试某些版本的 Outlook 目前根本无法连接到 Office 365 而必须在尝试之前升级变得更加困难……)

可能的解决方案使此过程更快的方法是添加域顶点处的反向代理,指向正在运行的 Office 365 自动发现站点。例如,使用 Apache,这就像启用模块并向a2enmod proxy_http添加简单配置一样简单VirtualHost

# Office 365 Autodiscover Hack 20190918
SSLProxyEngine on
ProxyPass "/Autodiscover/"  "https://autodiscover-s.outlook.com/Autodiscover/"
ProxyPassReverse "/Autodiscover/"  "https://autodiscover-s.outlook.com/Autodiscover/"

根据Microsoft 远程连接分析器对 Outlook 自动发现进行测试,这似乎工作得很好,并且它似乎也使 Outlook 自动发现在实际的 Outlook 安装中速度更快。

由于这只是一个黑客行为,而不是任何地方记录的实际解决方案,我的问题是:这种方法是否会产生任何可能的后果?你能想到的吗?

例如,该服务是否autodiscover-s.outlook.com为静态主机名,或者它是否曾提供其他重定向?如果此代理产生意外结果,Outlook 是否只会继续执行步骤 2 和 3?

答案1

Office 365 和 Exchange Online 环境与 Exchange 本地环境具有不同的特点。在 Exchange 本地环境中,组织使用专用的面向公众的 Exchange 服务器,该服务器作为组织公共域名的“代表”。而“云环境”(Office 365)无法提供这种类型的“专用 Exchange 服务器”,该服务器将代表 Office 365 租户的特定域名。请参阅此文章: https://o365info.com/autodiscover-flow-in-an-office-365-environment-part-1-of-3-part-29-of-36/

答案2

是的,添加反向代理可以正常工作,并防止尝试未加密的连接http://autodiscover.example.com:80/Autodiscover/Autodiscover.xml。但是,A71 注意到,Outlook 还遵循阶段 #1 和 #2 中 HTTPS URI 的 HTTP 重定向,而省略了纯 HTTP 阶段 #3。

从安全角度来看,重定向可能更好,因为 Office 365 的自动发现需要身份验证。使用反向代理,此身份验证将不必要地通过 Web 服务器进行。

此外,由于始终首先请求来自域顶级 Web 服务器的 URI,因此受损的内容管理系统(CMS)可能会劫持这些并窃取用户密码。因此,在 Web 服务器级别配置此项可防止任何 Web 应用程序获取这些请求。

因此,Office 365 自动发现变得更快、更安全。

阿帕奇:

# Office 365 Autodiscover Redirect
Redirect permanent "/Autodiscover/" "https://autodiscover-s.outlook.com/Autodiscover/"

Nginx的:

# Office 365 Autodiscover Redirect
location /Autodiscover/ {
    return 301 https://autodiscover-s.outlook.com$request_uri;
}

相关内容