ADC

高度なポリシー式:SSL の解析

SSL 証明書と SSL クライアントの hello メッセージを解析するための高度なポリシー式があります。

SSL 証明書の解析

高度なポリシー式を使用して、X.509 SSL (セキュアソケットレイヤー) クライアント証明書を評価できます。クライアント証明書は、ユーザーの ID を認証するために使用できる電子ドキュメントです。クライアント証明書には、少なくとも、バージョン情報、シリアル番号、署名アルゴリズム ID、発行者名、有効期間、サブジェクト(ユーザー)名、公開キー、および署名が含まれています。

SSL 接続とクライアント証明書内のデータの両方を調べることができます。たとえば、低強度の暗号を使用する SSL 要求を特定の負荷分散仮想サーバーファームに送信できます。次のコマンドは、要求内の暗号強度を解析し、40 以下の暗号強度を照合するコンテンツスイッチングポリシーの例です。

add cs policy p1 -rule "client.ssl.cipher_bits.le(40)"
<!--NeedCopy-->

別の例として、要求にクライアント証明書が含まれているかどうかを決定するポリシーを設定できます。

add cs policy p2 -rule "client.ssl.client_cert exists"
<!--NeedCopy-->

または、クライアント証明書の特定の情報を検査するポリシーを構成できます。たとえば、次のポリシーでは、証明書の有効期限が 1 日以上前にあることを確認します。

add cs policy p2 -rule "client.ssl.client_cert exists && client.ssl.client_cert.days_to_expire.ge(1)"
<!--NeedCopy-->

証明書の日付と時刻の解析については、「 式内の日付と時刻のフォーマット」およびSSL 証明書の日付の式」を参照してください。

テキストベースの SSL および証明書データのプレフィックス

次の表では、SSL トランザクションとクライアント証明書でテキストベースの項目を識別する式プレフィックスについて説明します。

表1. SSL およびクライアント証明書データのテキストまたはブール値を返すプレフィックス

説明
CLIENT.SSL.CLIENT_CERT 現在の SSL トランザクションの SSL クライアント証明書を返します。
CLIENT.SSL.CLIENT_CERT.TO_PEM SSL クライアント証明書をバイナリ形式で返します。
CLIENT.SSL.CIPHER_EXPORTABLE SSL 暗号暗号がエクスポート可能な場合は、ブール型 TRUE を返します。
CLIENT.SSL.CIPHER_NAME SSL 接続から呼び出された場合は SSL 暗号の名前を返し、非 SSL 接続から呼び出された場合は NULL 文字列を返します。
CLIENT.SSL.IS_SSL 現在の接続が SSL ベースの場合に TRUE を返します。

SSL 証明書の数値データのプレフィックス

次の表では、SSL 証明書の日付以外の数値データを評価するプレフィックスについて説明します。これらのプレフィックスは、 [式接頭辞の基本操作と数値の複合演算で説明されている操作で使用できます](/ja-jp/citrix-adc/13/appexpert/policies-and-expressions/adv-policy-expressions-getting-started/compound-advanced-policy-expressions.html)

表2. SSL 証明書の日付以外の数値データを評価するプレフィックス

説明
CLIENT.SSL.CLIENT_CERT.DAYS_TO_EXPIRE 証明書が有効である日数を返します。期限切れの証明書の場合は-1 を返します。
CLIENT.SSL.CLIENT_CERT.PK_SIZE 証明書で使用されている公開キーのサイズを返します。
CLIENT.SSL.CLIENT_CERT.VERSION 証明書のバージョン番号を返します。接続が SSL ベースでない場合は、ゼロ (0) を返します。
CLIENT.SSL.CIPHER_BITS 暗号化キーのビット数を返します。接続が SSL ベースでない場合は 0 を返します。
CLIENT.SSL.VERSION 次のように、SSL プロトコルのバージョンを表す数値を返します。0。トランザクションは SSL ベースではありません。; 0x002。トランザクションは SSLv2 です。トランザクションは SSLv3 です。0x301。トランザクションは TLSv1 です。トランザクションは TLS 1.1 です。トランザクションは TLS 1.2 です。0x304 です。トランザクションは TLS 1.3 です。

証明書の有効期限に関連する式については、「 SSL 証明書日付の式」を参照してください。

SSL 証明書の式

SSL 証明書を解析するには、次のプレフィックスを使用する式を設定します。

CLIENT.SSL.CLIENT_CERT

ここでは、証明書に対して構成できる式について説明します。ただし、証明書の有効期限を調べる式は除きます。時間ベースの操作については、「 高度なポリシー式:日付、時刻、および数字の操作」を参照してください。

次の表に、CLIENT.SSL.CLIENT_CERT プレフィックスに指定できるオペレーションを示します。

表3. クライアント.SSL.CLIENT_CERT プレフィックスで指定できるオペレーション

SSL 証明書の操作 説明
<certificate>.EXISTS クライアントに SSL 証明書がある場合は、ブール型 TRUE を返します。
<certificate>.ISSUER 証明書内の発行者の識別名 (DN) を名前/値リストとして返します。等号 (「=」) は名前と値の区切り文字で、スラッシュ (「/」) は名前と値のペアを区切る区切り文字です。返される DN の例を次に示します。 /C=US/O=myCompany/OU=www.mycompany.com/CN=www.mycompany.com/emailAddress=myuserid@mycompany.com
<certificate>.ISSUER. IGNORE_EMPTY_ELEMENTS Issuer を返し、名前/値リストの空の要素を無視します。たとえば、Cert-Issuer: /c=in/st=kar//l=bangelore //o=mycompany/ou=sales/ /emailAddress=myuserid@mycompany.comを考えてみましょう。次の Rewrite アクションは、前の発行者の定義に基づいて 6 のカウントを返します。sh rewrite action insert_ssl_header Name: insert_ssl Operation: insert_http_header Target:Cert-Issuer Value:CLIENT.SSL.CLIENT_CERT.ISSUER.COUNT。ただし、値を次のように変更すると、返されるカウントは 9 です。CLIENT.SSL.CLIENT_CERT.ISSUER.IGNORE_EMPTY_ELEMENTS.COUNT

SSL クライアントを解析する

SSL クライアントの hello メッセージを解析するには、次のプレフィックスを使用する式を設定します。

説明
CLIENT.SSL.CLIENT_HELLO.CIPHERS.HAS_HEXCODE 式で指定された 16 進コードを、クライアントの hello メッセージで受信した暗号スイートの 16 進コードと一致させます。
CLIENT.SSL.CLIENT_HELLO.CLIENT_VERSION クライアントの hello メッセージヘッダーで受信したバージョン。
CLIENT.SSL.CLIENT_HELLO.IS_RENEGOTIATE クライアントまたはサーバーがセッションの再ネゴシエーションを開始する場合は true を返します。
CLIENT.SSL.CLIENT_HELLO.IS_REUSE アプライアンスが、クライアント hello メッセージで受信した 0 以外のセッション ID に基づいて SSL セッションを再利用する場合、true を返します。
CLIENT.SSL.CLIENT_HELLO.IS_SCSV シグナリング暗号スイート値(SCSV)機能がクライアントの hello メッセージでアドバタイズされている場合は true を返します。フォールバック SCSV の 16 進コードは 0x5600 です。
CLIENT.SSL.CLIENT_HELLO.IS_SESSION_TICKET 0 以外の長さのセッションチケット拡張が、クライアント hello メッセージでアドバタイズされている場合は true を返します。
CLIENT.SSL.CLIENT_HELLO.LENGTH クライアントの hello メッセージヘッダーで受信された長さ。
CLIENT.SSL.CLIENT_HELLO.SNI クライアント hello メッセージのサーバ名拡張子で受信したサーバ名を返します。
CLIENT.SSL.CLIENT_HELLO.ALPN.HAS_NEXTPROTOCOL クライアント hello メッセージで受信された ALPN 拡張内のアプリケーションプロトコルが、式で指定されたプロトコルと一致する場合は true を返します。

これらの式は、CLIENTHELLO_REQ バインドポイントで使用できます。詳細については、 SSL ポリシーバインディングを参照してください

高度なポリシー式:SSL の解析