SSPIインターフェイスを使用してTLSハンドシェイクプロセスを実装する必要があります。
私のアプリは、クライアント側を実装し、私はhereから見たように、一般的な流れは以下のとおりです。InitializeSecurityContext(Schannel)によるTLSハンドシェイクプロセス
- InitializeSecurityContextの - 最初の呼び出しがSecBufferDesc構造体へのポインタを返します。
- を呼び出して、出力バッファで(= WinSock API)関数を送信します。
- recv関数を呼び出す
- バッファを使用して再度InitializeSecurityContextを呼び出します。
これらのバッファに関するMSDN説明:
「最初の呼び出しの後に、この関数の呼び出しでは、2つの のバッファが存在しなければならない最初はSECBUFFER_TOKEN型を持つから受信したトークン が含まれています。 2番目のバッファはSECBUFFER_EMPTYタイプです; は、pvBufferメンバーとcbBufferメンバーの両方をゼロに設定します。
私の質問:
- 私はいくつかのより多くの説明が必要:バッファの意味は何ですか? 2番目のバッファには何が含まれていますか?それらは何のため?
- MSDNには、InitializeSecurityContext関数のTargetDataRep入力パラメータがSchannelにナットとして使用されていると書かれていますが、見たサンプルの多くはSECURITY_NATIVE_DREPに設定されています。 SECURITY_NATIVE_DREPフラグは何ですか?なぜMSDNはゼロに設定すると言いますか?
本当にありがとうございます。
ありがとうございます。
ありがとうございました! 1.ハンドシェイクループ中にこれらのバッファの内容の例を教えてください。 (プロセスのある時点の内容がどれほど大きくなるかの例)。 2. [this](http://msdn.microsoft.com/en-us/library/aa918273.aspx)MSDN SSPI(Schannel)コードサンプルでは、SECURITY_NATIVE_DREPが設定されています。それは間違いですか? – RRR
1 - 最初の 'InitializeSecurityContext'呼び出しでは、トークンを保持するための空の' SECBUFFER_TOKEN'バッファーを出力します。これは、このサイトのSECURITY_NATIVE_DREPフラグを調べることでわかります。'SEC_I_CONTINUE_NEEDED'を受け取ると、あなたはトークン出力バッファにあるデータを相手に送り、応答してデータを受け取って、受け取ったデータを含む' SECBUFFER_TOKEN'バッファを提供する別の 'InitializeSecurityContext'呼び出しを行います。 'SEC_I_CONTINUE_NEEDED'という結果がもう一度得られれば、トークンデータをリモートパーティーに送り、応答を受け取ってSChannel APIに送り、初期化を続行します。 –
2 - 'SECURITY_NATIVE_DREP'が間違いであるかどうかわかりません。このフラグは必須ではないようで、APIはそれを無視します。私はドキュメントに固執し、実際のコードから削除します。 –