客户端证书身份验证
包含敏感内容的网站,例如网上银行网站或包含员工个人信息的网站,有时需要客户证书才能进行身份验证。要配置身份验证、授权和审核以基于客户端证书属性对用户进行身份验证,请先在流量管理虚拟服务器上启用客户端身份验证,然后将根证书绑定到身份验证虚拟服务器。然后,您可以实现两个选项中的一个。您可以将身份验证虚拟服务器上的默认身份验证类型配置为 CERT,也可以创建一个证书操作,以定义 NetScaler 根据客户端证书对用户进行身份验证时必须执行的操作。无论哪种情况,您的身份验证服务器都必须支持 CRL。您可以将 ADC 配置为从 SubjectCN 字段或客户端证书中的其他指定字段中提取用户名。
当用户尝试登录到未配置身份验证策略且未配置全局级联的身份验证虚拟服务器时,将从证书的指定字段中提取用户名信息。如果提取了必填字段,则身份验证成功。如果用户在 SSL 握手期间未提供有效的证书,或者如果用户名提取失败,则身份验证将失败。验证客户端证书后,ADC 会向用户显示一个登录页面。
以下过程假定您已经创建了有效的身份验证、授权和审核配置,因此它们仅说明如何使用客户端证书启用身份验证。这些过程还假定您已获得根证书和客户端证书,并将它们放在 ADC 的 /nsconfig/ssl 目录中。
配置客户端证书身份验证
使用命令行界面配置身份验证、授权和审核客户端证书参数
在命令提示符下,按所示顺序键入以下命令以配置证书并验证配置:
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-->
使用配置实用程序配置身份验证、授权和审核客户端证书参数
- 导航到 安全 > AAA-应用程序流量 > 虚拟服务器。
- 在详细信息窗格中,选择要配置为处理客户端证书身份验证的虚拟服务器,然后单击编辑。
- 在配置页面的证书下,单击向右箭头 (>) 以打开 CA 证书密钥安装对话框。
- 在 CA 证书密钥对话框中,单击插入。
- 在 CA 证书密钥 - SSL 证书对话框中,单击安装。
- 在 Install Certificate(安装证书)对话框中,设置以下参数,其名称对应于 CLI 参数名称,如下所示:
- 证书密钥对名称*—证书密钥名称
- Certificate File Name(证书文件名称)—certFile
- Key File Name(密钥文件名)—keyFile
- Certificate Format(证书格式)—inform
- Password(密码)—password
- Certificate Bundle(证书包)— 捆绑包
- Notify When Expires(到期时通知)—expiryMonitor
- Notification Period(通知期限)—notificationPeriod
- 单击“安装”,然后单击“关闭”。
- 在 CA 证书密钥对话框的证书列表中,选择根证书。
- 单击保存。
- 单击 Back(返回)返回主配置屏幕。
- 导航到安全 > AAA-应用程序流量 > 策略 > 身份验证 > CERT。
- 在详细信息窗格中,选择要配置以处理客户端证书身份验证的策略,然后单击编辑。
- 在配置身份验证 CERT 策略对话框的“服务器”下拉列表中,选择配置为处理客户端证书身份验证的虚拟服务器。
- 单击“确定”。状态栏中将显示一条消息,指出配置已成功完成。
使用高级策略进行客户端证书身份验证
下面是使用高级策略在 NetScaler 上配置客户端证书身份验证的步骤。
- 导航到 Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Virtual Servers(虚拟服务器)。
-
在详细信息窗格中,选择要配置以处理客户端证书身份验证的虚拟服务器,然后单击 Edit(编辑)。
注意:
如果您为虚拟服务器导入了有效的 CA 证书和服务器证书,则可以跳过步骤 3 到步骤 10。
- 在 Configuration(配置)页面上的 Certificates(证书)下,单击 > 打开 CA Cert Key(CA 证书密钥)安装对话框。
- 在 CA Cert Key(CA 证书密钥)对话框中,单击 Insert(插入)。
- 在 CA Cert Key - SSL Certificates(CA 证书密钥 - SSL 证书)对话框中,单击 Install(安装)。
-
在 Install Certificate(安装证书)对话框中,设置以下参数,其名称对应于 CLI 参数名称,如下所示:
- Certificate-Key Pair Name(证书密钥对名称)—certkeyName
- Certificate File Name(证书文件名称)—certFile
- Key File Name(密钥文件名)—keyFile
- Certificate Format(证书格式)—inform
- Password(密码)—password
- Certificate Bundle(证书包)— 捆绑包
- Notify When Expires(到期时通知)—expiryMonitor
- Notification Period(通知期限)—notificationPeriod
- 单击 Install(安装),然后单击“Close”(关闭)。
- 在 CA Cert Key(CA 证书密钥)对话框中的“Certificate list”(证书列表)中,选择根证书。
- 单击保存。
- 单击 Back(返回)返回主配置屏幕。
- 导航到 Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Policies(策略)> Authentication(身份验证)> Advanced Policies(高级策略),然后选择 Policy(策略)。
-
在详细信息窗格中,执行以下操作之一:
- 要创建新策略,请单击 Add(添加)。
- 要修改某个现有策略,请选择该策略,然后单击 Edit(编辑)。
-
在 Create Authentication Policy(创建身份验证策略)或 Configure Authentication Policy(配置身份验证策略)对话框中,键入或选择参数的值。
- Name(名称)- 策略名称。无法对以前配置的策略进行更改。
- Action Type(操作类型)- 选择证书
- Action(操作)- 要与策略关联的身份验证操作(配置文件)。可以选择现有的身份验证操作,也可以单击加号并创建正确类型的新操作。
- Log Action(日志操作)- 要与策略关联的审核操作。可以选择现有审核操作,也可以单击加号并创建新操作。
- Expression(表达式)- 选择要应用指定操作的连接的规则。规则可以简单(“true”将选择所有流量),也可以复杂。可以通过以下方式输入表达式:先在“Expression”(表达式)窗口下方最左侧的下拉列表中选择表达式类型,然后直接在表达式文本区域中键入表达式,或者单击“Add”(添加)以打开“Add Expression”(添加表达式)对话框并使用其中的下拉列表来构造表达式。
- Comment(注释)- 可以键入描述此身份验证策略适用的流量类型的注释。可选。
- 单击 Create(创建)或 OK(确定),然后单击 Close(关闭)。如果您创建了策略,该策略将显示在“Authentication Policies”(身份验证策略)和“Servers”(服务器)页面中。
客户证书直通
现在可以将 NetScaler 配置为将客户端证书传递到需要客户端证书才能进行用户身份验证的受保护应用程序。ADC 首先对用户进行身份验证,然后将客户端证书插入请求并将其发送到应用程序。此功能是通过添加适当的 SSL 策略来配置的。
当用户出示客户端证书时,此功能的确切行为取决于 VPN 虚拟服务器的配置。
- 如果 VPN 虚拟服务器配置为接受客户端证书但不需要这些证书,ADC 会将证书插入到请求中,然后将请求转发给受保护的应用程序。
- 如果 VPN 虚拟服务器禁用了客户端证书身份验证,ADC 将重新协商身份验证协议并重新对用户进行身份验证,然后再将客户端证书插入标头并将请求转发到受保护的应用程序。
- 如果 VPN 虚拟服务器配置为要求客户端证书身份验证,ADC 将使用客户端证书对用户进行身份验证,然后在标头中插入证书并将请求转发给受保护的应用程序。
在所有这些情况下,您都可以按如下方式配置客户端证书直通。
使用命令行界面创建和配置客户端证书直通
在命令提示符下,键入以下命令:
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-->