Compartir a través de


Inicialización del modo de usuario

Las aplicaciones distribuidas (cliente/servidor) usan paquetes de seguridad para obtener conexiones autenticadas y intercambiar mensajes. La aplicación llama a funciones de interfaz de proveedor de compatibilidad de seguridad (SSPI) que se asignan a funciones de implementadas por SSP/APy funciones implementadas por SSP/AP en modo de usuario. Esta asignación se realiza mediante el archivo DLL del proveedor de seguridad (Secur32.dll o Security.dll), que se puede cargar dinámicamente en los procesos de cliente y servidor. El archivo DLL también se puede vincular estáticamente mediante Secur32.lib. Tanto el archivo DLL como lib se envían con el Kit de desarrollo de software (SDK) de Microsoft Windows.

El sistema controla la carga del paquete de seguridad en el proceso del cliente o servidor, si el archivo DLL de SSP/AP que contiene el paquete de seguridad está registrado correctamente.

El servidor comienza el proceso de obtener una conexión segura con un cliente mediante la supervisión de un puerto, esperando a que un cliente envíe un mensaje. El cliente comienza el proceso de obtener una conexión segura al servidor llamando a la función SSPI InitializeSecurityContext (General). Esta función se asigna a la función SpInitLsaModeContext del paquete de seguridad personalizado. spInitLsaModeContext devuelve un token al cliente, que lo reenvía al servidor.

Al recibir el token del cliente, el servidor llama a la función SSPI AcceptSecurityContext (General), que se envía a la función deSpAcceptLsaModeContext del paquete de seguridad. Si la función SpAcceptLsaModeContext se realiza correctamente y no se requiere más procesamiento para establecer el contexto de seguridad, la función debe devolver STATUS_SUCCESS al autor de la llamada. Si se requiere procesamiento adicional, la función debe devolver SEC_I_CONTINUE_NEEDED y devolver un token al servidor. El servidor reenvía el token al cliente, que llama InitializeSecurityContext (General) de nuevo.

Este ciclo de llamada puede repetirse con tanta frecuencia como sea necesario hasta que se establezca o se produzca un error en una conexión autenticada. Durante este proceso, si la función de SpAcceptLsaModeContext o spInitLsaModeContext se realiza correctamente y no se requiere más procesamiento para establecer el contexto de seguridad de , la función debe devolver STATUS_SUCCESS al autor de la llamada. Si se requiere procesamiento adicional, la función debe devolver SEC_I_CONTINUE_NEEDED y devolver un token al autor de la llamada, que es responsable de reenviarlo.

El protocolo implementado por el paquete de seguridad determina el número de veces que se repite este ciclo. Por ejemplo, en los paquetes de seguridad que admiten la autenticación mutua de tres piernas, la secuencia de llamada es la siguiente:

  1. El cliente obtiene un token llamando a InitializeSecurityContext (General)y lo envía al servidor. El servidor llama a AcceptSecurityContext (General) la primera vez y obtiene un token de respuesta que envía al cliente.
  2. El cliente usa el token recibido del servidor en una segunda llamada a InitializeSecurityContext (General)y devuelve un token final. El cliente envía este token al servidor.
  3. El servidor recibe el token generado en la fase 2 que usa en la llamada final a AcceptSecurityContext (General).

Cuando las funciones de SpAcceptLsaModeContext y spInitLsaModeContext se realizan correctamente y no se requiere más procesamiento para establecer el contexto de seguridad, las funciones deben devolver STATUS_SUCCESS al autor de la llamada. Además, si el paquete de seguridad personalizado admite las funciones de implementadas por SSP/AP en modo de usuario, SpAcceptLsaModeContext y spInitLsaModeContext deben devolver TRUE mediante el parámetro MappedContext. El valor MappedContext no se devuelve a la aplicación; es interceptado por el LSA.

Cuando MappedContext es true, LSA llama a la función spUsermodeInitialize del archivo DLL de SSP/AP. Esta función proporciona tablas de punteros a las funciones en modo de usuario implementadas por cada paquete de seguridad. Se llama a la funciónspInstanceInit de cada paquete mediante las tablas de función devueltas por SpUsermodeInitialize. spInstanceInit recibe una tabla de punteros a funciones LSA llamadas por SSP/AP en modo de usuario.