客户端身份验证或双向 TLS (mTL)
在典型的 SSL 事务中,通过安全连接连接到服务器的客户端会检查服务器的有效性。为此,它会在启动 SSL 事务之前检查服务器的证书。但是,有时您可能希望将服务器配置为对与其连接的客户端进行身份验证。
注意: 从版本 13.0 build 41.x 开始,Citrix ADC 设备支持分段为多条记录的证书请求消息,前提是总大小在 32 KB 以内。早些时候,支持的最大大小为16 KB,并且不支持碎片。
在 SSL 虚拟服务器上启用客户端身份验证后,Citrix ADC 设备会在 SSL 握手期间要求提供客户端证书。设备会检查客户端提供的证书是否存在正常限制,例如颁发者签名和到期日期。
注意:
要使设备验证颁发者签名,颁发客户端证书的 CA 的证书必须为:
- 已安装在设备上。
- 绑定到客户端正在与之进行交易的虚拟服务器。
如果证书有效,设备将允许客户端访问所有安全资源。但是,如果证书无效,设备将在 SSL 握手期间删除客户端请求。
设备通过首先形成证书链来验证客户端证书,从客户端证书开始,最后是客户端的根 CA 证书(例如 Verisign)。根 CA 证书可能包含一个或多个中间 CA 证书(如果根 CA 不直接颁发客户端证书)。
在 Citrix ADC 设备上启用客户端身份验证之前,请确保客户端上安装了有效的客户端证书。然后,为处理事务的虚拟服务器启用客户端身份验证。最后,将颁发客户端证书的 CA 的证书绑定到设备上的虚拟服务器。
注意: Citrix ADC MPX 设备支持从 512 位到 4096 位的证书密钥对大小。必须使用以下哈希算法之一对证书进行签名:
- MD5
- SHA-1
- SHA-224
- SHA-256
- SHA-384
- SHA-512
在 SDX 设备上,如果将 SSL 芯片分配给 VPX 实例,则适用 MPX 设备的证书密钥对大小支持。否则,将适用 VPX 实例的常规证书密钥对大小支持。
Citrix ADC 虚拟设备(VPX 实例)支持至少 512 位的证书,最大为以下大小:
- 虚拟服务器上的 4096 位服务器证书
- 服务上的 4096 位客户端证书
- 4096 位 CA 证书
- 物理服务器上的 4096 位证书
注意: 从版本 13.0 build 79.x 开始,在 VPX 平台上进行 SSL 握手期间,支持使用 4096 位 RSA 客户端证书进行客户端身份验证。
备注:
- 有关 MPX FIPS 限制,请参阅 MPX FIPS 限制。
- 有关 SDX FIPS 限制,请参阅 SDX FIPS 限制。
提供客户端证书
在配置客户端身份验证之前,必须在客户端上安装有效的客户端证书。客户端证书包含有关与 Citrix ADC 设备创建安全会话的特定客户端系统的详细信息。每个客户端证书都是唯一的,只能由一个客户端系统使用。
无论是从 CA 获取客户端证书、使用现有客户端证书还是在 Citrix ADC 设备上生成客户端证书,都必须将证书转换为正确的格式。在 Citrix ADC 设备上,证书以 PEM 或 DER 格式存储,必须先转换为 PKCS #12 格式,然后才能将其安装到客户端系统上。转换证书并将其传输到客户端系统后,请确保该证书已安装在该系统上,并为客户端应用程序进行了配置。应用程序(例如 Web 浏览器)必须是 SSL 事务的一部分。
有关如何将证书从 PEM 或 DER 格式转换为 PKCS #12 格式的说明,请参阅 导入和转换 SSL 文件。
有关如何生成客户端证书的说明,请参阅 创建证书。
启用基于客户端证书的身份验证
默认情况下,Citrix ADC 设备上的客户端身份验证处于禁用状态,并且所有 SSL 事务在不对客户端进行身份验证的情况下继续进行。作为 SSL 握手的一部分,您可以将客户端身份验证配置为可选或强制性身份验证。
如果客户端身份验证是可选的,则设备会请求客户端证书,但即使客户端出示了无效的证书,也会继续进行 SSL 事务。如果客户端身份验证是强制性的,则在 SSL 客户端未提供有效证书时,设备将终止 SSL 握手。
注意: Citrix 建议您在将基于客户端证书的身份验证检查更改为可选之前定义适当的访问控制策略。
注意: 客户端身份验证是为单个 SSL 虚拟服务器配置的,而不是全局的。
使用 CLI 启用基于客户端证书的身份验证
在命令提示符下,键入以下命令以启用基于客户端证书的身份验证并验证配置:
set ssl vserver <vServerName> [-clientAuth (ENABLED | DISABLED)] [-clientCert (MANDATORY | OPTIONAL)]
show ssl vserver <vServerName>
<!--NeedCopy-->
示例:
set ssl vserver vssl -clientAuth ENABLED -clientCert Mandatory
Done
show ssl vserver vssl
Advanced SSL configuration for VServer vssl:
DH: DISABLED
Ephemeral RSA: ENABLED Refresh Count: 0
Session Reuse: ENABLED Timeout: 120 seconds
Cipher Redirect: DISABLED
SSLv2 Redirect: DISABLED
ClearText Port: 0
Client Auth: ENABLED Client Cert Required: Mandatory
SSL Redirect: DISABLED
Non FIPS Ciphers: DISABLED
SNI: DISABLED
OCSP Stapling: DISABLED
HSTS: DISABLED
HSTS IncludeSubDomains: NO
HSTS Max-Age: 0
SSLv2: DISABLED SSLv3: ENABLED TLSv1.0: ENABLED TLSv1.2: ENABLED TLSv1.2: ENABLED
1) CertKey Name: sslckey Server Certificate
1) Policy Name: client_cert_policy Priority: 0
1) Cipher Name: DEFAULT
Description: Predefined Cipher Alias
Done
<!--NeedCopy-->
使用 GUI 启用基于客户端证书的身份验证
- 导航到 流量管理 > 负载平衡 > 虚拟服务器,然后打开虚拟服务器。
- 在 “SSL 参数” 部分中,选择 “客户端身份验证”,然后在 “客户端证书” 列表中选择 “强制”。
注意:
如果客户端身份验证设置为强制且客户端证书包含策略扩展,则证书验证将失败。从 12.0-56.x 版本开始,您可以在前端 SSL 配置文件中设置参数以跳过此检查。默认情况下,该参数处于禁用状态。也就是说,默认情况下执行检查。
使用 CLI 在客户端身份验证期间跳过策略扩展检查
在命令提示符下,键入:
set ssl profile ns_default_ssl_profile_frontend -clientauth ENABLED -skipClientCertPolicyCheck ENABLED
Parameter
skipClientCertPolicyCheck
Control policy extension check, if present inside the X509 certificate chain. Applicable only if client authentication is enabled and client certificate is set to mandatory. Possible values functions as follows:
- ENABLED: Skip the policy check during client authentication.
- DISABLED: Perform policy check during client authentication.
Possible values: ENABLED, DISABLED
Default: DISABLED
<!--NeedCopy-->
使用 GUI 在客户端身份验证期间跳过策略扩展检查
- 导航到 系统 > 配置文件 > SSL 配置文件。
- 创建新的前端配置文件或编辑现有的前端配置文件。
- 验证是否已启用客户端身份验证,并将客户端证书设置为必需。
- 选择 跳过客户端证书策略检查。
将 CA 证书绑定到虚拟服务器
证书存在于 Citrix ADC 设备上的 CA 必须颁发用于客户端身份验证的客户端证书。将此证书绑定到执行客户端身份验证的 Citrix ADC 虚拟服务器。
将 CA 证书绑定到 SSL 虚拟服务器,以便设备在验证客户端证书时可以形成完整的证书链。否则,证书链形成将失败,并且即使其证书有效,客户端也会被拒绝访问。
您可以按任意顺序将 CA 证书绑定到 SSL 虚拟服务器。设备在客户端证书验证期间形成正确的顺序。
例如,如果客户端提供由 CA_A颁发的证书,其中 CA_A 是一个中间 CA,其证书由 CA_B颁发,其证书又由受信任的根 CA Root_ca颁发,该证书包含所有这三个证书都必须绑定到 Citrix ADC 设备上的虚拟服务器。
有关将一个或多个证书绑定到虚拟服务器的说明,请参阅 将证书密钥对绑定到 SSL 虚拟服务器。
有关创建证书链的说明,请参阅 创建证书链。
对客户端证书验证进行更严格的控制
如果由单个 root-CA 颁发,Citrix ADC 设备将接受有效的中间 CA 证书。也就是说,如果只有 Root-CA 证书绑定到虚拟服务器,并且 Root-CA 验证随客户端证书一起发送的任何中间证书,则设备信任证书链,并且握手成功。
但是,如果客户端在握手中发送证书链,则除非该证书绑定到 SSL 虚拟服务器,否则无法使用 CRL 或 OCSP 响应程序验证任何中间证书。因此,即使其中一个中间证书被吊销,握手也是成功的。作为握手的一部分,SSL 虚拟服务器会发送绑定到它的 CA 证书列表。要进行更严格的控制,可以将 SSL 虚拟服务器配置为仅接受由绑定到该虚拟服务器的其中一个 CA 证书签名的证书。若要执行此操作,您必须启用绑定到虚拟服务器的 SSL 配置文件中的 ClientAuthUseBoundCAChain 设置。如果绑定到虚拟服务器的 CA 证书之一尚未签署客户端证书,握手将失败。
例如,假设两个客户端证书 clientcert1 和 clientcert2 分别由 int-ca-a 和 int-ca-B 的中间证书签名。中间证书由根证书 root-CA 签名。int-ca-a 和 root-CA 绑定到 SSL 虚拟服务器。在默认情况下(禁用 ClientAuthUseBoundCAChain),将接受 clientcert1 和 clientcert2。但是,如果启用了 ClientAuthUseBoundCAChain,Citrix ADC 设备将仅接受 clientcert1。
使用 CLI 对客户端证书验证启用更严格的控制
在命令提示符下,键入:
set ssl profile <name> -ClientAuthUseBoundCAChain Enabled
<!--NeedCopy-->
使用 GUI 对客户端证书验证启用更严格的控制
- 导航到 “ 系统 ” > “ 配置文件”,选择 “ SSL 配置文件 ” 选项卡,然后创建 SSL 配置文件,或选择现有配置文件。
- 选择 使用绑定 CA 链启用客户端身份验证。