次の方法で共有


ストリーム コンテキスト

ストリーム コンテキストは、SSL や PCT などのセキュリティで保護されたストリーム指向プロトコルを処理します。 同じインターフェイスと同様の資格情報管理を共有するために、SSPI はストリーム コンテキストのサポートを提供します。 セキュリティ プロトコルには、ストリーム認証スキームとレコード形式の両方が組み込まれています。

ストリーム指向プロトコルを提供するために、ストリーム コンテキストをサポートする セキュリティ パッケージ には、次のプロセス特性があります。

  • パッケージは、ストリーム セマンティクスをサポートすることを示すSECPKG_FLAG_STREAM フラグを設定します。

  • トランスポート アプリケーションは、 InitializeSecurityContext (General) 関数と AcceptSecurityContext (General) 関数の呼び出しでISC_REQ_STREAMフラグとASC_REQ_STREAM フラグを設定することで、ストリーム セマンティクスを要求します。

  • アプリケーションは、SecPkgContext_StreamSizes構造を使用して QueryContextAttributes (General) 関数を呼び出して、提供するバッファーの数と、ヘッダーまたはトレーラー用に予約するサイズについてセキュリティ コンテキストに対してクエリを実行します。

  • アプリケーションは、データの実際の処理中に余裕を持つバッファー記述子を提供します。 ストリーム セマンティクスを指定することで、呼び出し元は、 セキュリティ パッケージ がメッセージのブロックを処理できるように、追加の処理を行う意欲を示します。 基本的には、 MakeSignature 関数と VerifySignature 関数の場合、呼び出し元はバッファーの一覧を渡します。 ストリーム指向のチャネル (TCP ポートなど) からメッセージを受信すると、呼び出し元は次のようにバッファー リストを渡します。

    バッファー 長さ バッファーの種類
    1 メッセージの長さ SECBUFFER_DATA
    2 0 SECBUFFER_EMPTY
    3 0 SECBUFFER_EMPTY
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    その後、セキュリティ パッケージは BLOB で動作します。 関数が正常に返された場合、バッファー リストは次のようになります。

    バッファー 長さ バッファーの種類
    1 ヘッダーの長さ SECBUFFER_STREAM_HEADER
    2 データの長さ SECBUFFER_DATA
    3 トレーラーの長さ SECBUFFER_STREAM_TRAILER
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    また、このバッファー内のデータが次のレコードの一部であり、まだ処理されていないことを示すSECBUFFER_EXTRA、長さ x とバッファーの種類を持つバッファー #4 も返される可能性があります。 逆に、メッセージ関数がSEC_E_INCOMPLETE_MESSAGEエラー コードを返す場合、返されるバッファー リストは次のようになります。

    バッファー 長さ バッファーの種類
    1 x SECBUFFER_MISSING

     

    これは、レコードを処理するためにさらに多くのデータが必要であることを示します。 メッセージ関数から返されるほとんどのエラーとは異なり、このバッファー型はコンテキストが侵害されたことを示すものではありません。 代わりに、より多くのデータが必要であることを示します。 セキュリティ パッケージ は、この状態で 状態 を更新することはできません。

    同様に、通信の送信者側では、呼び出し元は MakeSignature 関数を呼び出すことができます。 セキュリティ パッケージでは、バッファーの再割り当てやコピーが必要になる場合があります。 呼び出し元は、次のようにバッファー リストを指定することで、より効率的にすることができます。

    バッファー 長さ Type
    1 ヘッダーの長さ SECBUFFER_STREAM_HEADER
    2 データの長さ SECBUFFER_DATA
    3 トレーラーの長さ SECBUFFER_STREAM_TRAILER

     

    これにより、呼び出し元はより効率的にバッファーを使用できます。 QueryContextAttributes 関数を呼び出して MakeSignature を呼び出す前に予約する領域を決定することで、アプリケーションとセキュリティ パッケージの操作の効率が高くなります。