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


Функция 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 Значение
0
SECBUFFER_TOKEN
Пустой.
1
SECBUFFER_PKG_PARAMS
Метод.
2
SECBUFFER_PKG_PARAMS
URL.
3
SECBUFFER_PKG_PARAMS
HEntity. Дополнительные сведения см. в разделе Входные буферы для ответа на дайджест-вызов.
4
SECBUFFER_PADDING
Пустой. Получает подпись.
 

Если поставщик дайджест-служб используется в качестве механизма SASL, буферы следует настроить следующим образом.

Тип буфера #/buffer Значение
0
SECBUFFER_TOKEN
Пустой. Получает подпись. Этот буфер должен быть достаточно большим для хранения максимально возможной сигнатуры. Определите требуемый размер, вызвав функцию QueryContextAttributes (General) и указав SECPKG_ATTR_SIZES. Проверьте возвращенный элемент структуры SecPkgContext_SizescbMaxSignature.
1
SECBUFFER_DATA
Сообщение для подписи.
2
SECBUFFER_PADDING
Пустой.

[in] MessageSeqNo

Порядковый номер, назначенный транспортному приложению сообщению. Если транспортное приложение не поддерживает порядковые номера, этот параметр равен нулю.

При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение. Дайджест SSP управляет порядковой нумеровой службой внутри системы.

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

Если функция выполняется успешно, функция возвращает SEC_E_OK.

Если функция завершается сбоем, она возвращает один из следующих кодов ошибок.

Код возврата Описание
SEC_I_RENEGOTIATE
Удаленной стороне требуется новая последовательность подтверждения или приложение только что инициировало завершение работы. Вернитесь к циклу согласования и снова вызовите AcceptSecurityContext (General) или InitializeSecurityContext (General). В первом вызове передается пустой входной буфер.
SEC_E_INVALID_HANDLE
Дескриптор контекста, заданный phContext , недопустим.
SEC_E_INVALID_TOKEN
pMessage не содержит допустимый буфер SECBUFFER_TOKEN или слишком мало буферов.
SEC_E_OUT_OF_SEQUENCE
Число nonce находится вне последовательности.
SEC_E_NO_AUTHENTICATING_AUTHORITY
Необходимо повторно проверить контекст безопасности (phContext).
STATUS_INVALID_PARAMETER
Число nonce не является числовым.
SEC_E_QOP_NOT_SUPPORTED
Качество защиты, согласованное между клиентом и сервером, не включало проверку целостности .

Комментарии

Функция MakeSignature создает сигнатуру на основе сообщения и ключа сеанса для контекста.

Функция VerifySignature проверяет сообщения, подписанные функцией MakeSignature .

Если транспортное приложение создало контекст безопасности для поддержки обнаружения последовательности, а вызывающий объект предоставляет порядковый номер, функция включает эти сведения в сигнатуру. Это защищает от ответов, вставки и подавления сообщений. Пакет безопасности включает порядковый номер, передаваемый из транспортного приложения.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header sspi.h (включая Security.h)
Библиотека Secur32.lib
DLL Secur32.dll

См. также раздел

Функции SSPI

SecBuffer

SecBufferDesc

VerifySignature