Поделиться через


Создание контекста безопасности 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 вручную