Schannel セキュリティ コンテキストの作成

クライアントとサーバー間の通信を保護する セキュリティ コンテキスト を確立するには、両方とも次の情報交換プロセスに参加する必要があります。

クライアント

  1. クライアントは InitializeSecurityContext (General) 関数を呼び出します。
  2. Schannel は、選択したセキュリティ プロトコルの規則に従ってセキュリティ コンテキストの作成を開始します。 関数の戻りコードは、クライアントが関数を再度呼び出す必要があるかどうかを示します。 InitializeSecurityContext (General) は、コンテキストを表すトークンを返す場合があります。
  3. トークンが返された場合、クライアントはトークンをサーバーに送信します。
  4. InitializeSecurityContext (General) がSEC_E_OKを返すと、クライアントが実行されます。 関数がSEC_I_CONTINUE_NEEDEDを返す場合、クライアントはサーバーがトークンを送信するまで待機する必要があります。 クライアントがサーバーからのトークンを持っている場合は、InitializeSecurityContext (General)関数をもう一度呼び出す必要があります。 (手順 2 に戻ります。

サーバー

  1. サーバーは、クライアントがセキュリティ トークンを含むメッセージを送信するのを待機します。 サーバーは、クライアントから受信したトークンを AcceptSecurityContext (General) 関数に渡します。
  2. Schannel は、トークンによって表される部分セキュリティ コンテキストに基づいて構築されます。 Schannel は、サーバーにトークンを返し、サーバーが関数を再度呼び出す必要があるかどうかを示すリターン コードを返します。
  3. トークンが返された場合、サーバーはトークンをクライアントに送信します。
  4. AcceptSecurityContext (General) がSEC_E_OKを返すと、サーバーが実行されます。 関数がSEC_I_CONTINUE_NEEDEDを返す場合、サーバーはクライアントがトークンを送信するまで待機する必要があります。 サーバーがクライアントからのトークンを持っている場合は、 AcceptSecurityContext (General) 関数をもう一度呼び出す必要があります。 (手順 2 に戻ります。

いずれかの関数がSEC_E_OK、SEC_I_CONTINUE_NEEDED、またはSEC_E_INCOMPLETE_MESSAGE以外の値を返す場合 (次の段落を参照)、エラーが発生しました。 クライアントとサーバーは DeleteSecurityContext 関数を呼び出して、部分的に確立されたセキュリティ コンテキストを削除する必要があります。

クライアントとサーバーの処理を変更する可能性がある特別なケースは、情報が少なすぎる場合や、他のユーザーからクライアントまたはサーバーに送信される情報が多すぎる場合です。 情報が少なすぎる場合、両方の関数がSEC_E_INCOMPLETE_MESSAGEを返します。 不十分な情報または過剰な情報を認識して処理する方法については、「 Schannel によって返される追加バッファー」を参照してください。

Schannel を使用した認証の実行

証明書のマッピング

Schannel 資格情報の手動検証