ストリーム コンテキスト
ストリーム コンテキストは、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 を呼び出す前に予約する領域を決定することで、アプリケーションとセキュリティ パッケージの操作の効率が高くなります。