SSL 組み込みアクションとユーザー定義アクション
ポリシーに組み込みアクションのみが必要な場合を除き、ポリシーを作成する前にアクションを作成する必要があります。その後、ポリシーを作成するときにアクションを指定できます。組み込みアクションには、制御アクションとデータアクションの 2 種類があります。コントロールポリシーではコントロールアクションを使用し、データポリシーではデータアクションを使用します。
組み込みの制御アクションは次のとおりです。
- DOCLIENTAUTH-クライアント証明書認証を実行します。(TLS1.3ではサポートされていません)
- NOCLIENTAUTHH:クライアント証明書認証を実行しません。(TLS1.3ではサポートされていません)
組み込みのデータアクションは次のとおりです。
- RESET:クライアントに RST パケットを送信して接続を閉じます。
- DROP:クライアントからのすべてのパケットをドロップします。接続は、クライアントが閉じるまで開いたままです。
- NOOP:処理を実行せずにパケットを転送します。
注: clientCertVerificationやssllogProfileなど、クライアント認証に依存するアクションは、TLS1.3プロトコルではサポートされていません。
ユーザー定義のデータアクションを作成できます。クライアント認証を有効にすると、要求を Web サーバに転送する前に、要求ヘッダーにクライアント証明書データを挿入する SSL アクションを作成できます。
ポリシー評価の結果が未定義の状態になった場合は、UNDEF アクションが実行されます。データポリシーまたは制御ポリシーのいずれの場合も、UNDEF アクションとして RESET、DROP、または NOOP を指定できます。制御ポリシーの場合は、DOCLIENTAUTH または NOCLIENTAUTH を指定することもできます。
ポリシー内の組み込みアクションの例
次の例では、クライアントがEXPORTカテゴリ以外の暗号を送信した場合、Citrix ADCアプライアンスはクライアント認証を要求します。クライアントは、トランザクションを成功させるには、有効な証明書を提供する必要があります。
add ssl policy pol1 -rule CLIENT.SSL.CIPHER_EXPORTABLE.NOT -reqAction DOCLIENTAUTH
<!--NeedCopy-->
次の例では、クライアント認証が有効であることを前提としています。
ユーザによって提供された証明書のバージョンが、ポリシーのバージョンと一致する場合、アクションは実行されず、パケットが転送されます。
add ssl policy pol1 -rule CLIENT.SSL.CLIENT_CERT.VERSION.EQ(2) -reqAction NOOP
<!--NeedCopy-->
ユーザーによって提供された証明書のバージョンが、ポリシーのバージョンと一致する場合、接続は切断されます。
add ssl policy pol1 -rule CLIENT.SSL.CLIENT_CERT.VERSION.EQ(2) -reqAction DROP
<!--NeedCopy-->
ユーザーによって提供された証明書のバージョンが、ポリシーのバージョンと一致する場合、接続はリセットされます。
add ssl policy pol1 -rule CLIENT.SSL.CLIENT_CERT.VERSION.EQ(2) -reqAction RESET
<!--NeedCopy-->
ポリシーベースのクライアント認証によるクライアント証明書の検証
ポリシーベースのクライアント認証を設定している場合は、クライアント証明書の検証を「必須」または「オプション」に設定できます。デフォルトは必須です。
CLI を使用してクライアント証明書の検証をオプションに設定する
コマンドプロンプトで入力します。
add ssl action <name> ((-clientAuth ( DOCLIENTAUTH | NOCLIENTAUTH ) [-clientCertVerification ( Mandatory | Optional )]
<!--NeedCopy-->
例:
add ssl action sslact -clientauth DOCLIENTAUTH -clientcertverification OPTIONAL
<!--NeedCopy-->
GUI を使用してクライアント証明書の検証をオプションに設定する
-
[Traffic Management]>[SSL]>[Policies] に移動します。
-
[SSL アクション] タブで、[追加] をクリックします。
-
名前を指定し、[クライアント証明書の検証] リストで [オプション] を選択します。
ユーザ定義の 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)
<!--NeedCopy-->
show ssl action [<name>]
<!--NeedCopy-->
例:
add ssl action Action-SSL-ClientCert -clientCert ENABLED -certHeader "X-Client-Cert"
<!--NeedCopy-->
show ssl action Action-SSL-ClientCert
1) Name: Action-SSL-ClientCert
Data Insertion Action:
Cert Header: ENABLED Cert Tag: X-Client-Cert
Done
<!--NeedCopy-->
GUI を使用したユーザ定義の SSL アクションの設定
[ トラフィック管理] > [SSL] > [ポリシー ] に移動し、[ アクション ] タブで [ 追加] をクリックします。
クライアントトラフィックを別の仮想サーバーに転送するための SSL アクションの設定
管理者は、SSL のオフロードを回避するために、SSL 仮想サーバーで受信したクライアントトラフィックを別の仮想サーバーに転送するように SSL アクションを設定できます。または、ADCアプライアンスの接続を終了させる場合に使用します。この仮想サーバーの種類は、SSL、TCP、または SSL_BRIDGE です。たとえば、管理者は、次のいずれかの場合に接続を終了する代わりに、別の仮想サーバーに要求を転送してさらにアクションを実行できます。
- アプライアンスには証明書がありません。
- アプライアンスは特定の暗号をサポートしていません。
上記を実現するために、新しいバインドポイント「CLIENTHELLO_REQ」を追加して、クライアントハローを受信したときにクライアントトラフィックを評価します。86379 クライアントトラフィックを受信する仮想サーバにバインドされたポリシーが、クライアント 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_NEXTPROTOCOL (13.0ビルド61.xから)
これらのプレフィクスの説明については、「 高度なポリシー式:SSL の解析」を参照してください。
add SSL action
コマンドにパラメータforward
が追加され、新しいバインドポイントCLIENTHELLO_REQ
がbind 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>
<!--NeedCopy-->
例:
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
<!--NeedCopy-->
GUI を使用した設定
[Traffic Management]>[SSL]>[Policies] に移動します。
SSL アクションの作成:
- [SSL アクション] で、[追加] をクリックします。
- 「 SSLアクションの作成」で、アクションの名前を指定します。
- 「 転送アクション仮想サーバー」で、既存の仮想サーバーを選択するか、トラフィックを転送する新しい仮想サーバーを追加します。
- 必要に応じて、他のパラメータを設定します。
- [作成] をクリックします。
SSL ポリシーを作成します。
- [SSL ポリシー] で、[追加] をクリックします。
- 「 SSLポリシーの作成」で、ポリシーの名前を指定します。
- 「 アクション」で、以前に作成したアクションを選択します。
- 式エディタで、評価するルールを入力します。
- [作成] をクリックします。
仮想サーバーおよびバインドポリシーを作成または追加します。
- [ トラフィック管理 ] > [ 負荷分散 ] > [ 仮想サーバー] に移動します。
- 仮想サーバーを追加または選択します。
- [詳細設定]で、[SSL ポリシー] をクリックします。
- [SSL ポリシー] セクションをクリックします。
- [ポリシーの選択] で、前に作成したポリシーを選択します。
- 「 ポリシー・バインディング」で、ポリシーの優先度を指定します。
- 「 タイプ」で「 CLIENTHELLO_REQ」を選択します。
- [バインド] をクリックします。
- [完了] をクリックします。
最も一般的なユースケースのエンドツーエンド構成については、次のトピックを参照してください。
-
アプライアンスにドメイン固有(SNI)証明書がない場合は、クライアントトラフィックを転送するように SSL アクションを設定します。
-
クライアント hello メッセージの ALPN 拡張のプロトコルに基づいてクライアントトラフィックを転送するように SSL アクションを設定します。
クライアント認証用に SNI に基づいて CA を選択的に選択する SSL アクション
SSL 仮想サーバーにバインドされたすべての CA のリストではなく、クライアント証明書要求の SNI (ドメイン) に基づく CA のリストのみを送信できます。たとえば、クライアント hello を受信すると、SSL ポリシー表現に基づく CA 証明書(SNI など)だけが送信されます。特定の一連の証明書を送信するには、CA 証明書グループを作成する必要があります。次に、このグループを SSL アクションにバインドし、アクションを SSL ポリシーにバインドします。クライアントトラフィックを受信する仮想サーバにバインドされたポリシーが、クライアント hello の解析後に true と評価された場合、特定の CA 証明書グループだけがクライアント要求証明書で送信されます。
以前は、CA 証明書を SSL 仮想サーバーにバインドする必要がありました。この機能拡張により、CA 証明書グループを追加し、SSL アクションに関連付けることができます。
注: SSL仮想サーバーでクライアント認証とSNIを有効にします。正しい SNI 証明書を仮想サーバーにバインドします。
次の手順を実行します。
-
CA 証明書グループを追加します。
-
証明書とキーのペアを追加します。
-
証明書とキーのペアをこのグループにバインドします。
-
SSL アクションを追加します。
-
SSL ポリシーを追加します。ポリシーでアクションを指定します。
-
ポリシーを 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
<!--NeedCopy-->
例:
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
<!--NeedCopy-->
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
<!--NeedCopy-->
add ssl action pick_ca_group -cacertGrpName ca_cert_group
<!--NeedCopy-->
sh ssl action pick_ca_group
1) Name: pick_ca_group
Type: Data Insertion
PickCaCertGroup: ca_cert_group
Hits: 0
Undef Hits: 0
Action Reference Count: 1
<!--NeedCopy-->
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
<!--NeedCopy-->
sh ssl policy snipolicy
Name: snipolicy
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
<!--NeedCopy-->
set ssl vserver v_SSL -clientauth ENABLED -SNIEnable ENABLED
bind ssl vserver v_SSL -certkeyName snicert -sniCert
<!--NeedCopy-->
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
<!--NeedCopy-->
GUI を使用した設定
CA 証明書グループを作成し、そのグループに証明書をバインドします。
- [トラフィック管理] > [SSL] > [CA 証明書グループ] に移動します。
- [追加] をクリックし、グループの名前を指定します。
- [作成] をクリックします。
- CA 証明書グループ を選択し、[バインドの表示] をクリックします。
- [バインド] をクリックします。
- [CA 証明書のバインド] ページで、既存の証明書を選択するか、[追加] をクリックして新しい証明書を追加します。
- [選択] をクリックし、[バインド] をクリックします。
- 別の証明書をバインドするには、手順 5 ~ 7 を繰り返します。
- [閉じる] をクリックします。
[Traffic Management]>[SSL]>[Policies] に移動します。
SSL アクションの作成:
- [SSL アクション] で、[追加] をクリックします。
- 「 SSLアクションの作成」で、アクションの名前を指定します。
- 「 転送アクション仮想サーバー」で、既存の仮想サーバーを選択するか、トラフィックを転送する仮想サーバーを追加します。
- 必要に応じて、他のパラメータを設定します。
- [作成] をクリックします。
SSL ポリシーを作成します。
- [SSL ポリシー] で、[追加] をクリックします。
- 「 SSLポリシーの作成」で、ポリシーの名前を指定します。
- 「 アクション」で、前に作成したアクションを選択します。
- 式エディタで、評価するルールを入力します。
- [作成] をクリックします。
仮想サーバーおよびバインドポリシーを作成または追加します。
- [ トラフィック管理 ] > [ 負荷分散 ] > [ 仮想サーバー] に移動します。
- 仮想サーバーを追加または選択します。
- [詳細設定]で、[SSL ポリシー] をクリックします。
- [SSL ポリシー] セクションをクリックします。
- [ポリシーの選択] で、前に作成したポリシーを選択します。
- 「 ポリシー・バインディング」で、ポリシーの優先度を指定します。
- 「 タイプ」で「 CLIENTHELLO_REQ」を選択します。
- [バインド] をクリックします。
- [完了] をクリックします。
GUI を使用して CA 証明書グループをバインド解除する
- [トラフィック管理] > [SSL] > [CA 証明書グループ] に移動します。
- 証明書グループを選択し、[バインドの表示] をクリックします。
- グループから削除する証明書を選択し、[バインド解除] をクリックします。
- 確認メッセージが表示されたら、[**はい] をクリックします。• • 。
- [閉じる] をクリックします。
GUI を使用して CA 証明書グループを削除する
- [トラフィック管理] > [SSL] > [CA 証明書グループ] に移動します。
- 証明書グループを選択し、[Delete] をクリックします。
- 確認メッセージが表示されたら、[はい] をクリックします。