高度なポリシー式:SSL の解析
SSL 証明書を解析する
add cs policy p1 -rule "client.ssl.cipher_bits.le(40)"
add cs policy p2 -rule "client.ssl.client_cert exists"
add cs policy p2 -rule "client.ssl.client_cert exists && client.ssl.client_cert.days_to_expire.ge(1)"
add ssl policy ja3_pol -rule "CLIENT.SSL.JA3_FINGERPRINT.EQ(bb4c15a90e93a25ddc16274395bce4c6)" -action reset
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 および証明書データのプレフィックス
| 前 | 説明 |
|---|---|
| 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 証明書の数値データのプレフィックス
| 前 | 説明 |
|---|---|
| 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 証明書の操作 | 説明 |
|---|---|
<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\") |
SSL クライアントを解析するこんにちは
| 前 | 説明 |
|---|---|
| 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 を返します。 |