Citrix ADC

SSL内置操作和用户定义的操作

除非您只需要策略中的内置操作,否则您必须在创建策略之前创建操作。然后,您可以在创建策略时指定操作。内置操作有两种类型:控制操作和数据操作。您可以在控制策略中使用控制操作,在数据策略中使用数据操作。

内置的控制操作是:

  • 多客户端——执行客户端证书身份验证。(TLS1.3不支持)
  • NOCLIENTAUTH——不执行客户端证书身份验证。(TLS1.3不支持)

内置的数据操作是:

  • 重置,通过向客户端发送RST数据包来关闭连接。
  • 下降——从客户端删除所有数据包。连接保持打开状态,直到客户端关闭它。
  • 等待——转发数据包而不对其执行任何操作。

注意:TLS 1.3协议不支持客户端身份验证的任何相关操作,例如ClientCertRiscoity和sslLogProfile。

您可以创建用户定义的数据操作。如果启用客户端身份验证,则可以创建SSL操作,以便在将请求转发到Web服务器之前将客户端证书数据插入到请求标头。

如果策略评估导致未定义状态,则执行UNDEF操作。对于数据策略或控制策略,您可以将重置,放弃或等待指定为UNDEF操作。对于控制策略,您还可以选择指定DOCLIENTAUTH或NOCLIENTAUTH。

策略中的内置操作示例

在以下示例中,如果客户端发送的密码不是出口类别密码,Citrix ADC设备将请求客户端身份验证。客户端必须为成功的交易提供有效证书。

add ssl policy pol1 -rule CLIENT.SSL.CIPHER_EXPORTABLE。NOT -reqAction DOCLIENTAUTH 

以下示例假定已启用客户端身份验证。

如果用户提供的证书中的版本与策略中的版本匹配,则不会执行任何操作并转发数据包:

add ssl policy pol1 -rule CLIENT.SSL.CLIENT_CERT.VERSION.EQ(2) -reqAction NOOP 

如果用户提供的证书中的版本与策略中的版本匹配,则连接将被删除:

add ssl policy pol1 -rule CLIENT.SSL.CLIENT_CERT.VERSION.EQ(2) -reqAction DROP 

如果用户提供的证书中的版本与策略中的版本匹配,则重置连接:

add ssl policy pol1 -rule CLIENT.SSL.CLIENT_CERT.VERSION.EQ(2) -reqAction RESET 

基于策略的客户端身份验证客户端证书验证

配置基于策略的客户端身份验证时,可以将客户端证书验证设置为强制或选项。默认值是强制性的。

使用CLI将客户端证书验证设置为可选的

在命令提示符下,键入:

add ssl action  ((-clientAuth (DOCLIENTAUTH | NOCLIENTAUTH) [-clientCertVerification (Mandatory | Optional)] 

示例:

添加ssl动作sslact -clientauth DOCLIENTAUTH -clientcertverification可选

使用GUI将客户端证书验证设置为可选的

  1. 导航到交通管理(流量管理)> SSL >政策(策略)

  2. SSL操作选项卡上,单击添加

  3. 指定名称,然后在“客户端证书验证“列表中选择”可选”。

用户定义的SSL操作

除了内置操作之外,您还可以根据部署配置其他SSL操作。这些操作称为用户定义的操作。

使用CLI配置用户定义的SSL操作

在命令提示符下,键入以下命令以配置操作并验证配置:

add SSL action  -clientAuth(DOCLIENTAUTH | NOCLIENTAUTH) -clientCert (ENABLED | DISABLED) certHeader  - clienttheader  -clientCertSerialNumber (ENABLED | DISABLED) -certSerialHeader  -clientCertSubject (ENABLED | DISABLED) -certSubjectHeader  -clientCertHash (ENABLED | DISABLED) -certHashHeader  .添加SSL操作-clientCertIssuer (ENABLED | DISABLED) -certIssuerHeader  -sessionID (ENABLED | DISABLED) -sessionIDheader  -cipher (ENABLED | DISABLED) -cipherHeader  -clientCertNotBefore (ENABLED | DISABLED) -certNotBeforeHeader  - clientcertnotnotafter (ENABLED | DISABLED) -certNotAfterHeader  - owassupport (ENABLED | DISABLED)
Show SSL action [] 

示例:

add ssl action action - ssl -clientCert -clientCert ENABLED -certHeader "X-Client-Cert" 
show ssl action action - ssl - clientcert 1) Name: action - ssl - clientcert Data Insertion action: Cert Header: ENABLED Cert Tag: X-Client-Cert Done 

使用GUI配置用户定义的SSL操作

导航到流量管理> SSL >策略,然后在作选项卡上单击添加

配置SSL操作以将客户端流量转发到另一个虚拟服务器

管理员可以配置SSL操作,将SSL虚拟服务器上收到的客户端流量转发到另一个虚拟服务器,以避免SSL卸载。或用于终止ADC设备上的连接。此虚拟服务器可以是SSL, TCP或SSL_BRIDGE。例如,如果出现以下任何情况,管理员可以选择将请求转发到另一个虚拟服务器进行进一步操作,而不是终止连接:

  • 设备没有证书。
  • 设备不支持特定的密码。

为了实现上述目标,添加了一个新的绑定点“CLIENTHELLO_REQ”,以便在收到客户端你好时评估客户端流量。如果在解析客户端你好后绑定到接收客户端流量的虚拟服务器的策略计算结果为真,则流量将转发到另一个虚拟服务器。如果此虚拟服务器为SSL类型,则执行握的手。如果此虚拟服务器类型为TCP或SSL_Bridge,则后端服务器执行握的手。

在-49年12.1。x版中,只支持“CIENTHELLO_REQ”绑定点的转发和重置操作。以下表达式前缀可用:

  • CLIENT.SSL.CLIENT_HELLO.CIPHERS.HAS_HEXCODE
  • CLIENT.SSL.CLIENT_HELLO.CLIENT_VERSION
  • CLIENT.SSL.CLIENT_HELLO.IS_RENEGOTIATE
  • CLIENT.SSL.CLIENT_HELLO.IS_REUSE
  • CLIENT.SSL.CLIENT_HELLO.IS_SCSV
  • CLIENT.SSL.CLIENT_HELLO.IS_SESSION_TICKET
  • CLIENT.SSL.CLIENT_HELLO.LENGTH
  • CLIENT.SSL.CLIENT_HELLO.SNI
  • CLIENT.SSL.CLIENT_HELLO.ALPN。HAS_NEXTPROTOCOL(从版本13.0构建61. x)

有关这些前缀的描述,请参阅高级策略表达式:解析SSL

将参数向前添加到添加SSL行动命令中,并将新绑定点CLIENTHELLO_REQ添加到结合ssl vserver命令中。

使用CLI进行配置

在命令提示符下,键入:

add ssl action  -forward  add ssl policy  -rule  -action  bind ssl vserver  -policyName  -priority  -type  

示例

add ssl action act1 -forward v2 add ssl policy pol1 -rule client.ssl.client_hello.ciphers.has_hexcode(0x002f) -action act1 bind ssl vserver v1 -policyName pol1 -priority 1 -type CLIENTHELLO_REQ 

使用GUI进行配置

导航到交通管理(流量管理)> SSL >政策(策略)

创建SSL操作

  1. SSL操作中,单击添加
  2. 在“创建SSL操作“中,指定操作的名称。
  3. 在“转发操作虚拟服务器“中,选择现有虚拟服务器或添加新的虚拟服务器以将流量转发到。
  4. 或者,设置其他参数。
  5. 单击创建

创建SSL策略

  1. SSL策略中,单击添加
  2. 创建SSL策略中,指定策略的名称。
  3. 在“作“中,选择您之前创建的操作。
  4. 表达式编辑器中,输入要求计算的规则。
  5. 单击创建

创建或添加虚拟服务器和绑定策略

  1. 导航到流量管理>负载平衡>虚拟服务器
  2. 添加或选择虚拟服务器。
  3. 高级设置中,单击SSL策略
  4. 单击SSL策略部分。
  5. 在“选择策略“中,选择您之前创建的策略。
  6. 策略绑定中,指定策略的优先级。
  7. 在“类型“中,选择”CLIENTHELLO_REQ”。
  8. 单击绑定(绑定)。
  9. 单击完成

有关最常用的用例的端到端配置,请参阅以下主题:

基于SNI的SSL操作选择性选择CA进行客户端身份验证

您只能在客户端证书请求中发送基于SNI(域)的CA列表,而不是绑定到SSL虚拟服务器的所有CA列表。例如,收到客户端你好时,仅发送基于SSL策略表达式(例如,SNI)的CA证书。要发送一组特定的证书,必须创建CA证书组。然后,将此组绑定到SSL操作,并将该操作绑定到SSL策略。如果在解析客户端你好后绑定到接收客户端流量的虚拟服务器的策略计算结果为真,则仅在客户端请求证书中发送特定的CA证书组。

之前,您必须将CA证书绑定到SSL虚拟服务器。通过此增强功能,您可以简单地添加CA证书组并将其关联到SSL操作。

注意:在SSL虚拟服务器上启用客户端身份验证和SNI。将正确的SNI证书绑定到虚拟服务器。

执行以下步骤:

  1. 添加CA证书组。

  2. 添加证书密钥对。

  3. 将证书密钥对绑定到此组。

  4. 添加SSL操作。

  5. 添加SSL策略。在策略中指定操作。

  6. 将策略绑定到SSL虚拟服务器。将绑定点指定为CLIENTHELLO_REQ。

使用CLI进行配置

在命令提示符下,按顺序键入以下命令:

add ssl caCertGroup  add ssl certkey  -cert  -key  bind ssl caCertGroup   add ssl action  -caCertGrpName  add ssl policy  -rule  -action  bind ssl vserver  -policyName  -priority  -typeCLIENTHELLO_REQ < !——NeedCopy >

示例:

add ssl certgroup ca_cert_group add ssl certkey ca_certkey1 -cert cacert1 -key cakey1 add ssl certkey ca_certkey2 -cert cacert2 -key cakey2 add ssl certkey snicert -cert snicert -key snikey bind ssl cacertGroup ca_cert_group ca_cert_group ca_certkey1 bind ssl cacertGroup ca_cert_group ca_certkey2 
1) CertKey NAME: ca_certkey1 CA证书CRLCheck:可选CA_Name Sent 2) CertKey NAME: ca_certkey2 CA证书CRLCheck:可选CA_Name Sent 
add ssl action pick_ca_group -cacertGrpName ca_cert_group 
sh dswaretool . sh ssl action pick_ca_group 1)名称:pick_ca_group类型:Data Insertion PickCaCertGroup: ca_cert_group Hits: 0 Undef Hits: 0 action Reference Count: 1 
add ssl policy snipolicy -rule client.ssl.client_hello. snipolicy .contains("abc") -action pick_ca_group bind ssl vserver v_SSL -policyName snipolicy -type CLIENTHELLO_REQ -priority 10 
sh ssl policy snipolicy名称:snipolicy规则:client.ssl.client_hello. snipolicy .contains("abc") Action: pick_ca_group undeffaction: Use Global Hits: 0 Undef Hits: 0 policy绑定到以下实体1)绑定到:CLIENTHELLO_REQ VSERVER v_SSL Priority: 10 
set ssl vserver v_SSL -clientauth ENABLED -SNIEnable ENABLED绑定ssl vserver v_SSL -certkeyName snicert -sniCert 
sh / opt / galax / gms / common / common / common / common / sh ssl vserver v_SSL高级ssl配置vserver v_SSL: DH: DISABLED DH Private-Key exponsize Limit: 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 cipher: DISABLED SNI: ENABLED OCSP Stapling: DISABLED HSTS: DISABLED HSTS inclesubdomains: NO HSTS Max-Age: 0 SSLv2: DISABLED SSLv3: ENABLED TLSv1.0: ENABLED TLSv1.1: ENABLED TLSv1.2: ENABLED TLSv1.3: DISABLED Push Encryption Trigger: Always Send Close-Notify: YES Strict Sig-Digest Check: DISABLED Zero RTT Early Data:DISABLED DHE Key Exchange With PSK: NO Tickets Per Authentication Context: 1 ECC Curve: P_256, P_384, P_224, P_521 1) CertKey Name: snicert Server Certificate for SNI Data policy 1) policy Name: snipolicy Priority: 10 1) Cipher Name: DEFAULT Description: DEFAULT Cipher list With encryption strength >= 128bit 

使用GUI进行配置

创建CA证书组并将证书绑定到组

  1. 导航到流量管理> SSL > CA证书组
  2. 单击”添加”并为组指定名称。
  3. 单击创建
  4. 选择CA证书组,然后单击显示绑定
  5. 单击绑定(绑定)。
  6. 在“CA证书绑定”页面中,选择现有证书或单击“添加”以添加新证书。
  7. 单击选择,然后单击绑定
  8. 若要绑定另一个证书,请重复步骤 5 到 7。
  9. 单击关闭

导航到交通管理(流量管理)> SSL >政策(策略)

创建SSL操作

  1. SSL操作中,单击添加
  2. 在“创建SSL操作“中,指定操作的名称。
  3. 在“转发操作虚拟服务器“中,选择现有虚拟服务器或添加要将流量转发到的虚拟服务器。
  4. 或者,设置其他参数。
  5. 单击创建

创建SSL策略

  1. SSL策略中,单击添加
  2. 创建SSL策略中,指定策略的名称。
  3. 在“作“中,选择之前创建的操作。
  4. 表达式编辑器中,输入要求计算的规则。
  5. 单击创建

创建或添加虚拟服务器和绑定策略

  1. 导航到流量管理>负载平衡>虚拟服务器
  2. 添加或选择虚拟服务器。
  3. 高级设置中,单击SSL策略
  4. 单击SSL策略部分。
  5. 在“选择策略“中,选择您之前创建的策略。
  6. 策略绑定中,指定策略的优先级。
  7. 在“类型“中,选择”CLIENTHELLO_REQ”。
  8. 单击绑定(绑定)。
  9. 单击完成

使用GUI解除绑定CA证书组

  1. 导航到流量管理> SSL > CA证书组
  2. 选择一个证书组,然后单击显示绑定
  3. 选择要从组中删除的证书,然后单击”取消绑定”。
  4. 如果提示进行确认,请单击“* *是”••。
  5. 单击关闭

使用GUI删除CA证书组

  1. 导航到流量管理> SSL > CA证书组
  2. 选择一个证书组,然后单击”删除”。
  3. 如果提示进行确认,请单击