Contextos de fluxo
Os contextos de fluxo lidam com os protocolos seguros orientados a fluxo, como SSL ou PCT. No interesse de compartilhar a mesma interface e gerenciamento de credenciais semelhantes, o SSPI fornece suporte para contextos de fluxo. O protocolo de segurança incorpora o esquema de autenticação de fluxo e os formatos de registro.
Para fornecer protocolos orientados a fluxo, pacotes de segurança que dão suporte a contextos de fluxo têm as seguintes características de processo:
O pacote define o sinalizador SECPKG_FLAG_STREAM para indicar que ele dá suporte à semântica de fluxo.
Os aplicativos de transporte solicitam semântica de fluxo definindo os sinalizadores ISC_REQ_STREAM e ASC_REQ_STREAM nas chamadas para as funçõesInitializeSecurityContext (Geral) eAcceptSecurityContext (Geral).
O aplicativo chama a funçãoQueryContextAttributes (Geral) com uma estrutura SecPkgContext_StreamSizes para consultar o contexto de segurança para o número de buffers a serem fornecidos e os tamanhos a serem reservados para cabeçalhos ou trailers.
O aplicativo fornece descritores de buffer de sobra durante o processamento real dos dados. Ao especificar a semântica de fluxo, o chamador indica a vontade de fazer processamento extra para que o pacote de segurança possa lidar com o bloqueio das mensagens. Em essência, para as funções MakeSignature e VerifySignature, o chamador passa uma lista de buffers. Quando uma mensagem é recebida de um canal orientado a fluxo (como uma porta TCP), o chamador passa em uma lista de buffers da seguinte maneira.
Buffer Comprimento Tipo de buffer 1 Comprimento da Mensagem SECBUFFER_DATA 2 0 SECBUFFER_EMPTY 3 0 SECBUFFER_EMPTY 4 0 SECBUFFER_EMPTY 5 0 SECBUFFER_EMPTY Em seguida, o pacote de segurança funciona noblob. Se a função retornar com êxito, a lista de buffers será semelhante à seguinte.
Buffer Comprimento Tipo de buffer 1 Comprimento do cabeçalho SECBUFFER_STREAM_HEADER 2 Comprimento dos dados SECBUFFER_DATA 3 Comprimento do trailer SECBUFFER_STREAM_TRAILER 4 0 SECBUFFER_EMPTY 5 0 SECBUFFER_EMPTY O pacote também pode ter retornado o buffer nº 4 com tamanho x e tipo de buffer SECBUFFER_EXTRA indicando que os dados nesse buffer fazem parte do próximo registro e ainda não foram processados. Por outro lado, se a função de mensagem retornar o código de erro SEC_E_INCOMPLETE_MESSAGE, a lista de buffers retornada será semelhante à seguinte.
Buffer Comprimento Tipo de buffer 1 x SECBUFFER_MISSING Isso indica que mais dados foram necessários para processar o registro. Ao contrário da maioria dos erros retornados de uma função de mensagem, esse tipo de buffer não indica que o contexto foi comprometido. Em vez disso, indica que mais dados são necessários. pacotes de segurança não devem atualizar seusde estadonessa condição.
Da mesma forma, no lado remetente da comunicação, o chamador pode chamar a função MakeSignature. O pacote de segurança pode precisar realocar o buffer ou copiar as coisas ao redor. O chamador pode ser mais eficiente fornecendo uma lista de buffers da seguinte maneira.
Buffer Comprimento Tipo 1 Comprimento do cabeçalho SECBUFFER_STREAM_HEADER 2 Comprimento dos dados SECBUFFER_DATA 3 Comprimento do trailer SECBUFFER_STREAM_TRAILER Isso permite que o chamador use os buffers com mais eficiência. Ao chamar a função QueryContextAttributes para determinar a quantidade de espaço a reservar antes de chamar MakeSignature, a operação é mais eficiente para o aplicativo e o pacote de segurança.