この記事は機械翻訳されています.免責事項
高度なポリシー表現:SSL 証明書の解析
SSL 証明書と SSL クライアント hello メッセージを解析するための高度なポリシー式があります。
SSL 証明書を解析する
X.509 Secure Sockets Layer (SSL) クライアント証明書を評価するには、高度なポリシー式を使用できます。クライアント証明書は、ユーザーの ID を認証するために使用できる電子文書です。クライアント証明書には、(少なくとも) バージョン情報、シリアル番号、署名アルゴリズム ID、発行者名、有効期間、サブジェクト (ユーザー) 名、公開鍵、および署名が含まれます。
SSL 接続とクライアント証明書内のデータの両方を調べることができます。たとえば、強度の低い暗号を使用する SSL 要求を特定の負荷分散仮想サーバーファームに送信できます。次のコマンドは、要求内の暗号強度を解析し、40 以下の暗号強度を照合するコンテンツスイッチングポリシーの例です。
add cs policy p1 -rule "client.ssl.cipher_bits.le(40)"
もう 1 つの例として、要求にクライアント証明書が含まれるかどうかを決定するポリシーを設定できます。
add cs policy p2 -rule "client.ssl.client_cert exists"
また、クライアント証明書内の特定の情報を検査するポリシーを構成することもできます。たとえば、次のポリシーは、証明書の有効期限が 1 日以上前であることを検証します。
add cs policy p2 -rule "client.ssl.client_cert exists && client.ssl.client_cert.days_to_expire.ge(1)"
JA3 フィンガープリントの使用例:
add ssl policy ja3_pol -rule "CLIENT.SSL.JA3_FINGERPRINT.EQ(bb4c15a90e93a25ddc16274395bce4c6)" -action reset
あるいは、patset での JA3 フィンガープリントの使用例:
add policy patset pat1
bind policy patset pat1 bb4c15a90e93a25ddc16274395bce4c6 -index 1
bind policy patset pat1 cd3c15a90e93a25ddc16274395bce6b4 -index 2
add ssl policy ssl_ja3_pol -rule CLIENT.SSL.JA3_FINGERPRINT.contains_any("pat1") -action reset
注
証明書の日付と時刻の解析については、「 式内の日付と時刻のフォーマット」および 「 SSL 証明書の日付の式」を参照してください。
テキストベースの SSL および証明書データのプレフィックス
次の表に、SSL トランザクションとクライアント証明書でテキストベースの項目を識別する式プレフィックスについて説明します。
表1. SSL およびクライアント証明書データのテキストまたはブール値を返すプレフィックス
前 | 説明 |
---|---|
CLIENT.SSL.CLIENT_CERT | 現在の SSL トランザクションの SSL クライアント証明書を返します。 |
CLIENT.SSL.CLIENT_CERT.TO_PEM | SSL クライアント証明書をバイナリ形式で返します。 |
CLIENT.SSL.CIPHER_EXPORTABLE | SSL 暗号がエクスポート可能な場合は、ブール型 (Boolean) の TRUE を返します。 |
CLIENT.SSL.CIPHER_NAME | SSL 接続から呼び出された場合は SSL Cipher の名前を返し、非 SSL 接続から呼び出された場合は NULL 文字列を返します。 |
CLIENT.SSL.IS_SSL | 現在の接続が SSL ベースの場合は、ブール型 (Boolean) の TRUE を返します。 |
CLIENT.SSL.JA3_FINGERPRINT | 設定された JA3 フィンガープリントがクライアント hello メッセージの JA3 フィンガープリントと一致する場合、ブール型 TRUE を返します。注: この式は、リリース 13.1 ビルド 12.x 以降で使用できます。 |
SSL 証明書の数値データのプレフィックス
次の表では、SSL 証明書の日付以外の数値データを評価するプレフィックスについて説明します。これらのプレフィックスは、 [式接頭辞の基本操作と数値の複合演算で説明されている操作で使用できます](/ja-jp/citrix-adc/current-release/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:0x300 です。トランザクションは SSLv3:0x301 です。トランザクションは TLSv1:0x302 です。トランザクションは TLS 1.1:0x303 です。トランザクションは TLS 1.2:0x304 です。トランザクションは TLS 1.3 です。 |
注
証明書の有効期限に関連する式については、「 SSL 証明書日付の式」を参照してください。
SSL 証明書の式
SSL 証明書を解析するには、次のプレフィックスを使用する式を設定します。
CLIENT.SSL.CLIENT_CERT
ここでは、証明書に対して構成できる式について説明します。ただし、証明書の有効期限を調べる式は除きます。時間ベースの操作については、「 高度なポリシー式:日付、時刻、および数字の操作」を参照してください。
次の表に、CLIENT.SSL.CLIENT_CERT プレフィックスに指定できる操作を示します。
表3. CLIENT.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
|
<certificate>. SERIALNUMBER |
証明書のシリアル番号を、先頭にゼロを含まない大文字の 16 進文字列で返します。たとえば、証明書のシリアル番号が 04daa1e44bd2e7769638a0058b4964bd の場合、次の式はシリアル番号との照合に役立ちますCLIENT.SSL.CLIENT_CERT.SERIALNUMBER.SET_TEXT_MODE(IGNORECASE).CONTAINS(\"4daa1e44bd2e7769638a0058b4964bd\")
|
|
クライアント証明書に一致するOIDの拡張がある場合、ブール値 TRUE を返します。たとえば、クライアント証明書の拡張子が OID 2.16.756.5.4.2.1.2.13.2.7 の場合、この式 client.ssl.client_cert.extensions.has_object (2.16.756.5.4.2.1.2.13.2.7) はTRUE を返します。 |
|
クライアント証明書に OID と値が一致するエクステンションがある場合、ブール値 TRUE を返します。たとえば、クライアント証明書の拡張子が OID 2.16.756.5.4.2.1.2.13.2.7 で、値XBが指定されている場合、この式client.ssl.client_cert.extensions.object(“2.16.756.5.4.2.1.2.13.2.7”).has_value(“XB”)はTRUEを返します。
メモ -指定された OID の拡張機能に IA5 または整数以外のタイプの値がある場合、ポリシー評価の結果、未定義 (UNDEF) イベントが発生する。 |
<certificate>.extensions.count |
クライアント証明書で受信されたエクステンションの数。たとえば、クライアント証明書の拡張子の数が 16 の場合、expression client.ssl.client_cert.extensions.count.eq(16) はTRUE を返します |
注:
標準拡張では、OID の代わりによく知られた短縮名を使用できます。たとえば、Netscape コメント拡張には OID
2.16.840.1.113730.1.13
とショートネームnsComment
があります。拡張では2.16.840.1.113730.1.13
```の代わりに
nsComment
を使えます
- client.ssl.client_cert.extensions.has_object(nscomment).
- client.ssl.client_cert.extensions.object(“nscomment”).has_value(“OpenSSL Generated Client Certificate”).
```
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 | client-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 以外のセッションチケット拡張が client-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 ポリシーバインディングを参照してください。