Schannel 接続の再ネゴシエーション
暗号スイートやクライアント認証などの接続の属性を変更するには、接続の "再実行" または再ネゴシエーションを要求できます。
変更する属性が資格情報によって制御される場合は、接続を再ネゴシエーションする前に新しい資格情報を取得する必要があります。 詳細については、「 Schannel 資格情報の取得」を参照してください。
クライアント アプリケーションに再実行を要求するには、 InitializeSecurityContext (Schannel) 関数を呼び出します。 サーバー アプリケーションは AcceptSecurityContext (Schannel) 関数を呼び出します。 パラメーターを次のように編集します。
- phContext パラメーターに既存のセキュリティ コンテキストを指定します。
- (クライアントのみ)コンテキストを確立するときに指定したのと同じサーバー名を ( pszTargetName パラメーターで) 指定します。
- 必要に応じて、 phCredential パラメーターを使用して新しい資格情報を指定します。
- 資格情報に関係のないコンテキスト属性を変更する場合は、 fContextReq パラメーターを使用してこれらの属性を指定します。
適切な関数を呼び出した後、アプリケーションは結果をクライアントに送信し、 DecryptMessage (Schannel) 関数を使用して受信メッセージの処理を続行する必要があります。
DecryptMessage (Schannel) 関数は、Schannel がアプリケーションを続行する準備ができたら、SEC_I_RENEGOTIATEを返します。 SEC_I_RENEGOTIATEリターン コードを受け取ったら、アプリケーションで AcceptSecurityContext (Schannel) (サーバー) または InitializeSecurityContext (Schannel) (クライアント) を呼び出し、SECBUFFER_TOKENの DecryptMessage から返されるSECBUFFER_EXTRAの内容を渡す必要があります。 この呼び出しで値が返されたら、アプリケーションが新しい接続を作成しているかのように続行します。