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


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

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

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

Рекомендации по программированию для реализации поставщика общих служб

Будьте внимательны при вызове приложения из поставщика общих служб. К обратным вызовам поставщика общих служб относятся следующие рекомендации.

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

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

  • 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 в структуре SecBufferDesc передаются четыре буфера. В следующей таблице указан порядок передачи буферов.

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

 

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

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