Active Directory 联合身份验证服务代理集成协议合规性
如果要使用第三方代理来代替 Web 应用程序代理,则它们必须支持指定 ADFS 和 WAP 集成规则的 MS-ADFSPIP 协议。ADFSPIP 将 Active Directory 联合身份验证服务与身份验证和应用程序代理集成在一起,使位于企业网络边界之外的客户端能够访问位于公司网络边界内的服务。
必备条件
要成功建立代理服务器与 ADFS 场之间的信任,请查看 NetScaler 设备中的以下配置:
-
为后端创建 SSL 配置文件并在 SSL 配置文件中启用 SNI。禁用 SSLv3/TLS1。在命令提示符下,键入以下命令:
add ssl profile <new SSL profile> -sniEnable ENABLED -ssl3 DISABLED -tls1 DISABLED -commonName <FQDN of ADFS> <!--NeedCopy-->
-
为服务禁用 SSLv3/TLS1。在命令提示符下,键入以下命令:
set ssl profile <adfs service name> -sessReuse <ENABLED|DISABLED> -tls1 <ENABLED|DISABLED> -SNIEnable <ENABLED|DISABLED> -commonName <name> -denySSLReneg <YES|NO> <!--NeedCopy-->
>**重要**
>
> 对于必须将身份验证卸载到 ADFS 服务器的 Home Realm Discovery (HRD) 场景,Citrix 建议您在 NetScaler 设备上同时禁用身份验证和 SSO。
## 身份验证机制
以下是身份验证的高级别事件流。
1. **与 ADFS 服务器建立信任** — NetScaler 服务器通过注册客户端证书与 ADFS 服务器建立信任。建立信任后,NetScaler 设备将在重新启动后重新建立信任,而无需用户干预。
证书过期后,您必须通过删除并再次添加 ADFS 代理配置文件来重新建立信任。
1. **已发布的端点** -建立信任后,NetScaler 设备会自动获取 ADFS 服务器上的已发布端点列表。这些已发布的端点会过滤转发到 ADFS 服务器的请求。
1. **将标头插入客户端请求** — 当 NetScaler 设备通过通道传输客户端请求时,与 ADFSPIP 相关的 HTTP 标头将在发送到 ADFS 服务器时添加到数据包中。您可以根据这些标头值在 ADFS 服务器上实施访问控制。支持以下标头。
- X-MS-Proxy
- X-MS-Endpoint-Absolute-Path
- X-MS-Forwarded-Client-IP
- X-MS-Proxy
- X-MS-Target-Role
- X-MS-ADFS-Proxy-Client-IP
1. **管理最终用户流量** — 最终用户流量安全地路由到所需的资源。
> **注意:**
>
>- NetScaler 使用基于表单的身份验证。
>
>- NetScaler 不支持使用 Active Directory 联合服务代理集成协议发布应用程序。
## 配置 NetScaler 以支持 ADFS 服务器
### 必备条件
- 将上下文切换 (CS) 服务器配置为前端,在CS后面使用身份验证、授权和审核服务器。在命令提示符下,键入:
```
add cs vserver cs_adfs_proxy SSL a.b.c.d 443 -cltTimeout 180 -AuthenticationHost adfs.ns.com
<!--NeedCopy-->
```
add cs action adfs_proxy_cs_act -targetVserver avs_adfs_proxy
<!--NeedCopy--> ```
```
add cs policy adfs_proxy_policy -rule is_vpn_url -action adfs_proxy_cs_act
<!--NeedCopy--> ```
```
bind cs vserver cs_adfs_proxy -policyName adfs_proxy_policy -priority 100
<!--NeedCopy--> ```
```
bind cs vserver cs_adfs_proxy -lbvserver lb_adfs_proxy
<!--NeedCopy--> ```
-
添加 ADFS 服务。在命令提示符下,键入:
add service adfs_service adfs_server SSL 443 set ssl service adfs_service -sslProfile ns_default_ssl_profile_backend bind ssl service adfs_service -certkeyName adfs_trust_cert <!--NeedCopy-->
set ssl profile ns_default_ssl_profile_backend -sessReuse ENABLED -tls1 DISABLED -SNIEnable ENABLED -commonName www.server.com -denySSLReneg NO <!--NeedCopy-->
-
添加负载平衡虚拟服务器。在命令提示符下,键入:
add lb vserver lb_adfs_proxy SSL 0.0.0.0 0 -AuthenticationHost adfs.ns.com -Authentication ON -adfsProxyProfile adfs_proxy_profile <!--NeedCopy-->
-
将 ADFS 流量策略和 ADFS 服务绑定到负载平衡虚拟服务器。在命令提示符下,键入:
``` bind lb vserver lb_adfs_proxy adfs_service
bind lb vserver lb_adfs_proxy -policyName adfs_traffic_pol -priority 1 -type REQUEST ```
-
配置 SNIP 地址:
add ns ip p.q.r.s 255.255.255.0 -type SNIP
-
配置流量操作和策略:
add tm trafficAction adfs_traffic_action -SSO ON -formSSOAction adfs_form_action add tm formSSOAction adfs_form_action -actionURL "/adfs/ls" -userField UserName -passwdField Password -ssoSuccessRule "HTTP.RES.SET_COOKIE.EQ("MSISAuth")" -nameValuePair AuthMethod=FormsAuthentication -submitMethod POST add tm trafficAction adfs_traffic_action -SSO ON -formSSOAction adfs_form_action add tm trafficPolicy adfs_traffic_pol "HTTP.REQ.URL.EQ("/adfs/ls/")" adfs_traffic_action
要将 NetScaler 配置为与 ADFS 服务器配合使用,您需要执行以下操作:
- 创建用于 ADFS 代理配置文件的 SSL CertKey 配置文件密钥
- 创建 ADFS 代理配置文件
- 将 ADFS 代理配置文件关联到负载平衡虚拟服务器
使用 GUI 创建带有私钥的 SSL 证书,用于 ADFS 代理配置文件
-
导航到流量管理 > SSL > 证书 > CA 证书。
-
在详细信息窗格中,单击“安装”。 在“安装证书”对话框中,键入详细信息,例如证书和密钥文件名,然后选择“证书捆绑包”。
-
单击“安装”,然后单击“关闭”。
使用 CLI 创建带有私钥的 SSL 证书,用于 ADFS 代理配置文件
在命令提示符下,键入:
add ssl certKey aaa_local -cert aaa_local.cer -key aaa_local.key
注意: 证书文件和密钥文件必须存在于 NetScaler 设备中。
使用 GUI 创建 ADFS 代理配置文件
-
导航到配置 > 安全 > AAA - 应用程序流量 > adfsProxy 配置文件。
-
在 adfsProxy 配置文件页面上单击“添加”。
-
在创建 adfsProxy 配置文件页面上,配置以下参数:
- 名称:为 ADFS 代理配置文件分配一个名称。
- 用户名: 这是目录中一个帐户的名称,用于对充当代理的 NetScaler 的信任请求进行身份验证。
- 密码:这是帐户的密码。
- 服务器 URL: ADFS 服务器的 FQDN。
- 证书密钥名称: 在 ADFS 服务器上注册的代理的 SSL 证书。
-
单击创建。
使用 CLI 创建 ADFS 代理配置文件
在命令提示符下,键入:
add authentication adfsProxyProfile <profile name> -serverUrl <https://<server FQDN or IP address>/> -username <adfs admin user name> -password <password for admin user> -certKeyName <name of the CertKey profile created above>
add dns addRec adfs.server.com 10.106.30.151
示例:
add authentication adfsProxyProfile adfs_proxy_profile -userName test -password test -serverURL "https://adfs.server.com" -CertKeyName adfs_trust_cert
注意:
只有当证书由 ADFS 服务器的证书颁发机构签名时,ADFS 代理和 ADFS 服务器才能建立信任。
使用 GUI 将 ADFS 代理配置文件关联到负载平衡虚拟服务器
-
导航到 流量管理 > 负载平衡 > 虚拟服务器,然后选择 SSL 虚拟服务器。
-
单击编辑。
-
在“高级设置”中,单击“配置文件”。
-
选择之前创建的 ADFS 配置文件。
-
单击 确定 ,然后单击 完成。
使用 CLI 将 ADFS 代理配置文件关联到负载平衡虚拟服务器
在 ADFS 部署中,使用两个虚拟服务器,一个用于客户端流量,另一个用于元数据交换。ADFS 代理配置文件必须与前端 ADFS 服务器的负载平衡虚拟服务器关联。
在命令提示符下,键入:
set ssl vserver lb_adfs_proxy -sslProfile ns_default_ssl_profile_frontend
ADFSPIP 的信托续订支持
您可以续订即将到期的现有证书的信任,或者如果现有证书无效。只有在 NetScaler 设备和 ADFS 服务器之间建立信任关系时,才会执行证书的信任续订。要续订证书的信任,您必须提供新证书。
重要:
新证书的信任续订需要手动干预。
以下示例列出了证书信任续订涉及的步骤:
- NetScaler 设备在 POST 请求中将旧的 (SerializedTrustCertificate) 和新证书 (SerializedReplacementCertificate) 发送到 ADFS 服务器以进行信任续订。
- 如果成功续订信任,ADFS 服务器将响应 200 OK 成功。
- 如果信任续订成功,NetScaler 设备会将状态更新为“ESTABLISHED_RENEW_SUCCESS”。如果信任续订失败,状态将更新为“ESTABLISHED_RENEW_FAILED”,NetScaler 设备将继续使用旧证书。
注意:
如果证书密钥已绑定到 ADFS 代理配置文件,则无法对其进行更新。
使用 CLI 配置证书的信任续订
在命令提示符下,键入:
add ssl certKey <name> -cert <certificate file> -key <key file>
add authentication vserver <name> SSL <ipaddress> <port>
bind ssl vserver <virtual server name> -certkeyName <string>
示例:
add ssl certKey adfs_trust_cert -cert "client/client_rsa_2048.pem" -key "client/client_rsa_2048.ky"
注意:
该证书必须由 ADFS 服务器的证书颁发机构颁发。
add authentication vserver avs_adfs_proxy SSL 0.0.0.0
bind ssl vserver avs_adfs_proxy -certkeyName aaa_local
ADFS 服务器上基于客户端证书的身份验证
从 Windows Server 2016 开始,Microsoft 推出了一种在通过代理服务器访问 ADFS 时对用户进行身份验证的新方法。现在,最终用户可以使用其证书登录,从而避免使用密码。
最终用户通常通过代理访问 ADFS,尤其是当他们不在本地时。因此,ADFS 代理服务器需要通过 ADFSPIP 协议支持客户端证书身份验证。
使用 NetScaler 设备对 ADFS 进行负载平衡时,为了支持 ADFS 服务器上基于证书的身份验证,用户还需要使用证书登录 NetScaler 设备。这允许 NetScaler 将用户证书传递给 ADFS,以便向 ADFS 服务器提供 SSO。
下图表示客户端证书身份验证流程。
使用客户端证书为 ADFS 服务器配置 SSO
要使用客户端证书为 ADFS 服务器配置 SSO,必须首先在 NetScaler 设备上配置客户端证书身份验证。然后,必须将证书身份验证策略绑定到身份验证、授权和审核虚拟服务器。
此外,您必须执行以下步骤。
-
必须配置端口为49443的额外上下文交换虚拟服务器,并且此上下文交换虚拟服务器必须指向对所有端口开放的同一个负载平衡虚拟服务器,该虚拟服务器是您之前创建的。
-
必须在 NetScaler 设备上打开端口 49443 才能进行身份验证。
-
上下文切换策略必须与之前创建的端口 443 处于打开状态的同一个负载平衡虚拟服务器绑定。
-
您必须将之前创建的相同 SSL 服务绑定到负载平衡虚拟服务器。
-
如果您已经为后端创建了 SSL 配置文件,则必须使用该配置文件。
在命令提示符下,键入:
bind ssl vserver <name> -certkeyName <string>
bind ssl vserver <vServerName> -certkeyName <string>
add authentication Policy <policy name> -rule <expression> -action <action name>
bind authentication vserver <name> -policy <name of the policy> -priority <integer>
示例:
bind ssl vserver lb_adfs_proxy -certkeyName aaa_local
set ssl profile ns_default_ssl_profile_frontend -eRSA ENABLED -sessReuse ENABLED -denySSLReneg NONSECURE
bind ssl vserver cs_adfs_proxy -certkeyName aaa_local
add authentication Policy local_pol -rule true -action LOCAL
bind authentication vserver avs_adfs_proxy -policy local_pol -priority 1
有关在 NetScaler 设备上配置客户端证书的信息,请参阅 使用高级策略配置客户端证书身份验证。 ```