Мне нужно реализовать процесс рукопожатия TLS с использованием интерфейса SSPI.
Мое приложение реализует клиентскую сторону, и, как я увидел из здесь общий порядок действий таков:
- InitializeSecurityContext — первый вызов возвращает указатель на структуру SecBufferDesc.
- Вызов функции send(=WinSock API) с выходными буферами.
- Вызов функции recv
- Снова вызовите InitializeSecurityContext с буферами.
Объяснение MSDN об этих буферах:
«При вызовах этой функции после первоначального вызова должно быть два буфера. Первый имеет тип SECBUFFER_TOKEN и содержит токен, полученный от сервера. Второй буфер имеет тип SECBUFFER_EMPTY; установите для членов pvBuffer и cbBuffer значение ноль».
Мои вопросы:
- Мне нужно еще одно объяснение: что означают буферы? что содержит второй буфер? для чего они?
- В MSDN написано, что входной параметр TargetDataRep функции InitializeSecurityContext не используется для Schannel, но многие образцы, которые я видел, устанавливают для него значение SECURITY_NATIVE_DREP. что такое флаг SECURITY_NATIVE_DREP? почему MSDN говорит установить его на ноль?
Буду очень признателен за любую помощь.
Спасибо!.