Крипто-Про SSPI

AcceptSecurityContext

Функция AcceptSecurityContext() создает серверный контекст безопасности, используемый для защищенного обмена между клиентом и сервером.

Она обрабатывает входящие handshake-сообщения, и возвращает ответные handshake-сообщения, которые сервер должен передать клиенту.

SECURITY_STATUS AcceptSecurityContext(
  PCredHandle phCredential,
  PCtxtHandle phContext,
  PSecBufferDesc pInput,
  ULONG fContextReq,
  ULONG TargetDataRep,
  PCtxtHandle phNewContext,
  PSecBufferDesc pOutput,
  PULONG pfContextAttr,
  PTimeStamp ptsExpiry
);

Аргументы

phCredential
[in] Указатель на дескриптор удостоверения сервера. Указанный дескриптор получается через запрос к функции AcquireCredentialsHandle.
phContext
[in] Указатель на CtxtHandle World Wide Web link. При первом вызове, укажите NULL. При последующих - указатель на дескриптор, возвращенный в phNewContext после первого вызова к этой функции.
pInput
[in] указатель на структуру SecBufferDesc World Wide Web link, содержащую две структуры SecBuffer World Wide Web link. Первый буфер должен иметь тип SECBUFFER_TOKEN, и содержать пакет, полученый от клиента. Второй буфер должен иметь тип SECBUFFER_EMPTY
fContextReq
[in] Показывает, какой набор свойств должен поддерживать контекст. Допустимые флаги перечислены в следующей таблице:
Флаг Описание
ASC_REQ_REPLAY_DETECT Защита от навязывания повторных пакетов
ASC_REQ_SEQUENCE_DETECT Защита от навязывания перестановок пакетов
ASC_REQ_CONFIDENTIALITY Конциденциальность (шифрование)
ASC_REQ_STREAM Соединение потокового типа
ASC_REQ_ALLOCATE_MEMORY SSP отводит память для буферов. Ее необходимо освободить вызовом FreeContextBuffer
ASC_REQ_EXTENDED_ERROR Уведомлять другую сторону об ошибках (SSL alerts)
ASC_REQ_CONNECTION Неформатированные сообщения
ASC_REQ_MUTUAL_AUTH Взаимная аутентификация
ASC_REQ_USE_SUPPLIED_CREDS SSP не будет пытаться искать удостоверение, если оно не предоставлено приложением
ASC_REQ_MANUAL_CRED_VALIDATION SSP не будет проверять удостоверение другой стороны
Может оказаться так, что клиент поддерживает не все из запрошенных параметров. Дальнейшие детали смотрите в описании параметра pfContextAttr
TargetDataRep
[in] Параметр зарезервирован для будущего использования и должен быть 0.
phNewContext
[in/out] Указатель на CtxtHandle World Wide Web link. При первом вызове сюда будет помещен дескриптор нового контекста. При последующих вызовах полученный дескриптор следует передавать через параметр phContext , а в phNewContext передавать NULL
pOutput
[in] Указатель на структуру SecBufferDesc World Wide Web link, содержащую SecBuffer World Wide Web link с типом SECBUFFER_TOKEN. На выходе в этот буфер будет помещен пакет, который нужно переслать клиенту. Функция может дополнительно вернуть буфер с типом SECBUFFER_EXTRA.
pfContextAttr
[out] Указатель на ULONG, куда будут записаны флаги, описывающие свойства устанавливаемого контекста. Список возможных значений приведен в описании параметра fContextReq . pfContextAttr получает тот же набор флагов, с заменой префикса ASC_REQ на ASC_RET.
Warning Атрибуты безопасности не следует проверять до последнего вызова функции, возвращающего SEC_E_OK. Остальные атрибуты, такие как ASC_RET_ALLOCATED_MEMORY можно использовать после первого же вызова.
ptsExpiry
[out] Опционален. Указатель на структуру TimeStamp. Gри наличии сертификата клиента, этот параметр получает время истечения этого сертификата. Иначе возвращается максимальное возможное значение времени.

Возвращаемые значения:

При успешном завершении функция возвращает одно из следующих значений:
Коды возврата Описание
SEC_E_OK Контекст безопасности был успешно установлен. Дальнейших вызовов к этой функции не требуется. Если функция вернула данные в pOutput, их следует переслать клиенту.
SEC_E_INCOMPLETE_MESSAGE Данные во входном буфере неполны. Приложение должно прочитать остальные данные, и снова вызвать AcceptSecurityContext .
SEC_I_CONTINUE_NEEDED Сервер должен послать выходные данные клиенту и ждать ответа от клиента. Полученный ответ полжен быть передан при следующем вызове в AcceptSecurityContext через параметр pInput .

Возвращаемые значения:

В случае ошибки функция возвращает одно из следующих значений:
Коды возврата Описание
SEC_E_INVALID_TOKEN Параметр pInput содержит неправильные входные данные.
SEC_E_INVALID_HANDLE Параметр phContext содержит недействительный дескриптор контекста.
SEC_E_UNSUPPORTED_FUNCTION Параметр fContextReq содержит неподдерживаемый набор флагов.
SEC_E_INSUFFICIENT_MEMORY Один из буферов оказался слишком мал. См. заметки.

Примечания

На стороне клиента для создания контекста используется парная функция InitializeSecurityContext.
При получении кода ошибки SEC_E_INSUFFICIENT_MEMORY, укажите атрибут ASC_REQ_ALLOCATE_MEMORY в fContextReq .
Вызывающее приложение должно определить допустимость атрибутов установленного контекста. Например, если конфиденциальность соединения была запрошена, но не была достигнута, некоторые приложения должны принять решение немедленно прекратить соединение. Если контекст не смог быть установлен, сервер должен удалить частично созданный контекст вызовом DeleteSecurityContext.
После установления контекста, серверное приложение может с помощью функции QuerySecurityContextToken получить дескриптор пользователя, которому сопоставлен сертификат клиента, и использовать его для имперсонализации пользователя.

Требования:

Windows NT/2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Windows 95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP 2.0 World Wide Web link ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Файл описания: Прототип описан в файле sspi.h.

См. также:

AcquireCredentialsHandle() ,CtxtHandle World Wide Web link ,DeleteSecurityContext() ,InitializeSecurityContext() ,SecBuffer World Wide Web link ,SecBufferDesc World Wide Web link ,FreeContextBuffer() ,TimeStamp World Wide Web link

Крипто-Про SSPI Версия: 3.0 Сборка 3293
Что Вы думаете по поводу данной статьи?
Закажите CD c Крипто-Про CSP