利用 Server 2012 R2 Web Application Proxy 在外网中安全发布 Exchange 2010 OWA

大家好,我是 Jesse Esquivel。本文主要介绍利用 Server 2012 R2 Web Application Proxy (WAP)发布 Exchange 2010。在开始之前,先来谈谈反向代理功能,以及微软是如何使用这项技术的。大家都知道,Threat Management Gateway(TMG)和 Unified Access Gateway(UAG)是有使用寿命的。因此,人们将视线转向了互联网信息服务 Application Request Routing(ARR)。ARR 是可用于发布网站的 Web 场扩展,但是它无法预认证。ARR 中没有 PowerShell 命令,没有高可用性,没有持续投资的必要。目前 Windows Server 2012 R2 中有一种可作为服务器角色的产品,即 WAP。WAP 是基于 ADFS 的反向代理解决方案,可发布声明感知和非声明感知的 Web 应用程序,专门用于当前和将来的 Web 协议。它了解 ADFS、Claim、OAUTH,也可以执行协议转换和 Kerberos 约束委派。特别是(适用于本文),对于在外网中发布的已启用 Kerberos 的应用程序,要求仅使用智能卡进行身份验证,这需要协议转换和 KCD。TMG 和 UAG 中也有类似的功能集。这意味着,WAP 可以通过使用智能卡身份验证发布声明感知和非声明感知的 Web 应用程序。

虽然本文只是将发布 Exchange 2010 作为一个例子,但是任何Kerberos 感知的Web 应用程序都可以按照这种方法,使用 WAP 进行发布。

目前,出于各种原因,很多用户都会评估可发布 Exchange 或其他 Web 应用程序的反向代理产品。有些客户第一次移除 Internet Security and Acceleration (ISA)服务器。有些客户第一次发布 Web 应用程序,并且希望其具有无限期的使用寿命。有些客户可能想要移除 TMG 或 UAG,以防止这些产品不再适用。不管是什么原因,WAP 都是一项新的微软解决方案,能够为声明感知和非声明感知的 Web 应用程序进行反向代理,提供基于表单和证书的预身份验证,并且通过身份验证。微软致力于开发 WAP,并计划强化它的演变和开发功能,WAP 对于微软来说是发布应用程序的战略选择。如果您听过说 WAP 或正在考虑使用它,那么是时候开始评估了。

本文所讨论的 Outlook Web App(OWA)主要针对的是那些必须使用智能卡身份验证的用户,他们从外部访问 OWA 或其他Kerberos 感知的 Web 应用程序。今天的主要内容是一个较高层次的概述,通过 Server 2012 R2 中的一个新服务器角色 Kerberos Constrained Delegation(KCD),使用智能卡身份验证来安全地发布 Exchange 2010 OWA。为了安全发布 OWA,我们将使用 Server 2012 R2 Web Application Proxy(WAP)和 Server 2012 R2 Active Directory Federation Services (ADFS 3.0)。在利用 WAP 发布的过程中,ADFS 是一个硬需求。WAP 和 Server 2012 R2 ADFS 可以使用双重智能卡身份验证,为 OWA 提供无缝且安全的外网发布解决方案。

概述

下图是一个基本的发布设置概况。WAP 位于 DMZ 架构、ADFS 3.0、域控制器和 Exchange 2010 Client Access Server (CAS)阵列中。所有服务器都加入了相同的 Active Directory 域。

先决条件

这里只快速列出几点(不是详细列表)。Server 2012 R2 ADFS (3.0)是必需的。

DNS

  • 创建用于安全令牌服务的外部 DNS 记录,它在 WAP 中作为 ADFS 代理服务运行。ADFS 代理服务可集成到 WAP 服务器角色中。
  • 外部 DNS 记录应解析到外部防火墙,并将流量转至 WAP 服务器(作为 ADFS 代理)中。
  • 创建用于安全令牌服务的内部 DNS 记录,并在 ADFS 服务器上运行,以便内部客户端能够解析联合服务。
  • 如果内部域的 DNS 名称与联合服务的外部 DNS 记录不匹配,则需要使用一个分区 DNS 设置,本文不做详细介绍。
  • 如果不需要使用内部 ADFS,那么可以使用 WAP 服务器中的主机文件条目,它具有联合服务名称和内部 ADFS 服务器 IP。

WAP

  • WAP 服务器必须加入到受 Exchange CAS 信任的域中,只要跨林 KCD 可启用,该域就可以属于不同的林。
  • WAP 服务器必须通过 OCSP 或 CRL 获取客户端证书吊销信息,两者端口都为 80,请据此修改防火墙规则。
  • 内部通信--WAP 服务器必须与域中的 DC、CAS Array 和 ADFS 通信,因此应允许与它们进行通信,或者限制相应的端口。
  • 发布 Web 应用程序时,WAP 在端口 433(SSL)上侦听进入的客户端连接。
  • 如果在 Exchange 2010 (或其他发布的 Web 应用程序)中需要智能卡身份验证, WAP 还可以侦听 TLS 客户端证书身份验证 49443 端口。这两个端口在外部防火墙中必须保持打开或转发。

证书

  • OWA URL 需要 SSL 证书。由于用户通过点击 WAP 来获取网站服务,因此需要将 OWA SSL 证书导入到 WAP 中。
  • 还需要为联合身份验证服务提供 SSL 证书。该证书有可导出的密钥,因为它将被导入至 WAP 中作为 ADFS 代理组件,并与 WAP 角色集成。
  • OWA 和联合身份验证服务证书应受到 Internet 客户端的信任,所以通常会从公共证书颁发机构为它们获取 SSL 证书。

· 注意: Server 2012 R2 ADFS 3.0 不支持使用 CNG 密钥,所以必须通过 legacy key 创建证书签名请求。

安装和配置

先来安装 ADFS 3.0,因为它是 WAP 的硬性要求。ADFS 3.0 的安装可以点击这里。该解决方案的联合身份验证服务名称为 sts.treyresearch.com

注意:  第一次配置 ADFS 3.0 时,联合身份验证服务的名称不能与 ADFS 服务器的 DNS 名称相同。本例使用的是:

·联合身份验证服务名称: sts.treyresearch.com

· ADFS服务器名称: adfs1.treyresearch.com

现在安装和配置 ADFS。由于 Exchange 2010 是一个非声明感知的应用程序,并且我们使用的是智能卡身份验证/KCD,所以应创建 Non Claims Aware Relying Party Trust。打开 ADFS Management MMC 管理单元。在左侧窗格,右键单击Relying Party Trust,单击“Add Non-claims-Aware Relying Party Trust…”

image

在 Welcome 屏幕上单击 Start,然后在 Specify Display Name 屏幕输入信任的显示名称。在 Configure Identifiers 屏幕输入至少一个信任标识符,可以使用容易识别的或与此相关的。本例中使用的是例子中的 URL 并交换了 DNS 名称,以匹配 Mail URL。这样,当查看信任标识符(现在或排除故障后)时,就会知道这是 OWA 非声明感知的 Relying Party Trust 的标识符。单击Add,然后单击Next

image

在“Configure Multifactor Authentication Now?”屏幕单击“ I do not want to configure multi-factor authentication settings… ,然后单击Next

image

在 Ready to Add Trust 屏幕单击Next。在 Completion 屏幕选中以下复选框并单击Close

image

在 Issuance Authorization Rules 屏幕下方单击Add Rule

image

在 Rule Type 屏幕选择 Permit All Users,单击Next,然后单击Finish

image

以上是关于 ADFS 3.0 的内容。下面开始配置 WAP 角色。

Server 2012 R2 Web Application Proxy

WAP 的安装与配置请点击这里,本文不再详细介绍。现在,WAP 已经由名为 sts.treyresearch.com 的联合身份验证服务完成了安装与配置,并且该证书已被导入 ADFS 代理组件中,下面先来回顾一下。现在已有 ADFS 3.0,配置了联合身份验证服务和非声明感知的 Relying Party Trust。WAP 服务器也已安装和配置完成。

现在开始通过 WAP 发布 Exchange 2010 OWA。但首先应注意,针对 Exchange 2010 CAS  阵列的 Kerberos 约束委派,必须为 Kerberos 所有的阵列成员配置使用备用服务帐户(ASA)证书,并在 ASA 上设置一个服务主体名称。关于在 CAS 阵列成员中设置 ASA 的更多信息,请参考以下文章:

https://blogs.technet.com/b/kpapadak/archive/2011/03/13/setting-up-kerberos-with-a-client-access-server-array.aspx

https://technet.microsoft.com/en-us/library/ff808312(v=exchg.141).aspx

在通过 WAP 发布 OWA 之前必须完成此步骤,因为在 ASA 证书中将会用到 SPN。所有 CAS 阵列成员都配置 ASA 后(按照上面的链接),就可以继续发布 OWA了。配置 ASA 证书时,请在 SPN 配置 CAS ASA 帐户时添加注释,后面将会用到。下图显示了在设置中添加 SPN:

image

在 WAP 服务器的 Start 屏幕中打开远程访问配置管理器,输入“remote access”,在右侧窗格中单击Publish

image

在 Welcome 屏幕中单击Next。在 Preauthentication 屏幕中选择 ADFS 并单击Next

image

在 Relying Party Trust 中选择在 ADFS 3.0 服务器中创建的 Non Claims Aware RP Trust,然后单击Next

image

在 Publishing Settings 屏幕,为发布 Web 应用程序选择 SSL 证书并配置选项。如果还没有,那么通过密钥将 Web 应用程序(OWA)证书导入 WAP 服务器或“My”存储中。

注意: 最好提前导入证书并准备好 OWA 证书的密钥,这样就可以在下拉菜单中进行选择。WAP 服务器需要网站 SSL 证书(由于是反向代理),因为它将为互联网客户端提供网页(CAS服务器不直接提供服务)。

image

如果发布Exchange CAS Array,当所有的 CAS 阵列成员都设置了 ASA 后,输入 HTTP SPN 来进行配置(还记得吗?前面介绍过)。

image

为了充分利用 CAS Array 的负载平衡(NLB 或 HLB 风格),请在后端服务器的 URL 字段中使用 CAS Array VIP 的内部 DNS FQDN。单击 Next,然后单击 Publish。就会看到在远程访问控制台中发布的应用程序。

注意:  如果发布 Exchange OWA,还需要按照上面的准则发布 ECP 目录。最好不要发布整个服务器,而是发布具体的 URL。

image

现在已经发布了 OWA,下面开始配置 KCD,从而让 WAP 服务器为用户验证 CAS 阵列。KCD 对于将智能卡证书协议转换成 Kerberos 令牌是十分必要的。这一步可在发布应用程序之前或之后完成,只要 CAS 阵列中设置了 SPN 即可。

登录到域控制器(或通过 RSAT),在 Active Directory Users and Computers 中找到 WAP 计算机对象。

  • 右键单击Object,然后单击properties
  • 选择 Delegation 选项卡, 单击Add, 然后选择已经为 Web 应用程序注册了 SPN 的计算机或用户对象。
  • 在本例中,我们发布的是 Exchange 2010 OWA,所以选择注册了 HTTP SPN的ASA。
  • 选择“Trust this computer for delegation to specified services only”以及“Use any authentication protocol”

image

单击 Ok,将更改提交给 WAP 服务器计算机对象。这就是设置 KCD 的所有步骤。现在已经完成安装和配置 ADFS 和 WAP。利用 WAP 发布 Exchange 2010 OWA/ECP,然后为 WAP 配置 KCD。只通过智能卡进行身份验证。该解决方案安装在 Windows Azure 上,在 ADFS 中我关闭了基于表单的身份验证,因此只能通过证书进行身份验证。

在 ADFS 服务器中打开 ADFS 管理单元,在左侧窗格中单击Authentication Policies,然后在右侧窗格 Primary Authentication | Global Settings 下单击 Edit

image

Extranet取消选中Forms Authentication

image

由于基于表单的认证在 ADFS 中是关闭的,所以当点击 URL 时会显示证书选择器。以下是用户体验(请注意,下图中的联合身份验证服务名称已改为 trazurepki.cloudapp.net)。

1.从Internet 客户端中,用户在 IE 中输入对外发布的 URL (https://mail.treyresearch.com/owa/),然后在 WAP 服务器中点击 ADFS 代理页面,出现证书选择器提示:

 image

2. 用户选择证书并输入 PIN 码:

image

3. 用户登录 Exchange 2010 邮箱:

image

 

注意:  您可以使用 IE 开发工具(尤其是网络实用工具),来查看从 IE 到最终目的地(OWA)的重定向。这可能会有些误导。因为我们是通过 WAP 发布 OWA,只有 WAP 服务器在 Internet 上公开,并且运行 ADFS 的代理组件。所以当看到 OWA URL 和 ADFS URL (本例为 trazurepki.cloudapp.net)时,实际上它们解析的是相同的 IP,也就是 WAP 中的外部接口 IP。WAP 类似于 ISA 和 TMG,都是反向 Web 代理,内部客户端只与 WAP 通信,并且 WAP 可以通过 Kerberos 约束委派进行内部代理。整个解决方案已经在 Windows Azure 上发布,虽然没有真正的邮件路由能力,但是它很好地证明了如何通过 Server 2012 R2 WAP 发布 Exchange。这是一项令人兴奋的新技术,它在 Windows Server 平台中作为一个服务器角色被包含进来,对于 WAP 来说,添加 ADFS 3.0 是一个硬性要求,您可以用更加灵活和安全的方法通过 WAP 发布声明感知和非声明感知的应用程序。

Windows PowerShell 命令为 Server 2012 R2 增添了很多安装和配置能力,WAP 和 ADFS 3.0 也不例外。事实上,有些 WAP 和 ADFS 3.0 的配置只能通过 PowerShell 来完成。另外,您可以利用 PowerShell 自己完成一遍该解决方案的安装和配置。

当您开发解决方案时,或者与客户或合作伙伴讨论安全性(智能卡身份验证)、外网访问和 Exchange 发布等问题时,希望您可以用到本文的内容。在下一篇文章中,我将介绍通过 Server 2012 R2 Web Application Proxy,使用 pass-through 身份验证来发布 Exchange 2010 ActiveSync。下次见。

Jesse “Hit-Man” Esquivel