Compartir a través de


Contextos de secuencia

Los contextos de flujo controlan los protocolos seguros orientados a flujos, como SSL o PCT. En el interés de compartir la misma interfaz y la administración de credenciales similares, SSPI proporciona compatibilidad con contextos de flujo. El protocolo de seguridad incorpora tanto el esquema de autenticación de secuencia como los formatos de registro.

Para proporcionar protocolos orientados a flujos, los paquetes de seguridad que admiten contextos de flujo tienen las siguientes características de proceso:

  • El paquete establece la marca SECPKG_FLAG_STREAM para indicar que admite la semántica de secuencias.

  • Transport applications requests stream semantics by setting the ISC_REQ_STREAM and ASC_REQ_STREAM flags in the calls to the InitializeSecurityContext (General) and AcceptSecurityContext (General) functions.

  • La aplicación llama a la función QueryContextAttributes (General) con una estructura de SecPkgContext_StreamSizes para consultar el contexto de seguridad del número de búferes que se van a proporcionar y los tamaños que se reservarán para encabezados o finalizadores.

  • La aplicación proporciona descriptores de búfer que se van a ahorrar durante el procesamiento real de los datos. Al especificar la semántica de secuencia, el autor de la llamada indica la voluntad de realizar un procesamiento adicional para que el paquete de seguridad pueda controlar el bloqueo de los mensajes. En esencia, para las funciones MakeSignature y VerifySignature , el llamador pasa una lista de búferes. Cuando se recibe un mensaje de un canal orientado a flujos (por ejemplo, un puerto TCP), el autor de la llamada pasa una lista de búferes de la siguiente manera.

    Buffer Longitud Tipo de búfer
    1 Longitud del mensaje SECBUFFER_DATA
    2 0 SECBUFFER_EMPTY
    3 0 SECBUFFER_EMPTY
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    A continuación, el paquete de seguridad funciona en el BLOB. Si la función devuelve correctamente, la lista de búferes es similar a la siguiente.

    Buffer Longitud Tipo de búfer
    1 Longitud del encabezado SECBUFFER_STREAM_HEADER
    2 Longitud de los datos SECBUFFER_DATA
    3 Longitud del remolque SECBUFFER_STREAM_TRAILER
    4 0 SECBUFFER_EMPTY
    5 0 SECBUFFER_EMPTY

     

    El paquete también podría haber devuelto el búfer n.º 4 con longitud x y tipo de búfer SECBUFFER_EXTRA que indica que los datos de este búfer forman parte del siguiente registro y aún no se han procesado. Por el contrario, si la función message devuelve el código de error SEC_E_INCOMPLETE_MESSAGE, la lista de búferes devuelta sería similar a la siguiente.

    Buffer Longitud Tipo de búfer
    1 x SECBUFFER_MISSING

     

    Esto indica que se necesitaban más datos para procesar el registro. A diferencia de la mayoría de los errores devueltos por una función de mensaje, este tipo de búfer no indica que el contexto se ha puesto en peligro. En su lugar, indica que se necesitan más datos. los paquetes de seguridad no deben actualizar su estado en esta condición.

    Del mismo modo, en el lado remitente de la comunicación, el autor de la llamada puede llamar a la función MakeSignature . Es posible que el paquete de seguridad tenga que reasignar el búfer o copiar elementos. El autor de la llamada puede ser más eficaz proporcionando una lista de búferes como se indica a continuación.

    Buffer Longitud Tipo
    1 Longitud del encabezado SECBUFFER_STREAM_HEADER
    2 Longitud de los datos SECBUFFER_DATA
    3 Longitud del remolque SECBUFFER_STREAM_TRAILER

     

    Esto permite al autor de la llamada usar los búferes de forma más eficaz. Al llamar a la función QueryContextAttributes para determinar la cantidad de espacio que se va a reservar antes de llamar a MakeSignature, la operación es más eficaz para la aplicación y el paquete de seguridad.