4

SSPIインターフェイスを使用してTLSハンドシェイクプロセスを実装する必要があります。
私のアプリはクライアント側を実装しています。ここから見たように、一般的なフローは次のとおりです。

  1. InitializeSecurityContext-最初の呼び出しは、SecBufferDesc構造体へのポインターを返します。
  2. 出力バッファーを使用してsend(= WinSock API)関数を呼び出します。
  3. recv関数を呼び出す
  4. バッファーを使用して、InitializeSecurityContextを再度呼び出します。

これらのバッファに関するMSDNの説明:

「最初の呼び出し後のこの関数の呼び出しでは、2つのバッファーが必要です。最初のバッファーのタイプはSECBUFFER_TOKENで、サーバーから受信したトークンが含まれます。2番目のバッファーのタイプはSECBUFFER_EMPTYです。pvBufferメンバーとcbBufferメンバーの両方をゼロに設定してください。」

私の質問:

  1. もう少し説明が必要です:バッファの意味は何ですか?2番目のバッファには何が含まれていますか?それらは何のため?
  2. MSDNには、InitializeSecurityContext関数のTargetDataRep入力パラメーターがSchannelに使用されると書かれていますが、私が見た多くのサンプルでは、​​SECURITY_NATIVE_DREPに設定されています。SECURITY_NATIVE_DREPフラグとは何ですか?なぜMSDNはそれをゼロに設定すると言うのですか?

私は本当にどんな助けにも感謝します。
ありがとう!。

4

1 に答える 1

3

1.SChannelは、安全なチャネルを介してデータバッファを転送できるようにするための抽象化レイヤーを提供します。APIは、データを送信するときに、実際のデータ(ペイロード)とセキュリティで保護されたチャネルトークン/コンテキストを保持する2番目のバッファーの2つのデータバッファーを提供するように設計されています。プッシュスルーするすべてのペイロードバッファにこのバッファをアタッチすることを前提としています。たとえば、APIが設計されていないため、このデータを内部で保持および管理します。たとえば、ハンドルを使用します。

2. InitializeSecurityContextSChannelパッケージだけでなく、他のシナリオでもこのパラメーターが使用され、別のパッケージに関連するもの、そこからコピーされたもの、または両方に適用されるものを確認する機会があったサンプルコードが使用されます。

于 2012-04-03T13:31:04.867 に答える