一、WAP 的角色定位与部署前提
Web应用程序代理(Web Application Proxy,WAP)是Windows Server远程访问角色中的一个服务,通常与Active Directory联合身份验证服务(AD FS)协同工作。它部署在边缘网络或DMZ区域,接收来自互联网的HTTPS请求,在完成预认证后将流量转发到内部Web服务器或AD FS服务器。WAP本身不直接校验用户凭据,而是将身份验证请求交给后端的AD FS,因此部署前需要先有一套正常运行的AD FS环境。

在开始安装之前,需要确认几项基础条件。首先是域成员身份:WAP服务器可以加入域,也可以放在工作组环境,但加入域会更便于证书管理和Kerberos委派。其次,服务器需要至少两块网络接口或通过路由策略实现内外网隔离,外部接口监听公网HTTPS流量,内部接口访问AD FS和内部应用。证书方面,必须准备一个公网可信任的TLS证书,证书使用者名称需要匹配外部访问地址,例如 wap.ipipp.com。同时该证书需要包含私钥,并导入到WAP服务器的本地计算机个人证书存储中。
端口规划同样不能忽略。默认情况下WAP使用443端口接收外部HTTPS请求,内部与AD FS通信也使用443。如果AD FS使用非标准端口,需要在配置命令中显式指出。此外,如果内部Web应用使用HTTP而非HTTPS,WAP可以在转发时进行协议转换,但这会带来额外的安全隐患,建议内部应用也启用TLS。
二、安装 Web 应用程序代理角色与基础配置
WAP角色通过服务器管理器或PowerShell安装。使用PowerShell时,以管理员身份运行以下命令即可完成角色安装。安装完成后需要重新启动服务器,或者直接执行后续配置向导。需要注意的是,WAP角色不能与AD FS角色安装在同一台服务器上,二者必须是独立实例,否则配置会失败。
Install-WindowsFeature Web-Application-Proxy -IncludeManagementTools
角色安装完成并重启后,可以在远程访问管理控制台中找到Web应用程序代理配置向导,也可以使用PowerShell执行配置。命令行方式更便于自动化,常用命令如下。该命令会把当前服务器配置为AD FS代理,需要提供AD FS服务器的内部地址和本地管理员凭据。
Install-WebApplicationProxy -FederationServiceName "fs.contoso.com" -FederationServiceTrustCredential (Get-Credential)
执行配置时,WAP会与AD FS建立信任关系。这里的 FederationServiceName 必须使用AD FS服务的外部可解析名称,它必须与AD FS使用的TLS证书名称一致。如果AD FS服务器位于内部网络,WAP需要能够通过内部DNS解析该名称并访问443端口。配置过程中如果出现证书信任错误,通常是因为该名称对应的证书未正确安装在WAP服务器的受信任根证书颁发机构存储中,或者在AD FS侧未将WAP服务器加入依赖方信任。
配置完成后,可以运行 Get-WebApplicationProxyConfiguration 查看当前状态。该命令会返回AD FS地址、外部URL以及证书绑定信息。如果状态显示为已配置但没有出现错误事件,说明WAP与AD FS之间的信任已经建立。接下来就可以进入应用发布阶段。
三、发布内部 Web 应用程序
发布应用是WAP的主要用途。管理员可以为每个内部站点创建一条发布规则,规则中定义了外部访问URL、内部回源URL、预认证方式以及是否启用AD FS声明规则。远程访问管理控制台提供了图形化界面,适合一次性发布少量应用;当需要批量处理或重复部署时,PowerShell是更高效的选择。
下面命令演示如何发布一个内部站点。参数中的 ExternalUrl 是外部用户最终访问的地址,BackendServerUrl 是内部实际承载应用的服务器地址,ExternalPreAuthentication 设置为 PassThrough 表示由AD FS完成预认证,若不设置该参数则默认为AD FS预认证。
Add-WebApplicationProxyApplication -Name "OA Portal" -ExternalUrl "https://oa.contoso.com/" -BackendServerUrl "http://oa-srv.contoso.local/" -ExternalPreAuthentication PassThrough
发布规则创建后,外部用户访问 https://oa.contoso.com/ 时,请求先到达WAP服务器。WAP检查到该规则启用AD FS预认证,于是将用户重定向到AD FS登录页。用户输入AD域凭据并通过验证后,AD FS签发声明令牌,WAP再将请求转发到内部OA服务器。对于内部服务器来说,请求源地址是WAP服务器而不是外部用户,因此需要在内部防火墙或应用侧放行WAP的源IP。
回源地址的选择直接影响访问体验。BackendServerUrl 最好使用内部DNS可解析的FQDN,例如 http://oa-srv.contoso.local/,而不是IP地址。如果内部应用通过HTTPS提供服务,回源地址也必须写https,并且WAP需要信任内部站点证书。若内部站点使用自签名证书,则需要将该证书导入WAP服务器的受信任根证书颁发机构存储,否则会出现502或503错误。
四、证书与身份验证的深入配置
TLS证书是WAP配置中最容易出问题的环节。WAP需要使用两张证书:一张用于外部访问,绑定在WAP的HTTPS监听上;另一张用于与内部AD FS通信,如果AD FS使用内部域名证书,WAP也需要信任该证书链。两张证书可以相同,也可以不同,但都必须有效且未被吊销。
外部证书导入后,可以在配置应用时通过证书使用者名称自动匹配,也可以手动指定证书指纹。手动指定时,先通过以下命令查看证书指纹,然后在发布命令中附加 ExternalCertificateThumbprint 参数。证书指纹中不要包含空格,系统会自动转换为标准格式。
Get-ChildItem Cert:\LocalMachine\My | Select-Object Subject, Thumbprint
如果外部访问地址包含通配符证书,例如 *.contoso.com,可以使用通配符证书同时覆盖多个应用。但需注意,通配符证书只在单级子域有效,对于多级域名如 oa.east.contoso.com 无法匹配。另外,如果希望WAP支持客户端证书身份验证,需要在AD FS中启用设备认证或客户端证书认证,并在WAP的发布规则中做相应配置。
Kerberos约束委派是发布内部应用时另一个常见需求。默认情况下,WAP将用户凭据传递给内部应用时可能使用基本身份验证或Windows集成身份验证。如果内部应用需要以原用户身份访问后端资源,例如前端Web服务器再访问SQL Server,就需要为WAP服务器配置Kerberos约束委派。在Active Directory用户和计算机中,找到WAP服务器计算机账户,在委派选项卡中设置仅信任此计算机来委派指定的服务,并选择内部Web应用的HTTP服务主体名称。
五、常见故障排查与日志分析
WAP运行中出现访问失败时,优先检查事件查看器中的Web应用程序代理日志。该日志位于应用程序和服务日志下的Microsoft\Windows\WebApplicationProxy\Admin路径。常见事件ID包括12020表示配置信任失败,12027表示无法连接后端服务器,12008表示证书验证错误。根据事件描述可以直接定位问题范围。
如果外部用户看到HTTP 502错误,多半是WAP无法访问内部应用。先用WAP服务器上的Invoke-WebRequest测试回源URL是否可达,再检查内部防火墙是否放行WAP到应用服务器的端口。如果返回HTTP 401,说明AD FS预认证通过但应用侧拒绝凭据,需要检查后端的身份验证方式和委派设置。如果浏览器一直重定向导致无法打开,检查外部URL是否与AD FS的返回URL一致,避免形成重定向循环。
PowerShell排错时,可以使用以下命令查看所有已发布应用及其状态。输出结果中的 ExternalUrl 和 BackendServerUrl 会帮助确认规则是否与预期一致。
Get-WebApplicationProxyApplication | Format-List Name, ExternalUrl, BackendServerUrl, ExternalPreAuthentication
对于证书错误,使用浏览器直接访问外部URL并查看证书详情,确认证书链完整且使用者名称匹配。如果WAP服务器本身使用自签名证书进行内部通信,确保AD FS服务器信任该证书。最后,保持WAP和AD FS的操作系统补丁更新,定期检查服务运行状态,有助于减少配置漂移带来的问题。

