SSL ハンドシェイクを制御して SSL プロファイル、証明書、PKI 設定、再ネゴシエーションなどの属性を変更するための読み取りパラメータや書き込みパラメータに SSL ハンドシェイク レベルのイベントを追加するための、SSL DataScript イベントと API が導入されました。

この機能を使用すると、特定のクライアント IP アドレスまたはポートに対して、次のことができます。

  • TLS プロトコルのバージョンや暗号、およびその他の構成パラメータの制限などの SSL ハンドシェイク属性を変更します。

  • モードや、TLS 接続に使用される CA 証明書などの PKI 設定を変更します。

  • 接続のサーバ証明書を変更します。

  • 特定のエラーに対する相互クライアント認証を読み取るか、無視します。

  • 再ネゴシエーションを使用して要求された URI に基づいてクライアント認証をトリガします。

SSL ハンドシェイク イベントを使用すると、イベント固有の DataScript を書き込んで、SSL プロファイル設定の変更、サーバ証明書などの SSL ハンドシェイクのフローや、IP アドレス/URI ベースのクライアント認証、SSL ヘッダー挿入などのその他の操作のフローを制御できます。

SSL ハンドシェイクのフロー

次の重要なイベントにより、SSL DataScript API を介して SSL ハンドシェイクのフローを簡単にカスタマイズできます。API は、それぞれのイベントにのみ固有です。

イベント

説明

SSL_PRE_CONNECT

このイベントは、TLS ハンドシェイクの開始時にトリガされます。このイベントは、クライアント IP アドレスまたは VS サービス ポートなどに基づいて SSL プロファイル、SSL キーと証明書、PKI プロファイルなどの SSL 設定を変更するために使用できます。

SSL_CLIENT_HELLO

このイベントは、クライアントの Hello の事前処理が完了した後にトリガされます。このイベントは、クライアント IP アドレスまたは VS サービス ポートなどに基づいて SSL プロファイル、SSL キーと証明書、PKI プロファイルなどの SSL 設定を変更するために使用されます。

SSL_HANDSHAKE_DONE

このイベントは、TLS ハンドシェイクが完了した後にトリガされます。このイベントは、クライアント証明書認証エラーの取得とログ作成に使用できます。

フロー内の仮想サービス DataScript イベントは次のとおりです。

  • VS_DATASCRIPT_EVT_CLIENT_SSL_PRE_CONNECT

  • VS_DATASCRIPT_EVT_CLIENT_SSL_CLIENT_HELLO

  • VS_DATASCRIPT_EVT_SSL_HANDSHAKE_DONE



上記のイベント内で実行するために、次の DataScript API が導入されています。

API

説明

avi.ssl.set_ssl_profile()

この API は、クライアント IP アドレス、TLS サーバ名などの要因に基づいて SSL プロファイルを別のプロファイルに変更するために使用されます。

avi.ssl.set_ssl_certificate()

この API は、クライアント IP アドレス、TLS サーバ名などの要因に基づいて、SSL キーと証明書を別のオブジェクトに変更するために使用されます。

avi.ssl.set_pki_profile()

この API は、クライアント IP アドレス、TLS サーバ名、HTTP ホストまたは URI などの要因に基づいて、初期または再ネゴシエーションされた TLS セッションの PKI プロファイルを変更するために使用されます。

avi.ssl.clear_client_cert_verify_error()

この API は、クライアント証明書認証と CRL チェックの結果を取得するために使用されます。

avi.ssl.renegotiate()

この API は、クライアント IP アドレス、TLS サーバ名、HTTP ホストまたは URI などの要因に基づいて PKI プロファイル、モード、頻度を変更した後に、クライアントとの TLS 接続を再ネゴシエーションするために使用されます。

avi.ssl.client_cert_verify_error_string()

この API は検証エラー コードを受け入れ、そのエラー コードに関連付けられているエラー文字列を返します。

avi.ssl.client_cert_verify_mode

この API は、クライアント証明書認証モードを取得するために使用されます。

avi.ssl.client_cert_verified()

この API は、クライアント証明書の検証が完了しているかどうかを確認するために使用されます。

avi.ssl.clear_client_cert_verify_error()

この API は、TLS 接続で SSL クライアント証明書検証エラーをクリアするために使用されます。

avi.ssl.log_client_cert_verify_error()

この API は、クライアント証明書認証の失敗をログに記録するために使用されます。エラーは、アプリケーション ログに重要度として追加されます。

avi.ssl.remove_session()

この API は、TLS 接続の SSL セッション キャッシュ エントリをクリアするために使用されます。

注意事項

  • これらのイベントと API は、レイヤー 7 仮想サービスでのみサポートされます。

  • 拡張仮想ホスティング (EVH) の子は、SSL イベントをサポートしていません。

  • FIPS は SSL クライアントの Hello イベントをサポートしていません

  • Avi.ssl.renegotiate() は次の接続ではサポートされていません。

    • TLS1.3 接続

    • HTTP/2.0

API を実行すると、TLS または HTTP/2.0 接続が失敗します。