Поставщики служб безопасности
Интерфейс поставщика служб безопасности (SSPI) предоставляет универсальный отраслевый стандартный интерфейс для безопасных распределенных приложений. API однорангового графирования предоставляет приложениям способ защиты ссылок на графе путем указания поставщика служб безопасности (SSP), который является библиотекой DLL, реализующей интерфейс SSPI. Приложение указывает SSP при создании графа с помощью PeerGraphCreate.
Дополнительные сведения о создании собственного поставщика служб см. в ссылке документации по SSPI в списке ссылок на графирование .
Рекомендации по программированию для реализации SSP
Используйте осторожность при вызове приложения из SSP. Следующие рекомендации относятся к обратным вызовам SSP:
- Обратные вызовы не должны занять много времени, так как они вызываются во время согласования подключения. Если для установки подключения требуется слишком много времени, его можно удалить.
- API однорангового графирования динамически настраивает значения времени ожидания подключения на основе фактической нагрузки системы. Наименьшее значение времени ожидания — 20 секунд.
- Чтобы избежать возможных ситуаций взаимоблокировки, приложение не должно получить доступ к базе данных однорангового графирования из обратного вызова. Если приложению требуется информация из базы данных графирования, приложение может кэшировать необходимые сведения, а затем ссылаться на кэш из обратного вызова. Кэширование также может помочь уменьшить время подключения.
При вызове точек входа SSPI инфраструктура однорангового графирования требует определенных значений для определенных параметров пяти (5) функций. Эти значения параметров нельзя изменить, предоставленные SSP, и поставщик служб SSP может игнорировать значения пяти параметров или обрабатывать их корректно. В следующем списке определены эти конкретные параметры и необходимые значения:
-
Укажите один (1) для параметра pvGetKeyArgument. Указывает NULL для параметров pszPrincipal, pvLogonIDи pGetKeyFn.
-
Укажите следующие флаги для параметра fContextReq: ISC_REQ_MUTUAL_AUTH | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | ISC_REQ_ALLOCATE_MEMORY.
-
Укажите следующие флаги для параметра fContextReq: ASC_REQ_MUTUAL_AUTH | ASC_REQ_CONFIDENTIALITY | ASC_REQ_INTEGRITY | ASC_REQ_SEQUENCE_DETECT | ASC_REQ_STREAM | ASC_REQ_ALLOCATE_MEMORY.
-
Укажите ноль (0) для параметров fQOP и MessageSeqNo.
-
Укажите ноль (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 КБ и больше в одном вызове.