ストリーム コンテキスト
ストリーム コンテキストは、SSL や PCT などのセキュリティで保護されたストリーム指向プロトコルを処理します。 同じインターフェイスと同様の資格情報管理を共有するために、SSPI はストリーム コンテキストのサポートを提供します。 セキュリティ プロトコル には、ストリーム認証スキームとレコード形式の両方が組み込まれています。
ストリーム指向プロトコルを提供するために、ストリーム コンテキストをサポートするセキュリティ パッケージには、次のプロセス特性があります。
パッケージは、ストリーム セマンティクスをサポートすることを示すSECPKG_FLAG_STREAM フラグを設定します。
トランスポート アプリケーションは、InitializeSecurityContext (General) および AcceptSecurityContext (General)関数の呼び出しでISC_REQ_STREAMフラグとASC_REQ_STREAM フラグ設定することで、ストリーム セマンティクスを要求します。
アプリケーションは、QueryContextAttributes (General) 関数を SecPkgContext_StreamSizes 構造体と共に呼び出して、提供するバッファーの数とヘッダーまたはトレーラー用に予約するサイズについて セキュリティ コンテキスト を照会します。
アプリケーションは、データの実際の処理中に余裕のあるバッファー記述子を提供します。 ストリーム セマンティクスを指定することで、呼び出し元は、セキュリティ パッケージ がメッセージのブロックを処理できるように、追加の処理を行う意欲を示します。 基本的に、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 関数を呼び出すことができます。 セキュリティ パッケージでは、バッファーの再割り当てやコピーが必要になる場合があります。 呼び出し元は、次のようにバッファー リストを提供することで、より効率的にすることができます。
バッファ 長さ 種類 1 ヘッダーの長さ SECBUFFER_STREAM_HEADER 2 データの長さ SECBUFFER_DATA 3 トレーラーの長さ SECBUFFER_STREAM_TRAILER これにより、呼び出し元はバッファーをより効率的に使用できます。 QueryContextAttributes 関数を呼び出して、MakeSignatureを呼び出す前に予約する領域の量決定することで、アプリケーションとセキュリティ パッケージに対する操作がより効率的になります。