Citrix ADC

本机 OTP 支持身份验证

Citrix ADC 设备支持一次性密码 (OTP),而无需使用第三方服务器。一次性密码是一种高度安全的选项,用于对服务器进行身份验证,因为生成的号码或密码是随机的。以前,OTP 由专业公司提供,例如 RSA 提供具有生成随机数的特定设备的 RSA。此系统必须与客户端保持持续通信,才能生成服务器预期的数字。

除了降低资本和运营开支外,此功能还通过将整个配置保留在 Citrix ADC 设备上,增强了管理员的控制能力。

注意

由于不再需要第三方服务器,Citrix ADC 管理员必须配置接口来管理和验证用户设备。

必须向 Citrix ADC 设备虚拟服务器注册用户才能使用 OTP 解决方案。每个唯一设备只需要注册一次,并且可以限制在某些环境中。配置和验证注册用户类似于配置额外的身份验证策略。

拥有本地 OTP 支持的优势

  • 除 Active Directory 之外,无需在身份验证服务器上拥有额外的基础结构,从而降低运营成本。
  • 仅将配置整合到 Citrix ADC 设备,从而为管理员提供极好的控制权。
  • 消除了客户端对额外的身份验证服务器的依赖,以生成客户端所期望的数字。

本地 OTP 工作流程

本机 OTP 解决方案是一个双重过程,工作流程分类如下:

  • 设备注册
  • 最终用户登录

重要

如果您正在使用第三方解决方案或管理 Citrix ADC 设备以外的其他设备,则可以跳过注册过程。添加的最后一个字符串必须采用 Citrix ADC 指定的格式。

下图描述了注册新设备以接收 OTP 的设备注册流程。

本地化后的图片

注意

设备注册可以使用任意数量的因素来完成。单一因素(如上图所述)用作解释设备注册过程的示例。

下图描述了通过注册设备验证 OTP 的情况。

本地化后的图片

必备条件

要使用本机 OTP 功能,请确保满足以下必备条件。

  • Citrix ADC 功能发布版本为 12.0 版本 53.13 及更高版本。
  • Citrix Gateway 上安装了高级版或高级版许可证。
  • Citrix ADC 设备配置了管理 IP,并且可以使用浏览器和命令行访问管理控制台。
  • Citrix ADC 配置了身份验证、授权和审核虚拟服务器,以对用户进行身份验证。
  • Citrix ADC 设备配置了 Unified Gateway,并将身份验证、授权和审核配置文件分配给网关虚拟服务器。
  • 本机 OTP 解决方案仅限于 nFactor 身份验证流。配置解决方案需要高级策略。有关更多详细信息,请参阅文章 CTX222713

还要确保 Active Directory 的以下内容:

  • 最小属性长度为 256 个字符。
  • 属性类型必须是“DirectoryString”,例如 UserParameters。这些属性可以包含字符串值。
  • 如果设备名称为非英文字符,则属性字符串类型必须为 Unicode。
  • Citrix ADC LDAP 管理员必须具有对所选 AD 属性的写入权限。
  • Citrix ADC 设备和客户端计算机必须同步到公共网络时间服务器。

使用 GUI 配置本机 OTP

本机 OTP 注册不仅仅是单一因素身份验证。以下部分帮助您配置单因素和第二因素身份验证。

为第一因素创建登录架构

  1. 导航到安全 AAA > 应用程序流量 > 登录架构
  2. 转到配置文件,然后单击添加
  3. 创建身份验证登录架构页上,在名称字段下输入 lschema_first_factor,然后单击 noschema 旁边的编辑
  4. 单击登录架构文件夹。
  5. 向下滚动以选择 SingleAuth.xml,然后单击选择
  6. 单击创建
  7. 单击策略,然后单击添加
  8. 创建身份验证登录架构策略屏幕上,输入以下值。

    名称: lschema_first_factor 配置文件: 从列表中选择 schema_first_factor。 规则: HTTP.REQ.COOKIE.VALUE(“NSC_TASS”).EQ(“manageotp”)

配置身份验证、授权和审核虚拟服务器

  1. 导航到安全 > AAA-应用程序流量 > 身份验证虚拟服务器。单击以编辑现有虚拟服务器。
  2. 单击右侧窗格的高级设置登录架构旁边的 + 图标。
  3. 选择无登录架构
  4. 单击箭头并选择 lschema_first_factor 策略。
  5. 选择 lschema_first_factor 策略,然后单击选择。
  6. 单击绑定”
  7. 向上滚动并在高级身份验证策略下选择 1 个身份验证策略
  8. 右键单击 nFactor 策略,然后选择编辑绑定
  9. 单击选择下一个因子下的 + 图标, 创建下一个因子,然后单击绑定
  10. 创建身份验证策略标签屏幕上,输入以下内容,然后单击继续

    名称:OTP_manage_factor

    登录架构:Lschema_Int

  11. 身份验证策略标签屏幕上,单击 + 图标以创建策略。

  12. 创建身份验证策略屏幕上,输入以下内容:

    名称。otp_manage_ldap

  13. 使用“操作类型”列表选择操作类型
  14. 操作字段中,单击 + 图标以创建操作。
  15. 创建身份验证 LDAP 服务器页面中,选择服务器 IP单选按钮,取消选中身份验证旁边的复选框,输入以下值,然后选择测试连接

    名称:LDAP_no_auth

    IP 地址:192.168.10.11

    基础 DN:DC=training, DC=lab

    管理员:Administrator@training.lab

    密码:xxxxx

  16. 向下滚动到其他设置部分。使用列表选择以下选项。

    服务器登录名属性新建并键入 用户主体名称

  17. 使用列表选择 SSO 名称属性作为新建并键入 userprincipalname
  18. OTP 密码字段中输入“UserParameters”,然后单击更多
  19. 输入以下属性。

    属性 1 = mail 属性 2 = objectGUID 属性 3 = immutableID

  20. 单击确定
  21. 创建身份验证策略页上,将表达式设置为 true ,然后单击创建
  22. 创建身份验证策略标签页上,单击绑定,然后单击完成”
  23. 策略绑定页面上,单击绑定
  24. 身份验证策略页上,单击关闭,然后单击完成

注意

身份验证虚拟服务器必须绑定到 RFWebUI 门户主题。将服务器证书绑定到服务器。服务器 IP ‘1.2.3.5’ 必须具有相应的 FQDN,即 Otpauth.server.com,供以后使用。

为第二因素 OTP 创建登录架构

  1. 导航到安全性 > AAA-应用程序流量 > 虚拟服务器。选择要编辑的虚拟服务器。
  2. 向下滚动并选择 1 个登录架构
  3. 单击添加绑定
  4. 策略绑定部分下,单击 + 图标以添加策略。
  5. 创建身份验证登录架构策略页上,输入名称为 OTP,然后单击 + 图标创建配置文件。
  6. 创建身份验证登录架构页上,输入名称为 OTP,然后单击 noschema 旁边的图标。
  7. 单击 LoginSchema 文件夹,选择 DualAuth.xml,然后单击选择
  8. 单击创建
  9. 规则部分中,输入True。单击创建
  10. 单击 Bind(绑定)。
  11. 注意身份验证的两个因素。单击关闭并单击完成

配置用于管理 OTP 的内容交换策略

如果您使用的是 Unified Gateway,则需要以下配置。

  1. 导航到流量管理”>“内容切换”>“策略”。选择内容切换策略,右键单击,然后选择编辑

  2. 编辑表达式以评估以下或语句,然后单击确定

is_vpn_url||HTTP.REQ.URL.CONTAINS("manageotp")

使用 CLI 配置本机 OTP

您必须具有以下信息才能配置 OTP 设备管理页面:

  • 分配给身份验证虚拟服务器的 IP
  • 与分配的 IP 对应的 FQDN
  • 身份验证虚拟服务器的服务器证书

注意

本机 OTP 仅是基于 Web 的解决方案。

配置 OTP 设备注册和管理页面

创建身份验证虚拟服务器

  • add authentication vserver authvs SSL 1.2.3.5 443
  • bind authentication vserver authvs -portaltheme RFWebUI
  • bind ssl vserver authvs -certkeyname otpauthcert

注意

身份验证虚拟服务器必须绑定到 RFWebUI 门户主题。必须将服务器证书绑定到服务器。服务器 IP ‘1.2.3.5’ 必须具有相应的 FQDN,即 Otpauth.server.com,供以后使用。

创建 LDAP 登录操作

add authentication ldapAction <LDAP ACTION NAME> -serverIP <SERVER IP> - serverPort <SERVER PORT> -ldapBase <BASE> -ldapBindDn <AD USER> -ldapBindDnPassword <PASSWO> -ldapLoginName <USER FORMAT>

示例

add authentication ldapAction ldap_logon_action -serverIP 1.2.3.4 -serverPort 636 -ldapBase "OU=Users,DC=server,DC=com" -ldapBindDn administrator@ctxnsdev.com -ldapBindDnPassword PASSWORD -ldapLoginName userprincipalname

添加 LDAP 登录的身份验证策略

add authentication Policy auth_pol_ldap_logon -rule true -action ldap_logon_action

通过登录模式显示 UI

在登录时向用户显示用户名和密码字段

add authentication loginSchema lschema_single_auth_manage_otp -authenticationSchema "/nsconfig/loginschema/LoginSchema/SingleAuthManageOTP.xml"

显示设备注册和管理页面

Citrix 推荐两种显示设备注册和管理屏幕的方法:URL 或主机名。

  • 使用网址

    当 URL 包含 ‘/管理点’ 时

    • add authentication loginSchemaPolicy lpol_single_auth_manage_otp_by_url -rule "http.req.cookie.value("NSC_TASS").contains("manageotp")" -action lschema_single_auth_manage_otp
    • bind authentication vserver authvs -policy lpol_single_auth_manage_otp_by_url -priority 10 -gotoPriorityExpression END
  • 使用主机名

    当主机名为“al.server.com”时。

    • add authentication loginSchemaPolicy lpol_single_auth_manage_otp_by_host -rule "http.req.header("host").eq("alt.server.com")" -action lschema_single_auth_manage_otp
    • bind authentication vserver authvs -policy lpol_single_auth_manage_otp_by_host -priority 20 -gotoPriorityExpression END

使用 CLI 配置用户登录页面

您必须具有以下信息才能配置“用户登录”页:

  • 负载平衡虚拟服务器的 IP
  • 负载平衡虚拟服务器的相应 FQDN
  • 负载平衡虚拟服务器的服务器证书

注意

重用现有身份验证虚拟服务器 (authvs) 进行双重身份验证。

创建负载平衡虚拟服务器

add lb vserver lbvs_https SSL 1.2.3.162 443 -persistenceType NONE -cltTimeout 180 -  AuthenticationHost otpauth.server.com -Authentication ON -authnVsName authvs
bind ssl vserver lbvs_https -certkeyname lbvs_server_cert

负载平衡中的后端服务表示如下:

add service iis_backendsso_server_com 1.2.3.210 HTTP 80
bind lb vserver lbvs_https iis_backendsso_server_com

创建 OTP 密码验证操作

add authentication ldapAction <LDAP ACTION NAME> -serverIP <SERVER IP> -serverPort <SERVER PORT> -ldapBase <BASE> -ldapBindDn <AD USER> -ldapBindDnPassword <PASSWORD> -ldapLoginName <USER FORMAT> -authentication DISABLED -OTPSecret <LDAP ATTRIBUTE>`

示例:

add authentication ldapAction ldap_otp_action -serverIP 1.2.3.4 -serverPort
636 -ldapBase "OU=Users,DC=server,DC=com" -ldapBindDn administrator@ctxnsdev.
com -ldapBindDnPassword PASSWORD -ldapLoginName userprincipalname -authentication
DISABLED -OTPSecret userParameters

重要

LDAP 登录和 OTP 操作之间的区别是需要禁用身份验证并引入一个新的参数“OtPSecret.“ 不得使用 AD 属性值。

添加 OTP 密码验证的身份验证策略

add authentication Policy auth_pol_otp_validation -rule true -action ldap_otp_action

通过登录架构呈现双重身份验证

添加用于双重身份验证的 UI。

  • add authentication loginSchema lscheme_dual_factor -authenticationSchema "/nsconfig/loginschema/LoginSchema/DualAuth.xml"
  • add authentication loginSchemaPolicy lpol_dual_factor -rule true -action lscheme_dual_factor

通过策略标签创建密码验证系数

为下一个因素创建管理 OTP 流策略标签(第一个因素是 LDAP 登录)

  • add authentication loginSchema lschema_noschema -authenticationSchema noschema
  • add authentication policylabel manage_otp_flow_label -loginSchema lschema_noschema

将 OTP 策略绑定到策略标签

bind authentication policylabel manage_otp_flow_label -policyName auth_pol_otp_validation -priority 10 -gotoPriorityExpression NEXT

绑定 UI 流

绑定 LDAP 登录,然后使用身份验证虚拟服务器进行 OTP 验证。

  • bind authentication vserver authvs -policy auth_pol_ldap_logon -priority 10 -nextFactor manage_otp_flow_label -gotoPriorityExpression NEXT
  • bind authentication vserver authvs -policy lpol_dual_factor -priority 30 -gotoPriorityExpression END

将您的设备注册到 Citrix ADC

  1. 导航到您的 Citrix ADC FQDN(第一个面向公众的 IP),并带有 /管理otp 后缀。例如,使用用户凭据登录 https://otpauth.server.com/manageotp
  2. 单击 + 图标以添加设备。

    本地化后的图片

  3. 输入设备名称,然后按转到。屏幕上显示条形码。
  4. 单击开始设置,然后单击扫描条形码
  5. 将设备相机悬停在 QR 码上。您可以选择输入 16 位代码。

    本地化图像

    注意

    显示的 QR 码有效期为 3 分钟。

  6. 扫描成功后,您会看到一个可用于登录的 6 位数时间敏感的代码。

    本地化后的图片

  7. 要进行测试,请单击 QR 屏幕上的完成,然后单击右侧的绿色复选标记。
  8. 从列表中选择您的设备,然后输入 Google Authenticator 中的代码(必须为蓝色,不是红色),然后单击转到
  9. 请确保使用页面右上角的列表注销。

使用 OTP 登录到 Citrix ADC

  1. 导航到您的第一个面向公众的 URL,然后从 Google Authenticator 输入您的 OTP 进行登录。
  2. 对 Citrix ADC 启动页面进行身份验证。

    本地化后的图片

使用硬件令牌与第三方解决方案的 OTP 集成

重要

  • 您无需注册 Citrix ADC 设备即可将其用作硬件令牌支持。
  • Citrix ADC 12.1 版本 51.16 及更高版本支持此功能。

Citrix ADC OTP 系统现在符合 TOP RFC 6238. 也就是说,Citrix ADC 使用当前时间(以秒为单位)以及共享机密来计算 TOTP 代码。Citrix ADC 使用 30 秒的时间片和 HMAP-SHA1 算法。

从 Citrix ADC 12.1 版本 51.16 开始,ADC 支持使用扩展密钥大小或 SHA2 算法的第三方解决方案。用户现在可以使用较大的种子值和不同的算法来配置活动目录对象。

Citrix ADC 以以以下格式将用户对象存储在活动目录中的信息:

#@mobile1=QB2ZJAOSNCMTRTQFYTEA&,

首都的文本是 TOTP 的种子。假定该算法为 HMAC-SHA1,并假定时间片为 30 秒。

要使用硬件令牌或第三方解决方案与 Citrix ADC 进行互操作性,您可以按如下方式自定义字符串:

#@mobile1=<variable length seed>&alg=sha2&,

注意

  • ‘sha2’ 种子必须是 base32 编码的秘密。
  • 时间片值不能从 30 秒更改。

您可以提供可变长度的种子值。此外,您可以在逗号前面指定“alg=sha2&”。也就是说,“alg=sha2”应该在“&”之后,但在“,”之前添加。结束分隔符必须始终为“&,”。

注意

除了描述内容之外,任何配置错误都可能会导致意外结果。

确保 OTP 管理安全

向最终用户展示 OTP 管理页面的方式有不同。最常见的方法是呈现独立的 OTP 管理页面。但是,必须注意确保 OTP 管理页面在满足安全要求后提供。在外部向用户提供 OTP 管理页面之前,必须验证至少两个因素。本节介绍介绍 OTP 管理页面的最佳实践。

将活动目录属性标记为机密目录属性

OTP 解决方案本身使用用户的活动目录对象来存储在计算 OTP 代码时使用的某些信息。虽然 OTP 解决方案具有高度灵活性,并为客户节省大量成本,但 OTP 属性包含对 OTP 至关重要的敏感信息。客户必须确保只有具有明确权限的用户才能查看此属性的内容。

  • Citrix ADC 13.0 版本为 41.20 及更高版本提供了存储在活动目录中的数据的本机 OTP 加密,从而提供了增强的安全性。
  • 对于使用 Citrix ADC 早期版本的客户,建议将某些属性标记为机密属性,以保护活动目录上的 OTP 属性。将属性标记为机密时,只有具有显式权限的用户才能查看这些属性。

有关将属性标记为机密的更多信息,请参阅;

内部单一因素登记

通常情况下,客户不会使用任何第三方供应商进行双重身份验证。如果这些客户想要转移到 Citrix ADC 的 OTP,用户可能只有可用的 AD 凭据。在这些情况下,可以托管只使用 AD 或 Kerberos 注册 OTP 设备的内部站点。 可以使用 SingleAuthManangeOTP.xml 登录模式来显示此页面基于源代码。

外部双重因素登记

当用户在外部访问 OTP 管理页面时,必须提示用户提供第二个因素即使注册他们的设备。 如果客户有其他 OTP 解决方案(RSA 令牌或其他),则必须在访问自助服务门户之前提示客户验证该解决方案。如果客户不使用任何第三方令牌,则第一台设备只能在场所内注册。后续设备使用之前注册的设备之一 OTP。 DualAuthManageOTP.xml 可用于向最终用户显示两个密码字段。

外部双重因素配准面临的挑战

客户经常面临的挑战是弄清用户何时是外部用户。用户可以更改 HTTP 标头的一部分,例如“主机”标头。因此,OTP 管理检查的组成部分是确定来源。 通常,部署具有面向 Internet 的 NAT 设备以及防火墙。所有外部访问通常都通过该 NAT 设备的源 IP 进行(从 Gateway 看到)。内部访问通常直接发生。客户可以应用此事实来识别来源。

OTP 管理流程

下面的流程图说明了双重因素配准的典型 OTP 管理流程。

本地化后的图片

配置示例

如上所述,流程图的挑战是确定用户是否为外部用户。不同的组织有不同的网络配置来识别这一点。在此示例中,假定用户来自 10.x.x.x 网络,因此该用户被视为内部用户。但是,这需要根据客户的网络进行纠正。

在外部配置双重因素配准的步骤:

  • 配置登录表单视图
add expression is_external_user “CLIENT.IP.SRC.IN_SUBNET(10.0.0.0/8).NOT && http.req.cookie.value("NSC_TASS").eq("manageotp")”

add authentication loginSchema dualauth_registerotp -authenticationSchema DualAuthManageOTP.xml

add authentication loginSchemaPolicy dualauth_registerotp –rule “is_external_user && http.req.cookie.value("NSC_TASS").eq("manageotp")” –action dualauth_registerotp

add authentication loginSchema lschema_single_auth_manage_otp -authenticationSchema "LoginSchema/SingleAuthManageOTP.xml"

add authentication loginSchemaPolicy lschema_single_auth_manage_otp -rule "!is_external_user && http.req.cookie.value("NSC_TASS").eq("manageotp")" -action lschema_single_auth_manage_otp

add authentication vserver nfactor_gateway_auth SSL x.x.x.x 443
  • 绑定适当的证书
bind authentication vserver nfactor_gateway_auth -policy lschema_single_auth_manage_otp -priority 85 -gotoPriorityExpression END

bind authentication vserver nfactor_gateway_auth -policy dualauth_registerotp -priority 80 -gotoPriorityExpression END

注意:此时,客户还可以拥有其他登录架构策略以实际登录。为简洁起见,省略了这些内容。

  • 配置登录因素

要配置登录因素,请添加 AD 操作。

用于登录的 AD 操作:

    add authentication ldapAction ldap_action_login -serverIP <SERVER IP> -  serverPort <SERVER PORT> -ldapBase <BASE> -ldapBindDn <AD USER> -ldapBindDnPassword <PASSWO> -ldapLoginName <USER FORMAT>

OTP 验证和注册的反倾销操作:

    add authentication ldapAction ldap_action_otp -serverIP <SERVER IP> -  serverPort <SERVER PORT> -ldapBase <BASE> -ldapBindDn <AD USER> -ldapBindDnPassword <PASSWO> -ldapLoginName <USER FORMAT> -authentication disabled –OTPSecret UserParameters
  • 添加策略
add authentication policy ldap_login_policy_internal –rule ‘!is_external_user’ –action ldap_action_login

add authentication policy ldap_login_otp_validation –rule ‘is_external_user -action ldap_action_otp

add authentication policy ldap_login_policy_external –rule ‘true’ –action ldap_action_login

add authentication policy ldap_login_otp_management –rule ‘true’ -action ldap_action_otp
  • 首先加上 OTP 系数
add authentication policylabel otp_management_factor

bind authentication policylabel otp_management_factor –policy ldap_login_otp_management –pri 100
  • 为外部用户添加 AD 验证系数
add authentication policylabel ldap_login_external_factor

bind authentication policylabel ldap_login_external_factor –policy ldap_login_policy_external –pri 100 –nextFactor otp_management_factor
  • 将策略绑定到虚拟服务器
bind authentication vserver nfactor_gateway_auth –policy ldap_login_policy_internal –pri 100 –nextFactor otp_management_factor

bind authentication vserver nfactor_gateway_auth –policy ldap_login_otp_validation –pri 110 –nextFactor ldap_login_external_factor