Creación de un contexto de seguridad de Schannel
Para establecer un contexto de seguridad que protegerá las comunicaciones entre un cliente y un servidor, ambos deben participar en el siguiente proceso de intercambio de información:
Remoto
- El cliente llama a la función InitializeSecurityContext (General).
- Schannel comienza a crear un contexto de seguridad según las reglas del protocolo de seguridad seleccionado. El código devuelto de la función indica si el cliente debe llamar a la función de nuevo. InitializeSecurityContext (General) puede devolver un token que representa el contexto.
- Si se devolvió un token, el cliente lo envía al servidor.
- Cuando InitializeSecurityContext (General) devuelve SEC_E_OK, el cliente se realiza. Si la función devuelve SEC_I_CONTINUE_NEEDED, el cliente debe esperar a que el servidor lo envíe un token. Cuando el cliente tiene el token del servidor, debe volver a llamar a la funciónInitializeSecurityContext (General). (Vuelva al paso 2).
Servidor
- El servidor espera a que un cliente envíe un mensaje que contenga un token de seguridad. El servidor pasa el token recibido del cliente a la función AcceptSecurityContext (General).
- Schannel se basa en el contexto de seguridad parcial representado por el token. Schannel devuelve un token al servidor y un código de retorno que indica si el servidor debe llamar a la función de nuevo.
- Si se devolvió un token, el servidor lo envía al cliente.
- Cuando AcceptSecurityContext (General) devuelve SEC_E_OK, se realiza el servidor. Si la función devuelve SEC_I_CONTINUE_NEEDED, el servidor debe esperar a que el cliente lo envíe un token. Cuando el servidor tiene el token del cliente, debe llamar de nuevo a la función AcceptSecurityContext (General). (Vuelva al paso 2).
Si alguna función devuelve un valor distinto de SEC_E_OK, SEC_I_CONTINUE_NEEDED o SEC_E_INCOMPLETE_MESSAGE (consulte el párrafo siguiente), se ha producido un error. El cliente y el servidor deben llamar a la función DeleteSecurityContext para eliminar el contexto de seguridad parcialmente establecido.
Un caso especial que puede modificar el procesamiento de cliente y servidor es cuando se envía demasiado o demasiado información al cliente o servidor de la otra parte. En el caso de demasiado poca información, ambas funciones devuelven SEC_E_INCOMPLETE_MESSAGE. Para obtener información sobre cómo reconocer y controlar información insuficiente o excesiva, consulte Búferes adicionales devueltos por Schannel.
Temas relacionados