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


Контексты потоковой передачи

Контексты потоков обрабатывают безопасные протоколы, ориентированные на поток, такие как SSL или РСТ. В интересах совместного использования одного интерфейса и аналогичного управления учетными данными SSPI обеспечивает поддержку контекстов потока. Протокол безопасности включает как схему проверки подлинности потока, так и форматы записей.

Чтобы обеспечить потокоориентированные протоколы, пакеты безопасности, поддерживающие контексты потока, имеют следующие характеристики процесса:

  • Пакет задает флаг SECPKG_FLAG_STREAM, указывающий, что он поддерживает семантику потока.

  • Приложения транспорта запрашивают семантику потока, задав флаги ISC_REQ_STREAM и ASC_REQ_STREAM в вызовах функцийInitializeSecurityContext (General) и AcceptSecurityContext (General).

  • Приложение вызывает функциюQueryContextAttributes (Общие) с структурой SecPkgContext_StreamSizes для запроса контекста безопасности для количества буферов, которые необходимо предоставить, и размеров для резервирования заголовков или трейлеров.

  • Приложение предоставляет дескрипторы буфера для экономии во время фактической обработки данных. Задав семантику потока, вызывающий объект указывает готовность выполнять дополнительную обработку, чтобы пакет безопасности может обрабатывать блокировку сообщений. По сути, для функций MakeSignature и VerifySignature вызывающий объект передает список буферов. При получении сообщения из канала, ориентированного на поток (например, TCP-порт), вызывающий объект передается в список буферов следующим образом.

    Буфер Длина Тип буфера
    1 Длина сообщения SECBUFFER_DATA
    2 0 SECBUFFER_EMPTY
    3 0 SECBUFFER_EMPTY
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

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

    Буфер Длина Тип буфера
    1 Длина заголовка SECBUFFER_STREAM_HEADER
    2 Длина данных SECBUFFER_DATA
    3 Длина трейлера SECBUFFER_STREAM_TRAILER
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    Пакет может также вернуть буфер #4 с длиной x и типом буфера SECBUFFER_EXTRA, указывающий, что данные в этом буфере являются частью следующей записи и еще не обработаны. И наоборот, если функция сообщения возвращает код ошибки SEC_E_INCOMPLETE_MESSAGE, возвращенный список буферов будет выглядеть следующим образом.

    Буфер Длина Тип буфера
    1 x SECBUFFER_MISSING

     

    Это означает, что для обработки записи требуется больше данных. В отличие от большинства ошибок, возвращаемых из функции сообщения, этот тип буфера не указывает на то, что контекст скомпрометирован. Вместо этого он указывает, что требуется больше данных. пакеты безопасности не должны обновлятьсостоянияв этом состоянии.

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

    Буфер Длина Тип
    1 Длина заголовка SECBUFFER_STREAM_HEADER
    2 Длина данных SECBUFFER_DATA
    3 Длина трейлера SECBUFFER_STREAM_TRAILER

     

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