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 o 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, os 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ções InitializeSecurityContext (Geral) e AcceptSecurityContext (Geral ).
O aplicativo chama a função QueryContextAttributes (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 disposição 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 no BLOB. 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 comprimento 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. os pacotes de segurança não devem atualizar seu estado nessa condição.
Da mesma forma, no lado do remetente da comunicação, o chamador pode chamar a função MakeSignature . O pacote de segurança pode precisar realocar o buffer ou copiar itens ao redor. O chamador pode ser mais eficiente fornecendo uma lista de buffers da seguinte maneira.
Buffer Comprimento Type 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.