Возвращает handshake-сообщения, которые клиент должен передать серверу, и обрабатывает ответные handshake-сообщения.
SECURITY_STATUS InitializeSecurityContext( PCredHandle phCredential, PCtxtHandle phContext, SEC_CHAR * pszTargetName, ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, PULONG pfContextAttr, PTimeStamp ptsExpiry );
Флаг | Описание |
---|---|
ISC_REQ_REPLAY_DETECT | Защита от навязывания повторных пакетов |
ISC_REQ_SEQUENCE_DETECT | Защита от навязывания перестановок пакетов |
ISC_REQ_CONFIDENTIALITY | Конфиденциальность (шифрование) |
ISC_REQ_STREAM | Соединение потокового типа |
ISC_REQ_ALLOCATE_MEMORY | SSP отводит память для буферов. Ее необходимо освободить вызовом FreeContextBuffer |
ISC_REQ_EXTENDED_ERROR | Уведомлять другую сторону об ошибках (SSL alerts) |
ISC_REQ_CONNECTION | Неформатированные сообщения |
ISC_REQ_MUTUAL_AUTH | Взаимная аутентификация |
ISC_REQ_USE_SUPPLIED_CREDS | SSP не будет пытаться искать удостоверение, если оно не предоставлено приложением |
ISC_REQ_MANUAL_CRED_VALIDATION | SSP не будет проверять удостоверение другой стороны |
Коды возврата | Описание |
---|---|
SEC_E_OK | Контекст безопасности был успешно установлен. Дальнейших вызовов к этой функции не требуется. Если функция вернула данные в pOutput, их следует переслать серверу. |
SEC_E_INCOMPLETE_MESSAGE | Данные во входном буфере неполны. Приложение должно прочитать остальные данные, и снова вызвать InitializeSecurityContext. |
SEC_I_INCOMPLETE_CREDENTIALS | Сервер запросил аутентификацию клиента, а указанное удостоверение не содержит сертификата, или сертификат издан не доверенным центром сертификации. |
SEC_I_CONTINUE_NEEDED | Клиент должен послать выходные данные серверу и ждать ответа. Полученный ответ должен быть передан при следующем вызове в InitializeSecurityContext через параметр pInput. |
Коды возврата | Описание |
---|---|
SEC_E_INVALID_TOKEN | Параметр pInput содержит неправильные входные данные. |
SEC_E_INVALID_HANDLE | Параметр phContext содержит недействительный дескриптор контекста. |
SEC_E_NO_CREDENTIALS | Предоставленное удостоверение недостоверно. |
SEC_E_UNSUPPORTED_FUNCTION | Параметр fContextReq содержит неподдерживаемый набор флагов. |
SEC_E_INSUFFICIENT_MEMORY | Один из буферов оказался слишком мал. См. заметки. |
На стороне сервера для создания контекста используется парная функция AcceptSecurityContext. При получении кода ошибки SEC_E_INSUFFICIENT_MEMORY, укажите атрибут ISC_REQ_ALLOCATE_MEMORY в fContextReq. При получении кода SEC_I_INCOMPLETE_CREDENTIALS, убедитесь, что при вызове AcquireCredentialsHandle был указан действующий сертификат, изданный центром, которому доверяет сервер. Список таких центров может быть получен вызовом QueryContextAttributes с атрибутом SECPKG_ATTR_ISSUER_LIST_EX. Найдя такой сертификат, создайте новое удостоверение вызовом к AcquireCredentialsHandle, и вызовите InitializeSecurityContext еще раз, с новым удостоверением.
Вызывающее приложение должно определить допустимость атрибутов установленного контекста. Например, если конфиденциальность соединения была запрошена, но не была достигнута, некоторые приложения должны принять решение немедленно прекратить соединение. Если контекст не смог быть установлен, сервер должен удалить частично созданный контекст вызовом DeleteSecurityContext.
AIX: 5.3 или выше.
FreeBSD: 7 или выше.
Linux: LSB 3.1 (RHEL 4, SuSE 10) или выше.
Solaris: 10 или выше.
Windows 2000 или выше: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Файл описания: Прототип описан в файле sspi.h для Windows и CSP_Sspi.h, CSP_SChannel.h, CpSSP.h для Unix.
AcquireCredentialsHandle() ,CtxtHandle ,DeleteSecurityContext() ,AcceptSecurityContext() ,SecBuffer ,SecBufferDesc ,FreeContextBuffer() ,TimeStamp