客户端证书身份验证
包含敏感内容的网站,例如网上银行网站或包含员工个人信息的网站,有时需要客户证书才能进行身份验证。要配置身份验证、授权和审核以基于客户端证书属性对用户进行身份验证,请先在流量管理虚拟服务器上启用客户端身份验证,然后将根证书绑定到身份验证虚拟服务器。然后,您可以实现两个选项中的一个。您可以将身份验证虚拟服务器上的默认身份验证类型配置为 CERT,也可以创建一个证书操作,以定义 NetScaler 根据客户端证书对用户进行身份验证时必须执行的操作。无论哪种情况,您的身份验证服务器都必须支持 CRL。您可以将 ADC 配置为从 SubjectCN 字段或客户端证书中的其他指定字段中提取用户名。
当用户尝试登录到未配置身份验证策略且未配置全局级联的身份验证虚拟服务器时,将从证书的指定字段中提取用户名信息。如果提取了必填字段,则身份验证成功。如果用户在 SSL 握手期间未提供有效的证书,或者如果用户名提取失败,则身份验证将失败。验证客户端证书后,ADC 会向用户显示一个登录页面。
以下过程假定您已经创建了有效的身份验证、授权和审核配置,因此它们仅说明如何使用客户端证书启用身份验证。这些过程还假定您已获得根证书和客户端证书,并将它们放在 ADC 的 /nsconfig/ssl 目录中。
配置客户端证书身份验证
使用 GUI 配置客户端证书参数
-
安装 CA 证书并将其绑定到身份验证虚拟服务器。
- 导航到 Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Virtual Servers(虚拟服务器)。
- 在出现的“身份验证虚拟服务器”页面中,选择要配置以处理客户端证书身份验证的虚拟服务器,然后单击“编辑”。
- 在“身份验证虚拟服务器”页面上,导航到“证书”部分,然后单击右箭头“>”。
-
在 CA 证书绑定页面上,选择 CA 证书,更新其他必填字段,然后单击“绑定”。
- 如果 CA 证书不可用,请选择添加。
- 在“安装证书”页面上,更新以下字段,单击“安装”,然后单击“关闭”。
- 证书密钥对名称:证书和私钥对的名称
- 证书文件名:用于形成证书密钥对的证书文件的名称。证书文件必须存在于 NetScaler 的硬盘驱动器或固态驱动器上。将证书存储在默认位置以外的任何位置可能会导致高可用性设置中的不一致。默认路径是 /nsconfig/ssl/。
- 通知期限:证书到期前的天数,在此天数内,NetScaler 通知管理员证书即将过期。
- 过期时通知:启用此选项可在证书即将到期时收到警报。
- 安装 CA 证书后,转到 CA 证书绑定页面,将其绑定到身份验证虚拟服务器。
- 返回到安全性 > AAA - 应用程序流量 > 虚拟服务器页面。
- 导航到安全性 > AAA - 应用程序流量 > 策略 > 身份验证 > 基本策略 > CERT。
- 选择要配置的处理客户端证书身份验证的策略,然后单击“编辑”。
- 在“配置身份验证 CERT 策略”页面上,转到“服务器”下拉列表,然后选择配置为处理客户端证书身份验证的虚拟服务器。
-
单击确定。
使用 CLI 配置客户端证书参数
在命令提示符下,按所示顺序键入以下命令以配置证书并验证配置:
add ssl certKey <certkeyName> -cert <certFile> -key <keyFile> -password -inform <inform> -expiryMonitor <expiryMonitor> -notificationPeriod <notificationPeriod>
bind ssl certKey [<certkeyName>] [-ocspResponder <string>] [-priority <positive_integer>]
show ssl certKey [<certkeyName>]
set aaa parameter -defaultAuthType CERT
show aaa parameter
set aaa certParams -userNameField "Subject:CN"
show aaa certParams
<!--NeedCopy-->
使用 GUI 配置客户端证书高级身份验证策略
-
安装 CA 证书并将其绑定到证书密钥对。
- 导航到 Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Virtual Servers(虚拟服务器)。
- 在出现的“身份验证虚拟服务器”页面中,选择要配置以处理客户端证书身份验证的虚拟服务器,然后单击“编辑”。
- 在“身份验证虚拟服务器”页面上,导航到“证书”部分,然后单击右箭头“>”。
- 在 CA 证书绑定页面上,选择 CA 证书,更新其他必填字段,然后单击“绑定”。
- 如果 CA 证书不可用,请选择添加。
- 在“安装证书”页面上,更新以下字段,单击“安装”,然后单击“关闭”。
- 证书密钥对名称:证书和私钥对的名称
- 证书文件名:用于形成证书密钥对的证书文件的名称。证书文件必须存在于 NetScaler 的硬盘驱动器或固态驱动器上。将证书存储在默认位置以外的任何位置可能会导致高可用性设置中的不一致。默认路径是 /nsconfig/ssl/。
- 通知期限:证书到期前的天数,在此天数内,NetScaler 通知管理员证书即将过期。
- 过期时通知:启用此选项可在证书即将到期时收到警报。
- 安装 CA 证书后,转到 CA 证书绑定页面并重复步骤 4。
-
返回到安全性 > AAA - 应用程序流量 > 虚拟服务器页面。
注意:
如果您为虚拟服务器导入了有效的 CA 证书和服务器证书,则可以跳过步骤 1 和 2。
- 导航到 Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Policies(策略)> Authentication(身份验证)> Advanced Policies(高级策略),然后选择 Policy(策略)。
-
在“身份验证策略”页面上,执行以下操作之一:
- 要创建策略,请单击 Add(添加)。
- 要修改某个现有策略,请选择该策略,然后单击 Edit(编辑)。
-
在“创建身份验证策略”或“配置身份验证策略”页面上,键入或选择参数值。
- 名称:策略名称。您无法更改先前配置的策略的名称。
- 操作类型:身份验证操作的类型。
- 操作:策略匹配时要执行的身份验证操作的名称。您可以选择现有的身份验证操作,也可以单击“添加”并创建操作。
- 表达式:选择要对指定操作应用的连接的规则。规则可以简单(“true”将选择所有流量),也可以复杂。要输入表达式,请先在“表达式”窗口下方最左边的下拉列表中选择表达式的类型,然后直接在表达式文本区域中键入表达式,或者单击“添加”打开“添加表达式”对话框并使用其中的下拉列表定义表达式。
- 日志操作:身份验证请求与此策略匹配时使用的审计操作的名称。您可以选择现有审计操作,也可以单击“添加”以创建操作。
- 注释:您可以键入注释来描述此身份验证策略所适用的流量类型。此字段为可选字段。
- 单击 Create(创建)或 OK(确定),然后单击 Close(关闭)。
客户证书直通
现在可以将 NetScaler 配置为将客户端证书传递到需要客户端证书才能进行用户身份验证的受保护应用程序。ADC 首先对用户进行身份验证,然后将客户端证书插入请求并将其发送到应用程序。此功能是通过添加适当的 SSL 策略来配置的。
当用户出示客户端证书时,此功能的确切行为取决于 VPN 虚拟服务器的配置。
- 如果 VPN 虚拟服务器配置为接受客户端证书但不需要这些证书,ADC 会将证书插入到请求中,然后将请求转发给受保护的应用程序。
- 如果 VPN 虚拟服务器禁用了客户端证书身份验证,ADC 将重新协商身份验证协议并重新对用户进行身份验证,然后再将客户端证书插入标头并将请求转发到受保护的应用程序。
- 如果 VPN 虚拟服务器配置为要求客户端证书身份验证,ADC 将使用客户端证书对用户进行身份验证,然后在标头中插入证书并将请求转发给受保护的应用程序。
在所有这些情况下,您都可以按如下方式配置客户端证书直通。
使用 CLI 创建和配置客户端证书直通
在命令提示符下,键入以下命令:
add vpn vserver <name> SSL <IP> 443
<!--NeedCopy-->
对于 name,请替换虚拟服务器的名称。名称必须包含一到 127 个 ASCII 字符,以字母或下划线 (_) 开头,并且只包含字母、数字和下划线、井号 (#)、句点 (.)、空格、冒号 (:)、at (@)、equals (=) 和连字符 (-)。对于 <IP>
,请替换分配给虚拟服务器的 IP 地址。
set ssl vserver <name> -clientAuth ENABLED -clientCert <clientcert>
<!--NeedCopy-->
对于 <name>
,请替换您创建的虚拟服务器的名称。对于 <clientCert>
,请替换以下值之一:
- disabled - 禁用 VPN 虚拟服务器上的客户端证书身份验证。
- mandatory - 将 VPN 虚拟服务器配置为要求客户端证书进行身份验证。
- optional - 将 VPN 虚拟服务器配置为允许客户端证书身份验证,但不要求进行身份验证。
bind vpn vserver <name> -policy local
<!--NeedCopy-->
对于 <name>
,请替换您创建的 VPN 虚拟服务器的名称。
bind vpn vserver <name> -policy cert
<!--NeedCopy-->
对于 <name>
,请使用您创建的 VPN 虚拟服务器的名称替换。
bind ssl vserver <name> -certkeyName <certkeyname>
<!--NeedCopy-->
对于 <name>
,请替换您创建的虚拟服务器的名称。对于 <certkeyName>
,请替换客户端证书密钥。
bind ssl vserver <name> -certkeyName <cacertkeyname> -CA -ocspCheck Optional
<!--NeedCopy-->
对于 <name>
,请替换您创建的虚拟服务器的名称。对于 <cacertkeyName>
,请替换 CA 证书密钥。
add ssl action <actname> -clientCert ENABLED -certHeader CLIENT-CERT
<!--NeedCopy-->
对于 <actname>
,请替换 SSL 操作的名称。
add ssl policy <polname> -rule true -action <actname>
<!--NeedCopy-->
对于 <polname>
,请替换新 SSL 策略的名称。对于 <actname>
,请替换您创建的 SSL 操作的名称。
bind ssl vserver <name> -policyName <polname> -priority 10
<!--NeedCopy-->
对于 <name>
,请替换 VPN 虚拟服务器的名称。
示例
add vpn vserver vs-certpassthru SSL 10.121.250.75 443
set ssl vserver vs-certpassthru -clientAuth ENABLED -clientCert optional
bind vpn vserver vs-certpassthru -policy local
bind vpn vserver vs-certpassthru -policy cert
bind ssl vserver vs-certpassthru -certkeyName mycertKey
bind ssl vserver vs-certpassthru -certkeyName mycertKey -CA -ocspCheck Optional
add ssl action act-certpassthru -clientCert ENABLED -certHeader CLIENT-CERT
add ssl policy pol-certpassthru -rule true -action act-certpassthru
bind ssl vserver vs-certpassthru -policyName pol-certpassthru -priority 10
<!--NeedCopy-->