ADC

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

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

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

SSL 转发操作流量

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

配置 SSL 操作以在设备没有特定域 (SNI) 证书时转发客户端流量

注意: 此功能在版本 12.1 build 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. 添加 SSL 转发操作,在“转发”参数 fwd-vserver 中指定 SSL 虚拟服务器。
  8. 添加 SSL 策略(例如, pol-ssl-sni),在客户端 hello 消息中收到特定域名 (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 设备在解析消息以进行策略评估时,可以识别客户端问候消息的 ALPN 扩展中的协议。在客户端 hello 消息的 ALPN 扩展中识别协议的规则是 client.ssl.client_hello.alpn.has_nextprotocol<protocol_name>。将“转发”类型 SSL 操作与将数据包转发到转发虚拟服务器的策略相关联。正向虚拟服务器的类型可以是 SSL、SSL_TCP、SSL_BRIDGE 或 TCP。

要协商 ALPN 扩展中由 SSL_TCP 虚拟服务器处理的连接的应用程序协议,需要在前端 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-->
配置 SSL 操作以转发客户端流量