SSL組み込みアクションとユーザー定義アクション
ポリシーに組み込みアクションのみが必要な場合を除き、ポリシーを作成する前にアクションを作成する必要があります。次に、ポリシーを作成するときにアクションを指定できます。組み込みアクションには、制御アクションとデータアクションの 2 種類があります。コントロールポリシーではコントロールアクションを使用し、データポリシーではデータアクションを使用します。
組み込みのコントロールアクションは以下のとおりです。
- doClientAuth — クライアント証明書認証を実行します。(TLS1.3 ではサポートされていません)
- noClientAuth — クライアント証明書認証を実行しないでください。(TLS1.3 ではサポートされていません)
組み込みデータアクションは以下のとおりです。
- リセット-RST パケットをクライアントに送信して接続を閉じます。
- ドロップ:クライアントからすべてのパケットをドロップします。接続は、クライアントが閉じるまで開いたままになります。
- noop:何も処理せずにパケットを転送します。
注: ClientCertVerification や SSLogProfile などのクライアント認証に依存するアクションは、TLS 1.3 プロトコルではサポートされていません。
ユーザー定義のデータアクションを作成できます。クライアント認証を有効にすると、リクエストを Web サーバーに転送する前に、クライアント証明書データをリクエストヘッダーに挿入する SSL アクションを作成できます。
ポリシー評価の結果が未定義の状態になった場合、UNDEF アクションが実行されます。データポリシーまたは制御ポリシーのどちらでも、UNDEF アクションとして RESET、DROP、または NOOP を指定できます。コントロールポリシーには、DOCLIENTAUTH または NOCLIENTAUTH を指定するオプションもあります。
ポリシーに組み込まれたアクションの例
次の例では、クライアントがEXPORTカテゴリの暗号以外の暗号を送信すると、NetScalerアプライアンスはクライアント認証を要求します。トランザクションを成功させるには、クライアントは有効な証明書を提供する必要があります。
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 のいずれかのタイプがあります。たとえば、管理者は、次のいずれかの場合に接続を終了する代わりに、リクエストを別の仮想サーバーに転送してさらにアクションを起こすことを選択できます。
- アプライアンスには証明書がありません。
- アプライアンスは特定の暗号をサポートしていません。
上記を実現するために、クライアント hello を受信したときにクライアントトラフィックを評価する新しいバインドポイント ‘CLIENTHELLO_REQ’ が追加されました。クライアントトラフィックを受信する仮想サーバーにバインドされたポリシーが、client 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」を選択します。
- [Bind] をクリックします。
- [完了] をクリックします。
最も一般的なユースケースのエンドツーエンド構成については、次のトピックを参照してください。
-
アプライアンスにドメイン固有(SNI)証明書がない場合は、クライアントトラフィックを転送するように SSL アクションを設定します。
-
クライアント hello メッセージの ALPN 拡張のプロトコルに基づいてクライアントトラフィックを転送するように SSL アクションを設定します。
クライアント認証用に SNI に基づいて CA を選択的に選択する SSL アクション
SSL 仮想サーバーにバインドされたすべての CA のリストではなく、クライアント証明書要求の SNI (ドメイン) に基づく CA のリストのみを送信できます。たとえば、クライアント hello を受信すると、SSL ポリシー表現 (SNI など) に基づく CA 証明書のみが送信されます。特定の証明書セットを送信するには、CA 証明書グループを作成する必要があります。次に、このグループを SSL アクションにバインドし、アクションを SSL ポリシーにバインドします。クライアントトラフィックを受信する仮想サーバーにバインドされたポリシーが、client 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 証明書グループを選択し 、「 バインディングを表示」をクリックします。
- [Bind] をクリックします。
- CA 証明書バインディングページで 、既存の証明書を選択するか、[追加] をクリックして新しい証明書を追加します。
- [ 選択 ] をクリックし、[ バインド] をクリックします。
- 別の証明書をバインドするには、手順 5 ~ 7 を繰り返します。
- [閉じる] をクリックします。
[Traffic Management]>[SSL]>[Policies] に移動します。
SSL アクションの作成:
- 「 SSL アクション」で、「 追加」をクリックします。
- 「 SSL アクションの作成」で、アクションの名前を指定します。
- 「 転送アクション仮想サーバー」で、既存の仮想サーバーを選択するか、トラフィックを転送する仮想サーバーを追加します。
- オプションで、他のパラメータを設定します。
- [作成] をクリックします。
SSL ポリシーの作成:
- SSL ポリシーで、「 追加」をクリックします。
- 「 SSL ポリシーの作成」で、ポリシーの名前を指定します。
- 「 アクション」で、以前に作成したアクションを選択します。
- エクスプレッションエディタで、評価するルールを入力します。
- [作成] をクリックします。
仮想サーバーとバインドポリシーを作成または追加します。
- [ トラフィック管理 ] > [ 負荷分散 ] > [ 仮想サーバー] に移動します。
- 仮想サーバーを追加または選択します。
- [ 詳細設定] で、[ SSL ポリシー] をクリックします。
- SSL ポリシーセクションをクリックします。
- 「ポリシーの選択」で、以前に作成したポリシーを選択します。
- 「 ポリシー・バインディング」で、ポリシーの優先度を指定します。
- 「 タイプ」で「 CLIENTHELLO_REQ」を選択します。
- [Bind] をクリックします。
- [完了] をクリックします。
GUI を使用して CA 証明書グループをバインド解除する
- トラフィック管理 > SSL > CA 証明書グループに移動します。
- 証明書グループを選択し、「 バインディングを表示」をクリックします。
- グループから削除する証明書を選択し、[ バインド解除] をクリックします。
- 確認を求められたら、「 **はい」をクリックします• • .
- [閉じる] をクリックします。
GUI を使用して CA 証明書グループを削除する
- トラフィック管理 > SSL > CA 証明書グループに移動します。
- 証明書グループを選択し、[ 削除] をクリックします。
- 確認を求められたら、「 はい」をクリックします。