Active Directory 联合身份验证服务代理集成协议合规性
如果要使用第三方代理来代替 Web 应用程序代理,它们必须支持指定 ADFS 和 WAP 集成规则的 MS-ADFSPIP 协议。ADFSPIP 将 Active Directory 联合身份验证服务与身份验证和应用程序代理集成在一起,使位于企业网络边界之外的客户端能够访问位于公司网络边界内的服务。
必备条件
要在代理服务器和 ADFS 场之间成功建立信任,请查看 Citrix ADC 设备中的以下配置:
-
为后端创建 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 service <adfs service name> -sslProfile ns_default_ssl_profile_backend <!--NeedCopy-->
-
为后端服务器握手启用 SNI 扩展。在命令提示符下,键入以下命令:
set vpn parameter –backendServerSni ENABLED set ssl parameter -denySSLReneg NONSECURE <!--NeedCopy-->
重要提示
对于必须将身份验证卸载到 ADFS 服务器的家庭领域发现 (HRD) 方案,Citrix 建议您在 Citrix ADC 设备上同时禁用身份验证和 SSO。
身份验证机制
以下是身份验证的高级别事件流。
-
与 ADFS 服务器建立信任 — Citrix ADC 服务器通过注册客户端证书与 ADFS 服务器建立信任。建立信任后,Citrix ADC 设备将在重新启动后重新建立信任,而无需用户干预。
证书过期后,您必须通过删除并再次添加 ADFS 代理配置文件来重新建立信任。
-
已发布的端点 -建立信任后,Citrix ADC 设备会自动获取 ADFS 服务器上的已发布端点列表。这些已发布的端点会过滤转发到 ADFS 服务器的请求。
-
将标头插入客户端请求 — 当 Citrix ADC 设备通过隧道传输客户端请求时,与 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
-
管理最终用户流量 — 最终用户流量安全地路由到所需的资源。
备注:
-
Citrix ADC 使用基于表单的身份验证。
-
Citrix ADC 不支持使用符合 Active Directory 联合服务代理集成协议的应用程序发布应用程序。
-
配置 Citrix ADC 以支持 ADFS 服务器
必备条件
-
将上下文切换 (CS) 服务器配置为前端,在CS后面使用身份验证、授权和审核服务器。在命令提示符下,键入:
add cs vserver <cs vserver name> SSL 10.220.xxx.xx 443 -cltTimeout 180 -AuthenticationHost <adfs server hostname> -Authentication OFF -persistenceType NONE <!--NeedCopy-->
add cs action <action name1> -targetLBVserver <lb vserver name> <!--NeedCopy-->
add cs action <action name2> -targetLBVserver <lb vserver name> <!--NeedCopy-->
add cs policy <policy name1> -rule " http.req.url.contains("/adfs/services/trust") || http.req.url.contains("federationmetadata/2007-06/federationmetadata.xml")" -action <action name1> <!--NeedCopy-->
add cs policy <policy name2> -rule "HTTP.REQ.URL.CONTAINS("/adfs/ls")" -action <action name2> <!--NeedCopy-->
bind cs vserver <cs vserver name> -policyName <policy name1> -priority 100 <!--NeedCopy-->
bind cs vserver <cs vserver name> -policyName <policy name2> -priority 110 <!--NeedCopy-->
bind cs vserver <cs vserver name> -lbvserver <lb vserver name> <!--NeedCopy-->
-
添加 ADFS 服务。在命令提示符下,键入:
add service <adfs service name> <adfs server ip> SSL 443 <!--NeedCopy-->
set ssl service <adfs service name> -sslProfile ns_default_ssl_profile_backend <!--NeedCopy-->
-
添加负载平衡的虚拟服务器。在命令提示符下,键入:
add lb vserver <lb vserver name> SSL 0.0.0.0 0 <!--NeedCopy-->
set ssl vserver <lb vserver name> -sslProfile ns_default_ssl_profile_frontend <!--NeedCopy-->
-
将服务绑定到负载均衡服务器。在命令提示符下,键入:
bind lb vserver <lb vserver name> <adfs service name> <!--NeedCopy-->
要将 Citrix ADC 配置为与 ADFS 服务器配合使用,您需要执行以下操作:
- 创建用于 ADFS 代理配置文件的 SSL certKey 配置文件密钥
- 创建 ADFS 代理配置文件
- 将 ADFS 代理配置文件关联到 LB 虚拟服务器
创建带有私钥的 SSL 证书以用于 ADFS 代理配置文件
在命令提示符下,键入:
add ssl certkey <certkeyname> –cert <certificate path> -key <keypath>
<!--NeedCopy-->
注意: 证书文件和密钥文件必须存在于 Citrix ADC 设备中。 使用 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>
<!--NeedCopy-->
哪里;
配置文件名称 — 要创建的 AFDS 代理配置文件的名称
serverURL — ADFS 服务的完全限定域名,包括协议和端口。例如,https://adfs.citrix.com
Username
— ADFS 服务器上存在的管理员帐户的用户名
密码 — 用作用户名的管理员帐户的密码
certKeyName — 之前创建的 SSL certKey 配置文件的名称
使用 CLI 将 ADFS 代理配置文件与负载平衡虚拟服务器关联
在 ADFS 部署中,使用两个负载平衡虚拟服务器,一个用于客户端流量,另一个用于元数据交换。ADFS 代理配置文件必须与前端 ADFS 服务器的负载平衡虚拟服务器关联。
在命令提示符下,键入:
set lb vserver <adfs-proxy-lb> -adfsProxyProfile <name of the ADFS proxy profile>
<!--NeedCopy-->
ADFSPIP 的信托续订支持
您可以续订即将到期的现有证书的信任,或者如果现有证书无效。只有在 Citrix ADC 设备和 ADFS 服务器之间建立信任关系时,才会执行证书的信任续订。要续订证书的信任,您必须提供新证书。
重要提示
新证书的信任续订需要手动干预。
以下示例列出了证书信任续订涉及的步骤:
- Citrix ADC 设备在 POST 请求中将旧的 (SerializedTrustCertificate) 和新证书 (SerializedReplacementCertificate) 发送到 ADFS 服务器以进行信任续订。
- 如果成功续订信任,ADFS 服务器将响应 200 OK 成功。
- 如果信任续订成功,Citrix ADC 设备会将状态更新为“ESTABLISHED_RENEW_SUCCESS”。如果信任续订失败,状态将更新为“ESTABLISHED_RENEW_FAILED”,Citrix ADC 设备将继续使用旧证书。
注意
如果证书密钥已绑定到某些 ADFS 代理配置文件,则无法更新该密钥。
使用 CLI 配置证书的信任续订
在命令提示符下,键入:
set authentication adfsProxyProfile <name> [-CertKeyName <string>]
<!--NeedCopy-->
示例:
set authentication adfsProxyProfile adfs_2 –CertKeyName ca_cert1
<!--NeedCopy-->
ADFS 服务器上基于客户端证书的身份验证
从 Windows Server 2016 开始,Microsoft 推出了一种在通过代理服务器访问 ADFS 时对用户进行身份验证的新方法。现在,最终用户可以使用其证书登录,从而避免使用密码。
最终用户通常通过代理访问 ADFS,尤其是当他们不在本地时。因此,ADFS 代理服务器需要通过 ADFSPIP 协议支持客户端证书身份验证。
使用 Citrix ADC 设备对 ADF 进行负载平衡时,要在 ADFS 服务器上支持基于证书的身份验证,用户还需要使用证书登录 Citrix ADC 设备。这允许 Citrix ADC 将用户证书传递给 ADFS,以便向 ADFS 服务器提供 SSO。
下图描述了客户端证书身份验证流程。
使用客户端证书为 ADFS 服务器配置 SSO
要使用客户端证书为 ADFS 服务器配置 SSO,必须首先在 Citrix ADC 设备上配置客户端证书身份验证。然后,必须将证书身份验证策略绑定到身份验证、授权和审核虚拟服务器。
此外,您必须执行以下步骤。
-
必须配置端口为49443的额外上下文交换虚拟服务器,并且此上下文交换虚拟服务器必须指向对所有端口开放的同一个负载平衡虚拟服务器,该虚拟服务器是您之前创建的。
-
必须在 Citrix ADC 设备上打开端口 49443 才能进行身份验证。
-
上下文切换策略必须与之前创建的端口 443 处于打开状态的同一个负载平衡虚拟服务器绑定。
-
您必须将之前创建的相同 SSL 服务绑定到负载平衡虚拟服务器。
-
如果您已经为后端创建了 SSL 配置文件,则必须使用该配置文件。
在命令提示窗口中,键入:
add cs vserver <name> <serviceType> <port>
bind cs vserver <name> (-lbvserver <string> | -vServer <string> | [-targetLBVserver <string>]
set ssl vserver <vServerName [-sslProfile <string>]
bind ssl vserver <vServerName -certkeyName <string>
add authentication certAction <action name>
add authentication Policy <policy name> -rule <expression> -action <action name>
add authentication policylable <label Name>
bind authentication policylabel <label Name> -policyName <name of the policy> -priority<integer>
<!--NeedCopy-->
示例:
add cs vserver srv123_adfsproxy_csvs_tls SSL $VIP_1 49443
bind cs vserver srv123_adfsproxy_csvs_tls -lbvserver srv123_adfs_lbvserver
set ssl vserver srv123_adfsproxy_csvs_tls -sslProfile ns_default_ssl_profile_frontend
bind ssl vserver srv123_adfsproxy_csvs_tls -certkeyName srv123_wildcardcert
add authentication certAction adfsproxy-cert
add authentication Policy cert1 -rule TRUE -action adfsproxy-cert
add authentication policylable certfactor
bind authentication policylabel certfactor –policyName cert1 –priority 100
<!--NeedCopy-->
有关在 Citrix ADC 设备上配置客户端证书的信息,请参阅 使用高级策略配置客户端证书身份验证。