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


Поставщики служб безопасности

Интерфейс поставщика служб безопасности (SSPI) предоставляет универсальный отраслевый стандартный интерфейс для безопасных распределенных приложений. API однорангового графирования предоставляет приложениям способ защиты ссылок на графе путем указания поставщика служб безопасности (SSP), который является библиотекой DLL, реализующей интерфейс SSPI. Приложение указывает SSP при создании графа с помощью PeerGraphCreate.

Дополнительные сведения о создании собственного поставщика служб см. в ссылке документации по SSPI в списке ссылок на графирование .

Рекомендации по программированию для реализации SSP

Используйте осторожность при вызове приложения из SSP. Следующие рекомендации относятся к обратным вызовам SSP:

  • Обратные вызовы не должны занять много времени, так как они вызываются во время согласования подключения. Если для установки подключения требуется слишком много времени, его можно удалить.
  • API однорангового графирования динамически настраивает значения времени ожидания подключения на основе фактической нагрузки системы. Наименьшее значение времени ожидания — 20 секунд.
  • Чтобы избежать возможных ситуаций взаимоблокировки, приложение не должно получить доступ к базе данных однорангового графирования из обратного вызова. Если приложению требуется информация из базы данных графирования, приложение может кэшировать необходимые сведения, а затем ссылаться на кэш из обратного вызова. Кэширование также может помочь уменьшить время подключения.

При вызове точек входа SSPI инфраструктура однорангового графирования требует определенных значений для определенных параметров пяти (5) функций. Эти значения параметров нельзя изменить, предоставленные SSP, и поставщик служб SSP может игнорировать значения пяти параметров или обрабатывать их корректно. В следующем списке определены эти конкретные параметры и необходимые значения:

  • AcquireCredentialsHandle

    Укажите один (1) для параметра pvGetKeyArgument. Указывает NULL для параметров pszPrincipal, pvLogonIDи pGetKeyFn.

  • InitializeSecurityContext

    Укажите следующие флаги для параметра fContextReq: ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | ISC_REQ_ALLOCATE_MEMORY.

  • AcceptSecurityContext

    Укажите следующие флаги для параметра fContextReq: ASC_REQ_MUTUAL_AUTH | ASC_REQ_CONFIDENTIALITY | ASC_REQ_INTEGRITY | ASC_REQ_SEQUENCE_DETECT | ASC_REQ_STREAM | ASC_REQ_ALLOCATE_MEMORY.

  • EncryptMessage

    Укажите ноль (0) для параметров fQOP и MessageSeqNo.

  • DecryptMessage

    Укажите ноль (0) для параметра MessageSeqNo и NULL для параметра pfQOP.

При вызове EncryptMessageв структуре SecBufferDe sc передаются четыре буфера. В следующей таблице определяется порядок передачи буферов.

Структура SSP Описание
SECBUFFER_STREAM_HEADER Содержит данные заголовка безопасности. Размер буфера заголовка получается путем вызова QueryContextAttributes и указания атрибута SECPKG_ATTR_STREAM_SIZES.
SECBUFFER_DATA Содержит зашифрованное текстовое сообщение.
SECBUFFER_STREAM_TRAILER Содержит данные трейлера безопасности. Размер буфера заголовка получается путем вызова QueryContextAttributes и указания атрибута SECPKG_ATTR_STREAM_SIZES.
SECBUFFER_EMPTY Не инициализирован. Размер этого буфера равен нулю (0).

 

При вызове DecryptMessageAPI однорангового графирования передает ровно четыре структуры SecBuffer. Первый буфер SECBUFFER_DATAи содержит зашифрованное сообщение. Остальные буферы используются для выходных данных и имеют тип SECBUFFER_EMPTY.

Поставщик служб SSP должен поддерживать шифрование и расшифровку буферов данных пользователей с размером 16 КБ и больше в одном вызове.