Citrix ADC

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

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

内置控制操作是:

  • doclientauth -执行客户端证书认证。(TLS1.3不支持)
  • NOCLIENTAUTH-Do不进行客户端证书认证。(TLS1.3不支持)

内置的数据动作是:

  • 通过向客户端发送RST报文来重启连接。
  • DROP-Drop所有来自客户端的数据包。连接一直保持打开状态,直到客户端关闭它。
  • noop -转发报文,不对报文进行任何操作。

笔记:任何与客户端身份验证相关的操作,如clientCertVerification和ssllogProfile,都不受TLS 1.3协议的支持。

您可以创建用户定义的数据操作。如果启用了客户端认证,则可以创建一个SSL动作,在将请求转发到web服务器之前,将客户端证书数据插入请求头。

如果策略评估导致未定义的状态,则执行脱消操作。对于数据策略或控制策略,您可以指定重置,删除或诺普作为undef操作。对于控制策略,您还可以选择指定doclientauth或noclientauth。

政策中内置操作的示例

在下面的示例中,如果客户机发送的密码不是EXPORT类别密码,则Citrix ADC设备会请求客户机身份验证。客户端必须为成功的事务提供有效的证书。

添加SSL策略pol1 -rule client.ssl.cipher_exportable.not -reqaction doclientauth <! -  caltcopy  - >

下面的示例假设启用了客户端身份验证。

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

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 

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

在配置了基于策略的客户端认证后,可将客户端证书验证设置为必选项或选项。默认是强制性的。

2 .通过命令行设置客户端证书验证为可选

在命令提示符处,输入:

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

例子:

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

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

  1. 导航交通管理> SSL>政策

  2. 在这一点SSL的行为选项卡,单击添加

  3. 指定名称和中客户证书验证列表,选择可选

用户定义SSL行动

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

通过命令行配置用户自定义的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)
显示SSL动作[] <! -  caltcopy  - >

例子:

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 ',以在接收到客户端hello时评估客户端流量。如果解析客户端hello后,接收客户端流量的虚拟服务器绑定的策略为true,则流量将被转发到另一个虚拟服务器。如果这个虚拟服务器是SSL类型的,它将执行握手。如果此虚拟服务器是TCP或SSL_BRIDGE类型的,则后端服务器执行握手。

在-49年12.1版本。, CLIENTHELLO_REQ绑定点只支持forward和reset操作。可用的表达式前缀有:

  • 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版本build 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. 点击完成

关于最流行用例的端到端配置,请参阅以下主题:

SSL操作用于基于SNI选择性地选择ca进行客户端身份验证

您只能在客户端证书请求中仅基于SNI(域)的CA列表,而不是绑定到SSL虚拟服务器的所有CAS的列表。例如,当接收到客户端时,发送基于SSL策略表达式(例如,SNI)的CA证书。要发送特定的证书,必须创建CA证书组。然后,将此组绑定到SSL操作,并将操作绑定到SSL策略。如果绑定到虚拟服务器的策略接收客户端流量在解析客户端之后评估为true,则在客户端请求证书中仅发送特定的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 
SH SSL CacertGroup CA_CERT_GROUP CA组名称:CA_CERT_GROUP操作引用:1 1)CERTKEY名称:CA_CERTKEY1 CA证书CRLCHECK:CA_NAME SENT 2)CERTKEY名称:CA_CERTKEY2 CA CA证书CRLCHECK:OPTINAL CA_NAME SENT <! -  CALLCOPY  - >
添加SSL动作挑选_ca_group -cacertgrpname ca_cert_group <! -  caltcopy  - >
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 
添加SSL策略snipolicy -rule client.ssl.client_hello.sni.contains(“abc”)-action pick_ca_group绑定ssl vserver v_ssl -policyname snipolicy -type clienthe client hello_req -priority 10 <! -  caltcopy  - >
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证书组,并将证书绑定到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. 如果提示确认,请单击是的