Функция MakeSignature (sspi.h)
Функция MakeSignature создает криптографическую контрольную сумму сообщения, а также включает сведения о последовательности, чтобы предотвратить потерю или вставку сообщения. MakeSignature позволяет приложению выбирать между несколькими алгоритмами шифрования, если они поддерживаются выбранным механизмом. Функция MakeSignature использует контекст безопасности , на который ссылается дескриптор контекста.
Эта функция не поддерживается поставщиком поддержки безопасности (SSP) Schannel.
Синтаксис
KSECDDDECLSPEC SECURITY_STATUS SEC_ENTRY MakeSignature(
[in] PCtxtHandle phContext,
[in] unsigned long fQOP,
[in, out] PSecBufferDesc pMessage,
[in] unsigned long MessageSeqNo
);
Параметры
[in] phContext
Дескриптор контекста безопасности, используемый для подписи сообщения.
[in] fQOP
Флаги, относящиеся к конкретному пакету, которые указывают на качество защиты. Пакет безопасности может использовать этот параметр для включения выбора алгоритмов шифрования.
При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение.
[in, out] pMessage
Указатель на структуру SecBufferDesc . Во входных данных структура ссылается на одну или несколько структур SecBuffer , содержащих сообщение для подписи. Функция не обрабатывает буферы с помощью атрибута SECBUFFER_READONLY_WITH_CHECKSUM.
Структура SecBufferDesc также ссылается на структуру SecBuffer типа SECBUFFER_TOKEN, получающую сигнатуру.
Если поставщик дайджест-служб используется в качестве протокола проверки подлинности HTTP, буферы должны быть настроены следующим образом.
Тип буфера #/buffer | Значение |
---|---|
|
Пустой. |
|
Метод. |
|
URL. |
|
HEntity. Дополнительные сведения см. в разделе Входные буферы для ответа на дайджест-вызов. |
|
Пустой. Получает подпись. |
Если поставщик дайджест-служб используется в качестве механизма SASL, буферы следует настроить следующим образом.
Тип буфера #/buffer | Значение |
---|---|
|
Пустой. Получает подпись. Этот буфер должен быть достаточно большим для хранения максимально возможной сигнатуры. Определите требуемый размер, вызвав функцию QueryContextAttributes (General) и указав SECPKG_ATTR_SIZES. Проверьте возвращенный элемент структуры SecPkgContext_SizescbMaxSignature. |
|
Сообщение для подписи. |
|
Пустой. |
[in] MessageSeqNo
Порядковый номер, назначенный транспортному приложению сообщению. Если транспортное приложение не поддерживает порядковые номера, этот параметр равен нулю.
При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение. Дайджест SSP управляет порядковой нумеровой службой внутри системы.
Возвращаемое значение
Если функция выполняется успешно, функция возвращает SEC_E_OK.
Если функция завершается сбоем, она возвращает один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Удаленной стороне требуется новая последовательность подтверждения или приложение только что инициировало завершение работы. Вернитесь к циклу согласования и снова вызовите AcceptSecurityContext (General) или InitializeSecurityContext (General). В первом вызове передается пустой входной буфер. |
|
Дескриптор контекста, заданный phContext , недопустим. |
|
pMessage не содержит допустимый буфер SECBUFFER_TOKEN или слишком мало буферов. |
|
Число nonce находится вне последовательности. |
|
Необходимо повторно проверить контекст безопасности (phContext). |
|
Число nonce не является числовым. |
|
Качество защиты, согласованное между клиентом и сервером, не включало проверку целостности . |
Комментарии
Функция MakeSignature создает сигнатуру на основе сообщения и ключа сеанса для контекста.
Функция VerifySignature проверяет сообщения, подписанные функцией MakeSignature .
Если транспортное приложение создало контекст безопасности для поддержки обнаружения последовательности, а вызывающий объект предоставляет порядковый номер, функция включает эти сведения в сигнатуру. Это защищает от ответов, вставки и подавления сообщений. Пакет безопасности включает порядковый номер, передаваемый из транспортного приложения.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | sspi.h (включая Security.h) |
Библиотека | Secur32.lib |
DLL | Secur32.dll |