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


Повторное согласование подключения Schannel

Чтобы изменить атрибуты подключения, такие как набор шифров или проверка подлинности клиента, можно запросить повтор или повторное согласование подключения.

Если атрибуты, которые требуется изменить, управляются учетными данными, необходимо получить новые учетные данные перед повторным согласованием подключения. Дополнительные сведения см. в разделе Получение учетных данных Schannel.

Чтобы запросить повтор из клиентского приложения, вызовите функцию InitializeSecurityContext (Schannel). Серверные приложения вызывают функцию AcceptSecurityContext (Schannel). Задайте параметры следующим образом:

  • Укажите существующий контекст безопасности в параметре phContext .
  • (Только клиенты) Укажите то же имя сервера (в параметре pszTargetName ), как указано при установке контекста.
  • Укажите новые учетные данные с помощью параметра phCredential , если применимо.
  • Если вы хотите изменить атрибуты контекста, не связанные с учетными данными, укажите эти атрибуты с помощью параметра fContextReq .

После вызова соответствующей функции приложение должно отправить результаты клиенту и продолжить обработку входящих сообщений с помощью функции DecryptMessage (Schannel).

Функция DecryptMessage (Schannel) вернет SEC_I_RENEGOTIATE, когда Schannel будет готова для продолжения работы приложения. При получении кода возврата SEC_I_RENEGOTIATE приложение должно вызвать AcceptSecurityContext (Schannel) ( серверы) или InitializeSecurityContext (Schannel) (клиенты) и передать содержимое SECBUFFER_EXTRA, возвращенное decryptMessage, в SECBUFFER_TOKEN. После того как этот вызов возвращает значение, продолжайте, как если бы приложение создавало новое подключение.