次の方法で共有


ストリーム コンテキスト

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