Citrix ADC

配置 SSL 操作以转发客户端流量

解析客户端 hello 消息时,Citrix ADC 设备可以使用与 SSL 策略关联的 SSL 转发操作转发客户端流量。该策略在客户端 hello 请求绑定点绑定到虚拟服务器。以下各节将讨论可以使用转发的一些使用案例。有关在 Citrix ADC 设备不支持密码时配置 SSL 转发操作的信息,请参阅 配置 SSL 操作以在 ADC 不支持密码时转发客户端流量

下图解释了交通流量。在此图中,转发虚拟服务器的类型为 SSL_TCP。

SSL 转发操作流量

  1. 客户端启动 SSL 握手,并将客户端问候消息发送到 ADC 设备。
  2. 设备使用客户端 hello 消息中的参数评估已配置的策略。
  3. 如果策略的评估结果为 false,则解密的流量将转发到 HTTP 服务,然后转发到后端服务器。
  4. 如果策略的计算结果为 true,则流量将转发到操作中定义的转发虚拟服务器。
  5. 向前虚拟服务器完成与客户端的握手。
  6. 所有满足策略规则的流量都将通过绑定到转发虚拟服务器的服务转发到后端服务。

如果设备没有特定于域的 (SNI) 证书,则配置 SSL 操作以转发客户端流量

注意: 此功能可在版本 12.1 版本 49.x 及更高版本中使用。

在客户端 hello 消息中,您可能会收到对设备上不可用证书的域的请求。在这种情况下,您可以配置 SSL 操作以将客户端流量转发到其他虚拟服务器。在以下示例中,我们将 SSL 虚拟服务器配置为转发虚拟服务器。此设置可确保因原始虚拟服务器上缺少 SNI 证书而失败的所有连接在转发虚拟服务器上都成功。

执行以下步骤:

  1. 添加 SSL 类型的负载平衡虚拟服务器(例如,vMain)。此虚拟服务器上接收客户端流量。
  2. 添加服务器和 CA 证书并将它们绑定到 SSL 虚拟服务器。
  3. 添加带端口 443 的 SSL 服务。
  4. 将此服务绑定到 SSL 虚拟服务器。
  5. 添加另一个类型为 SSL/SSL_TCP/TCP/SSL_BRIDGE 的负载平衡虚拟服务器以将流量转发到。(例如, fwd-vserver)。
  6. 添加服务并将其绑定到此虚拟服务器。
  7. 在“forward”参数中添加指定 SSL 虚拟服务器 fwd-vserver 的 SSL 转发操作。
  8. 如果客户端 hello 消息中收到特定域名 (SNI),则添加 SSL 策略(例如 pol-ssl-sni),指定上述操作。
  9. 将此策略绑定到 CLIENTHELLO_REQ 的 SSL 虚拟服务器。
  10. 保存配置。

使用 CLI 进行配置

要将流量转发到的 SSL 虚拟服务器的配置:

add lb vserver fwd-vserver SSL 198.51.100.20 443
add ssl certkey sv -cert complete/server/server_rsa_2048.pem -key complete/server/server_rsa_2048.ky
add ssl certkey cacert -cert SHA256-RSA-PEM_512.pem -key SHA256-RSA-PEM_512.ky
bind ssl vserver fwd-vserver -certkeyName sv
bind ssl vserver fwd-vserver -certkeyName cacert -CA
add service ssl-service2 198.51.100.18 SSL 443
bind lb vserver fwd-vserver ssl-service2
<!--NeedCopy-->

最初接收客户端流量的 SSL 虚拟服务器的配置:

add service ssl-service 198.51.100.5 SSL 443
add lb vserver vMain SSL 198.51.100.25 443
bind ssl vserver vMain -certkeyName sv
bind lb vserver vMain ssl-service
set ssl vserver vMain -sni ENABLED
add ssl certKey snicert2 -cert /nsconfig/ssl/complete/SNI/server/serverabc.pem -key /nsconfig/ssl/complete/SNI/server/serverabc.ky
add ssl certKey snicert -cert /nsconfig/ssl/complete/SNI/server/serverabcnetscaler.pem -key /nsconfig/ssl/complete/SNI/server/serverabcnetscaler.ky
bind ssl vserver vMain -certkeyName snicert -sniCert
bind ssl vserver vMain -certkeyName snicert2 -sniCert
<!--NeedCopy-->

SSL 虚拟服务器 vMain 的策略配置:

add ssl action act_ssl_fwd -forward fwd-vserver
add ssl policy pol-ssl-sni -rule client.ssl.client_hello.sni.contains("xyz") -action act_ssl_fwd
bind ssl vserver vMain -policyName pol-ssl-sni -type CLIENTHELLO_REQ -priority 1
<!--NeedCopy-->
sh ssl vserver vMain

    Advanced SSL configuration for VServer vMain:
    DH: DISABLED
    DH Private-Key Exponent Size Limit: DISABLED    Ephemeral RSA: ENABLED  Refresh Count: 0
    Session Reuse: ENABLED  Timeout: 120 seconds
    Cipher Redirect: DISABLED
    SSLfwd-vserver Redirect: DISABLED
    ClearText Port: 0
    Client Auth: DISABLED
    SSL Redirect: DISABLED
    Non FIPS Ciphers: DISABLED
    SNI: ENABLED
    OCSP Stapling: DISABLED
    HSTS: DISABLED
    HSTS IncludeSubDomains: NO
    HSTS Max-Age: 0
    SSLfwd-vserver: 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: sv    Server Certificate
2)  CertKey Name: snicert2  Server Certificate for SNI
3)  CertKey Name: snicert   Server Certificate for SNI


Data policy
1) Policy Name: pol-ssl-sni    Priority: 1



1) Cipher Name: DEFAULT
Description: Default cipher list with encryption strength >= 128bit
Done
<!--NeedCopy-->
sh ssl policy pol-ssl-sni
    Name: pol-ssl-sni
    Rule: client.ssl.client_hello.sni.contains("xyz")
    Action: act_ssl_fwd
    UndefAction: Use Global
    Hits: 0
    Undef Hits: 0


    Policy is bound to following entities
1)  Bound to: CLIENTHELLO_REQ VSERVER v1
    Priority: 1

Done
<!--NeedCopy-->
sh ssl action act_ssl_fwd
1)  Name: act_ssl_fwd
    Type: Data Insertion
    Forward to: fwd-vserver
    Hits: 0
    Undef Hits: 0
    Action Reference Count: 1
Done
<!--NeedCopy-->
sh ssl vserver fwd-vserver

    Advanced SSL configuration for VServer fwd-vserver:
    DH: DISABLED
    DH Private-Key Exponent Size Limit: DISABLED    Ephemeral RSA: ENABLED  Refresh Count: 0
    Session Reuse: ENABLED  Timeout: 120 seconds
    Cipher Redirect: DISABLED
    SSLfwd-vserver Redirect: DISABLED
    ClearText Port: 0
    Client Auth: DISABLED
    SSL Redirect: DISABLED
    Non FIPS Ciphers: DISABLED
    SNI: DISABLED
    OCSP Stapling: DISABLED
    HSTS: DISABLED
    HSTS IncludeSubDomains: NO
    HSTS Max-Age: 0
    SSLfwd-vserver: 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: sv    Server Certificate



1)  Cipher Name: DEFAULT
    Description: Default cipher list with encryption strength >= 128bit
Done

<!--NeedCopy-->

配置 SSL 操作以根据客户端 hello 消息的 ALPN 扩展中的应用程序协议转发客户端流量

注意: 此功能在 13.0 版本 61.x 及更高版本中受支持。

Citrix ADC 设备可以在解析消息进行策略评估的同时识别客户端 Hello 消息的 ALPN 扩展中提供的协议。在客户 Hello 消息的 ALPN 分机中标识协议的规则是 client.ssl.client_hello.alpn.has_nextprotocol<protocol_name>。将“转发”类型 SSL 操作与策略相关联,以将数据包转发到转发虚拟服务器。转发虚拟服务器可以是 SSL、SSL_TCP、SSL_BRIDGE 或 TCP 类型。

要协商由 SSL_TCP 虚拟服务器处理的连接的 ALPN 扩展中的应用程序协议,将向前端 SSL 配置文件添加一个参数 alpnProtocol 。该参数支持的值为 HTTP1.1、HTTP2 或 NONE(默认值)。如果客户端 hello 消息的 ALPN 扩展中收到相同的协议,则仅协商 SSL 配置文件中指定的协议。用于策略评估的 ALPN 扩展支持的最大长度为 4096 字节。

将 ALPN 扩展中包含 HTTP2 协议的所有请求转发到 SSL_TCP 虚拟服务器的配置示例

要将流量转发到的 SSL_TCP 虚拟服务器是 fwd-vserver-1

要将流量转发到的 SSL 虚拟服务器的配置:

add lb vserver fwd-vserver-1 SSL_TCP 198.51.100.20 443
add ssl certkey sv -cert complete/server/server_rsa_2048.pem -key complete/server/server_rsa_2048.ky
add ssl certkey rootCA -cert SHA256-RSA-PEM_512.pem -key SHA256-RSA-PEM_512.ky
bind ssl vserver fwd-vserver-1 -certkeyName sv
bind ssl vserver fwd-vserver-1 -certkeyName rootCA -CA
add service ssl-tcp-service 198.51.100.14 SSL_TCP 443
bind lb vserver fwd-vserver-1 ssl-tcp-service
<!--NeedCopy-->

最初接收客户端流量的 SSL 虚拟服务器的配置:

add service ssl-service 198.51.100.5 SSL 443
add lb vserver vMain-alpn SSL 198.51.100.25 443
bind ssl vserver vMain-alpn -certkeyName sv
bind lb vserver vMain-alpn ssl-service
<!--NeedCopy-->

SSL 虚拟服务器 vMain-alpn 的策略配置:

add ssl action forward-action-alpn -forward fwd-vserver-1
add ssl policy pol-ssl-alpn -rule "client.ssl.client_hello.alpn.has_nextprotocol("h2")" -action forward-action-alpn
bind ssl vserver VMain-alpn -policyName pol-ssl-alpn -priority 2 -type CLIENTHELLO_REQ
<!--NeedCopy-->
sh ssl vserver vMain-alpn

    Advanced SSL configuration for VServer vMain-alpn:
    DH: DISABLED
    DH Private-Key Exponent Size Limit: DISABLED    Ephemeral RSA: ENABLED  Refresh Count: 0
    Session Reuse: ENABLED  Timeout: 120 seconds
    Cipher Redirect: DISABLED
    ClearText Port: 0
    Client Auth: DISABLED
    SSL Redirect: DISABLED
    Non FIPS Ciphers: DISABLED
    SNI: DISABLED
    OCSP Stapling: DISABLED
    HSTS: DISABLED
    HSTS IncludeSubDomains: NO
    HSTS Max-Age: 0
    HSTS Preload: NO
    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: sv    Server Certificate


    Data policy
1)  Policy Name: pol-ssl-alpn   Priority: 2



1)  Cipher Name: DEFAULT
    Description: Default cipher list with encryption strength >= 128bit
 Done
<!--NeedCopy-->
sh ssl policy pol-ssl-alpn
    Name: pol-ssl-alpn
    Rule: client.ssl.client_hello.alpn.has_nextprotocol("h2")
    Action: forward-action-alpn
    UndefAction: Use Global
    Hits: 0
    Undef Hits: 0


    Policy is bound to following entities
1)  Bound to: CLIENTHELLO_REQ VSERVER VMain-alpn
    Priority: 2

 Done
<!--NeedCopy-->
sh ssl action forward-action-alpn
1)  Name: forward-action-alpn
    Type: Data Insertion
    Forward to: fwd-vserver-1
    Hits: 0
    Undef Hits: 0
    Action Reference Count: 1
 Done
<!--NeedCopy-->
sh ssl vserver fwd-vserver-1
    Advanced SSL configuration for VServer fwd-vserver-1:
    DH: DISABLED
    DH Private-Key Exponent Size Limit: DISABLED    Ephemeral RSA: ENABLED  Refresh Count: 0
    Session Reuse: ENABLED  Timeout: 120 seconds
    Cipher Redirect: DISABLED
    ClearText Port: 0
    Client Auth: DISABLED
    SSL Redirect: DISABLED
    Non FIPS Ciphers: DISABLED
    SNI: DISABLED
    OCSP Stapling: DISABLED
    HSTS: DISABLED
    HSTS IncludeSubDomains: NO
    HSTS Max-Age: 0
    HSTS Preload: NO
    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: sv    Server Certificate
2)  CertKey Name: rootCA    CA Certificate  OCSPCheck: Optional CA_Name Sent



1)  Cipher Name: DEFAULT
    Description: Default cipher list with encryption strength >= 128bit
 Done
 <!--NeedCopy-->