Citrix ADC

SSL 組み込みアクションとユーザー定義アクション

ポリシーに組み込みアクションのみが必要な場合を除き、ポリシーを作成する前にアクションを作成する必要があります。その後、ポリシーを作成するときにアクションを指定できます。組み込みアクションには、制御アクションとデータアクションの 2 種類があります。コントロールポリシーではコントロールアクションを使用し、データポリシーではデータアクションを使用します。

組み込みの制御アクションは次のとおりです。

  • DOCLIENTAUTH-クライアント証明書認証を実行します。
  • NOCLIENTAUTHH:クライアント証明書認証を実行しません。

組み込みのデータアクションは次のとおりです。

  • RESET:クライアントに RST パケットを送信して接続を閉じます。
  • DROP:クライアントからのすべてのパケットをドロップします。接続は、クライアントが閉じるまで開いたままです。
  • NOOP:処理を実行せずにパケットを転送します。

ユーザー定義のデータアクションを作成できます。クライアント認証を有効にすると、要求を Web サーバに転送する前に、要求ヘッダーにクライアント証明書データを挿入する SSL アクションを作成できます。

ポリシー評価の結果が未定義の状態になった場合は、UNDEF アクションが実行されます。データポリシーまたは制御ポリシーのいずれの場合も、UNDEF アクションとして RESET、DROP、または NOOP を指定できます。制御ポリシーの場合は、DOCLIENTAUTH または NOCLIENTAUTH を指定することもできます。

ポリシー内の組み込みアクションの例

次の例では、クライアントがEXPORTカテゴリ以外の暗号を送信した場合、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 <name> ((-clientAuth ( DOCLIENTAUTH | NOCLIENTAUTH ) [-clientCertVerification ( Mandatory | Optional )]

例:

add ssl action sslact -clientauth DOCLIENTAUTH -clientcertverification OPTIONAL

GUI を使用してクライアント証明書の検証をオプションに設定する

  1. [トラフィック管理] > [SSL] > [ポリシー]に移動します。

  2. [SSL アクション] タブで、[追加] をクリックします。

  3. 名前を指定し、[クライアント証明書の検証] リストで [オプション] を選択します。

ユーザ定義の SSL アクション

組み込みアクションに加えて、展開に応じて他の SSL アクションを構成することもできます。これらのアクションをユーザー定義アクションと呼びます。

CLI を使用したユーザ定義の SSL アクションの設定

コマンドプロンプトで次のコマンドを入力して、アクションを構成し、構成を確認します。

add SSL action <name> -clientAuth(DOCLIENTAUTH | NOCLIENTAUTH) -clientCert (ENABLED | DISABLED) certHeader <string> -clientHeader <string> -clientCertSerialNumber (ENABLED | DISABLED) -certSerialHeader <string> -clientCertSubject (ENABLED | DISABLED) -certSubjectHeader <string> -clientCertHash (ENABLED | DISABLED) -certHashHeader <string> -clientCertIssuer (ENABLED | DISABLED) -certIssuerHeader <string> -sessionID (ENABLED | DISABLED) -sessionIDheader <string> -cipher (ENABLED | DISABLED) -cipherHeader <string> -clientCertNotBefore (ENABLED | DISABLED) -certNotBeforeHeader <string> -clientCertNotAfter (ENABLED | DISABLED) -certNotAfterHeader <string> -OWASupport (ENABLED | DISABLED)
show ssl action [<name>]

例:

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 の解析後に true と評価された場合、トラフィックは別の仮想サーバに転送されます。この仮想サーバーのタイプが SSL の場合は、ハンドシェイクを実行します。この仮想サーバーのタイプが TCP または SSL_BRIDGE の場合、バックエンドサーバーはハンドシェイクを実行します。

リリース 12.1-49.x では、CLIENTHELLO_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_NEXTPROTECTOL(リリース13.0ビルド61.xより)

これらのプレフィクスの説明については、高度なポリシー式:SSL の解析を参照してください。

add SSL actionコマンドにパラメータforwardが追加され、新しいバインドポイントCLIENTHELLO_REQbind ssl vserverコマンドに追加されます。

CLI を使用した設定

コマンドプロンプトで、次のように入力します。

add ssl action <name> -forward <virtual server name>

add ssl policy <name> -rule <expression> -action <string>

bind ssl vserver <vServerName> -policyName <string> -priority <positive_integer> -type <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 に基づいて CA を選択的に選択する SSL アクション

SSL 仮想サーバーにバインドされたすべての CA のリストではなく、クライアント証明書要求の SNI (ドメイン) に基づく CA のリストのみを送信できます。たとえば、クライアント hello を受信すると、SSL ポリシー表現に基づく CA 証明書(SNI など)だけが送信されます。特定の一連の証明書を送信するには、CA 証明書グループを作成する必要があります。次に、このグループを SSL アクションにバインドし、アクションを SSL ポリシーにバインドします。クライアントトラフィックを受信する仮想サーバにバインドされたポリシーが、クライアント hello の解析後に 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 <caCertGroupName>
add ssl certkey <certkey_name> -cert <cert> -key <key>
bind ssl caCertGroup <caCertGroupName> <certkey_name>
add ssl action <name> -caCertGrpName <string>
add ssl policy <name> -rule <expression> -action <string>
bind ssl vserver <vServerName> -policyName <string> -priority <positive_integer> -type CLIENTHELLO_REQ

例:

add ssl cacertGroup 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_certkey1
bind ssl caCertGroup ca_cert_group ca_certkey2
sh ssl caCertGroup ca_cert_group

CA GROUP NAME:     ca_cert_group
ACTIONS REFERRING: 1

1) CertKey Name: ca_certkey1   CA Certificate   CRLCheck: Optional   CA_Name Sent
2) CertKey Name: ca_certkey2   CA Certificate   CRLCheck: Optional   CA_Name Sent
add ssl action pick_ca_group -cacertGrpName ca_cert_group
sh ssl action pick_ca_group
1) Name: sniaction
   Type: Data Insertion
   PickCaCertGroup: ca_cert_group
   Hits: 0
   Undef Hits: 0
   Action Reference Count: 1
add ssl policy snipolicy -rule client.ssl.client_hello.sni.contains("abc") -action pick_ca_group
bind ssl vserver v_SSL -policyName snipolicy -type CLIENTHELLO_REQ -priority 10
sh ssl policy snipolicy
    Name: pol1
    Rule: client.ssl.client_hello.sni.contains("abc")
    Action: pick_ca_group
    UndefAction: Use Global
    Hits: 0
    Undef Hits: 0


    Policy is bound to following entities
1)  Bound to: CLIENTHELLO_REQ VSERVER v_SSL
    Priority: 10
set ssl vserver v_SSL -clientauth ENABLED -SNIEnable ENABLED
bind ssl vserver v_SSL -certkeyName snicert -sniCert
sh ssl vserver v_SSL

    Advanced SSL configuration for VServer v_SSL:
    DH: DISABLED
    DH Private-Key Exponent Size 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 Ciphers: DISABLED
    SNI: ENABLED
    OCSP Stapling: DISABLED
    HSTS: DISABLED
    HSTS IncludeSubDomains: 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. 証明書グループを選択し、[Delete] をクリックします。
  3. 確認メッセージが表示されたら、[はい] をクリックします。